Why it matters

Confusion about roles causes implementation issues. Understanding the responsibility split makes designs clean and debugging tractable.

Advertisement

The architecture

Client: hosts LLM. Sends messages to server. Presents server-provided tools/resources to LLM. Handles LLM's tool call requests by invoking server.

Server: implements domain logic. Exposes capabilities via MCP. Executes tool calls on behalf of client.

MCP responsibility splitClient ownsLLM + user + orchestrationServer ownsdomain integrationProtocol betweenMCP JSON-RPCServer is stateless per request; client maintains conversation state
Roles and boundaries.
Advertisement

How it works end to end

Client responsibilities: LLM inference, user interaction, permission gating, session state.

Server responsibilities: capability declaration, tool execution, resource access, prompt template rendering.

Trust: client trusts server for functionality but should sandbox destructive actions.