"Protocol" just means: agreed rules for how two things talk to each other. That's it. Nothing more.
Before MCP, every AI framework (LangChain, LlamaIndex, CrewAI) had its own way of calling tools. Every tool had to write N custom integrations. MCP is just everyone agreeing on the same rulebook.
| Protocol | Agreed rule |
|---|---|
| HTTP | How a browser talks to a web server |
| USB | How a device connects to a computer |
| Kafka | How producers and consumers exchange messages |
| MCP | How an AI agent talks to a tool server |
MCP = Model Context Protocol. An open standard for connecting LLMs to external tools, data, and services — created by Anthropic (Nov 2024), now governed by the Linux Foundation's Agentic AI Foundation (co-founded by Anthropic, OpenAI, Google, Microsoft, AWS, Block).
MCP is the interface layer between the LLM and tools + resources — it sits between the reasoning loop and the actual execution.
The server never changes the shape. The client never guesses. That's the protocol — two message types, consistent structure, every server everywhere.
Resources and Prompts are less common. Sampling is advanced — allows the server to trigger LLM calls, enabling recursive/agentic server behaviour.
MCP is the last mile. How the agent reaches a tool. Everything else is the agent's job.
| Agent | MCP | |
|---|---|---|
| What it is | Reasoning loop (think → act → observe) | Protocol / contract for tool exposure |
| Has intelligence? | Yes — LLM decides | No — just routes calls |
| Makes decisions? | Yes | No |
| Can exist alone? | Yes (with hardcoded tools) | No — needs a client |
| Examples | LangGraph, ReAct, Strands | GitHub MCP, Postgres MCP |
| Analogy | The chef | The kitchen equipment standard |
stdio
Client spawns the server as a local subprocess. They talk via stdin/stdout pipes. No port, no network.
best for: local scripts, dev toolsstreamable-http (local)
Server runs on your machine as an HTTP service. Client hits localhost:PORT/mcp.
best for: local microservices, dockerstreamable-http (remote)
Server is hosted by a third party. Client hits their URL with an auth header. You don't run it.
best for: GitHub, Stripe, Slack MCP serverssse in older code, the newer spec calls it streamable_http.| Type | Who built it | Trust | Examples |
|---|---|---|---|
| Official | The platform itself | Highest | GitHub MCP, Stripe MCP, Supabase MCP |
| Reference | Anthropic (to demo the spec) | High | @modelcontextprotocol/server-github, server-postgres |
| Community | Anyone | Verify first | Check stars, last commit, maintenance |
Registries: mcp.so · smithery.ai · mcpservers.org · github.com/wong2/awesome-mcp-servers
The agent calls add(3, 5) → gets 8 → calls multiply(8, 12) → returns 96. Multi-step tool use, automatically, with zero manual orchestration.
| Concept | What to say |
|---|---|
| Why MCP? | Solves N×M tool fragmentation — write tool once, use across any MCP-compatible host |
| Transports | stdio for local subprocess; streamable-http (formerly SSE) for remote/deployed servers |
| MultiServerMCPClient | Stateless by default — each tool invocation creates a fresh ClientSession, executes, cleans up |
| Primitives | Tools (callable), Resources (data), Prompts (templates), Sampling (server-initiated LLM calls) |
| vs plain @tool | MCP tools are language/framework-agnostic — a Go server can expose tools a Python agent uses |
| Security | Permission boundaries, scoped access — server controls what the client can call |
| Interface layer | MCP sits between the LLM reasoning loop and the actual tool/resource execution |
- Add HTTP transport — run math_server with
transport="streamable_http", connect via URL. Simulates a real deployed microservice. - Multi-server — add weather, DB servers to MultiServerMCPClient. Agent auto-routes to the right server per query.
- Connect real MCP servers — GitHub, Postgres, Slack. No code to write — just point at their URL or npx command.
- LangSmith tracing — MCP tool calls trace alongside agent reasoning steps. Aligns with existing LangSmith + OpenTelemetry setup.