MCP:one socket,many weird machines.
Model Context Protocol gives AI applications a shared way to discover and use external context and tools. The plug shape is standard. What you plug in—and whether you trust it—is still your problem.
- 1:1client to server
- JSON-RPCmessage layer
- ≠ TRUSTpermission is separate
The host owns the experience, model, policy, and approval UI.
MCP standardizes the conversation, not the decision.
A host opens a dedicated client connection to each server. They agree on a protocol version and supported capabilities, then exchange typed requests, responses, and notifications. The host still decides what reaches the model and what is allowed to run.
The AI application the user touches. It manages the model, permissions, context, consent, and a fleet of clients.
One host, many connections.A protocol component created by the host. It negotiates and maintains one dedicated session with one server.
One client, one server.A local process or remote service exposing focused resources, prompts, tools, and other negotiated features.
Useful does not mean trusted.Change the server. Keep the socket.
Patch the host into one server. The connection ritual stays recognizable; the discovered features, authorization boundary, and request all change.
Turn this bug report into a tracked issue.
- 01initialize
Agree on version; exchange capability categories.
- 02discover
*/listreveals the actual inventory. - 03host gate
Mutation ahead. The host shows the server, tool, and arguments to the user before sending.
- 04tools/call
create_issue { title, body }
- 05response
Issue #842 created · URL returned
- TOOL
create_issue - RESOURCE
project://roadmap - PROMPT
triage_bug
The client’s OAuth token is audience-bound to this MCP server. Any upstream tracker credential is a separate token.
Same protocol shape. Different capability set, credential path, and blast radius.
The host has one hand on every plug.
“The model connects to MCP” is convenient shorthand, but it erases the useful boundary. The host creates clients, each client maintains one server session, and servers remain isolated from the full conversation and from one another.
Capability negotiation says which feature families are legal. Discovery methods such as tools/list reveal the actual items inside those families.
- 01INIT
initializeThe client proposes a protocol version, capabilities, and identity. The server replies with its supported version, capabilities, and identity.
- 02READY
notifications/initializedThe client confirms that normal operation can begin. Unsupported features stay off the board.
- 03OPERATE
list · read · callThe pair exchanges requests, responses, and notifications allowed by the negotiated capabilities.
- 04CLOSE
transport shutdownThere is no magic goodbye message. The underlying stdio process or HTTP connection signals termination.
The client launches a subprocess and trades newline-delimited JSON-RPC over standard input and output.
The server exposes an HTTP endpoint; POST carries messages and SSE may stream server messages.
A shared socket is not a universal appliance.
Standardization deletes a large class of bespoke glue. It does not delete product judgment, security work, compatibility testing, or delightfully specific bugs.
- MESSAGE SHAPE
JSON-RPC requests, responses, errors, and notifications.
- LIFECYCLE
Version agreement, capability negotiation, operation, and shutdown.
- PRIMITIVES
Common interfaces for tools, resources, prompts, and negotiated features.
- DISCOVERY
Ways to list what a server offers before attempting to use it.
- TRANSPORTS
Standard local stdio and remote Streamable HTTP lanes.
- MODEL BEHAVIOR
MCP does not decide what the model notices or chooses.
- PERMISSION POLICY
The host still defines consent, approval, and sandboxing.
- SERVER SAFETY
A valid protocol speaker can still be buggy or malicious.
- SEMANTIC QUALITY
Two tools with tidy schemas can still mean very different things.
- UNIVERSAL SUPPORT
Hosts and servers implement different optional capabilities and extensions.
Use MCP where adapters are breeding.
The sweet spot is a growing matrix: several AI hosts, several systems, and repeated need for discovery plus structured access. One tiny one-off API call may not need a protocol ecosystem in a trench coat.
Developer workbenches
Expose repository resources, search tools, test runners, issue trackers, and focused prompts to an IDE or coding host.
Knowledge desks
Offer handbooks, schemas, support articles, and curated workflows without baking every data connector into the host.
Operational cockpits
Let one host discover focused servers for tickets, deployments, calendars, monitoring, or internal workflows.
The socket is not the lock.
MCP creates a boundary you can reason about. It does not enforce your policy for you. The host, client, server, authorization layer, and upstream systems each keep distinct responsibilities.
- 01SUPPLY CHAIN
Trust the server deliberately.
Treat server code, tool descriptions, annotations, resources, and returned content as untrusted input until you have verified the publisher and behavior.
- 02HUMAN GATE
Approval belongs in the host.
Before a tool call, show the user which server, which tool, which arguments, and the likely effect. MCP defines the call—not your consent interface.
- 03BLAST RADIUS
Give every plug a small fuse.
Use least privilege, narrow roots and scopes, sandbox local processes, validate inputs, and keep dangerous operations separately gated.
- 04NO TOKEN TOURISM
Keep credentials in their lane.
An HTTP token must be intended for the MCP server. Do not pass it through to an upstream API; the server uses a separate upstream credential. Stdio servers get credentials from their environment.
- 05BORING = GOOD
Operate it like a real system.
Add timeouts, cancellation, audit logs, version checks, origin validation for HTTP, secure session handling, and a plan for a server that hangs or disappears.
A connection, printed on thermal paper.
SDKs wrap this in nicer APIs, but the durable mechanism is a JSON-RPC exchange. This abridged transcript separates negotiated capability families, discovered items, host approval, and the eventual call.
- 01OUTinitialize
{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-11-25", "capabilities": {}, "clientInfo": { "name": "ai-workbench", "version": "1.0.0" } } }Client proposes a version and advertises what it can support.
- 02INinitialize result
{ "jsonrpc": "2.0", "id": 1, "result": { "protocolVersion": "2025-11-25", "capabilities": { "tools": { "listChanged": true }, "resources": {} }, "serverInfo": { "name": "issue-dock", "version": "2.4.0" } } }Server confirms the version and advertises capability families.
- 03OUTtools/list
{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }Now the client asks which tools actually exist.
- 04HOSTuser approval
server: issue-dock tool: create_issue args: { "title": "Export fails on CSV" }This gate is host product behavior, not a JSON-RPC method.
- 05OUTtools/call
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "create_issue", "arguments": { "title": "Export fails on CSV" } } }Only after approval does the client send the structured call.
Six things the acronym is not wearing.
MCP is useful enough without promoting it to model, agent, security system, integration fairy, and universal remote.
MCP is an agent framework.
No. It defines a protocol for exchanging context and capabilities. The host decides how—or whether—to run an agent loop.
The model connects directly to every server.
The host creates MCP clients and mediates connections. Servers should not receive the whole conversation or inspect sibling servers.
A valid MCP server is a safe MCP server.
Protocol compliance proves message compatibility, not benevolence, correctness, least privilege, or good taste.
Discovery means the model gets everything.
Listing a capability or resource only reveals that it exists. The host still decides what is exposed, read, approved, or placed in context.
One MCP implementation works everywhere.
Versions, optional capabilities, transports, extensions, authorization, and host UX vary. Negotiate, inspect, and test.
MCP replaces API design.
It standardizes the outer conversation. Clear names, useful schemas, idempotency, errors, permissions, and domain semantics remain your craft.
MCP is a negotiated protocol boundary. The host keeps the judgment; clients keep connections isolated; servers expose focused capabilities; permissions and credentials keep their own lanes.
Patch another server