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.
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.