Every MCP doc, error message and config file uses these three words.
MCP has three roles. Picture a laptop (the host) with several USB ports (clients), each plugged into one device (a server).
- The host is the AI application the user talks to: Claude Desktop, Claude Code, an IDE, or an agent you wrote. It owns the model and the conversation.
- A client is the part of the host that speaks MCP. The host creates one client per server it connects to.
- A server is a program that offers capabilities, such as "search the wiki" or "read this file". It never talks to the model directly; it only answers its client.
So a host connected to a GitHub server and a database server runs two clients, one for each.
A server can be local (a program on your machine that the host starts for you) or remote (a service on the internet the host reaches by URL). Same protocol either way.
When a host connects, its client first asks the server what it offers. In the current version the client can call server/discover to learn the server's name, the protocol versions it supports, and its capabilities: the list of feature families it supports, such as tools or resources. Then the client lists the actual tools and passes their descriptions to the model. When the model wants a tool, the host asks the client, the client asks the server, and the result flows back.
Keeping the server away from the model is deliberate: the host stays in control of what the model sees and what actually runs.
Remember
- Host = the AI app; client = its MCP connector; server = the program offering capabilities
- One client per server connection
- Servers can be local programs or remote services
- Servers never talk to the model; the host decides what reaches it