Notes from a Q&A session (October 2026).
The Model Context Protocol (MCP) is an open standard for connecting AI applications to external tools and data. Anthropic introduced it in November 2024. It has since been adopted widely across the industry, and its governance was moved to a vendor-neutral foundation under the Linux Foundation.
Common analogy: "USB-C for AI" — one standard plug, so any AI application can connect to any tool or data source.
Before MCP, every AI application needed its own custom integration for every tool:
Without MCP: M apps × N tools = M×N custom integrations
(Claude→GitHub, ChatGPT→GitHub, Cursor→GitHub, Claude→Jira, …)
With MCP: M apps + N servers = M+N implementations
(each app speaks MCP, each tool exposes an MCP server)
Same idea as the Language Server Protocol (LSP), which lets any editor support any programming language. MCP was explicitly modeled on LSP.
┌─────────────────────────── Host (AI application) ───────────────────────────┐
│ e.g. Claude Desktop, Claude Code, VS Code, Cursor, ChatGPT │
│ │
│ LLM ◄──► MCP Client 1 ◄──► MCP Server: GitHub (remote, HTTP) │
│ MCP Client 2 ◄──► MCP Server: Postgres (local, stdio) │
│ MCP Client 3 ◄──► MCP Server: Filesystem (local, stdio) │
└─────────────────────────────────────────────────────────────────────────────┘
| Role | What it is |
|---|---|
| Host | The AI application the user interacts with; manages the LLM, permissions and UI |
| Client | A connector inside the host, one per server |
| Server | A program exposing capabilities, e.g. GitHub, Slack, a database, a wiki |
| Primitive | Controlled by | Purpose | Example |
|---|---|---|---|
| Tools | The model | Actions the LLM can call | create_issue, run_query, send_email |
| Resources | The application | Data to read into context | Files, database schemas, documents |
| Prompts | The user | Templates / workflows the user can start | "Review this PR", "Summarize the incident" |
initialize handshake (protocol version and capabilities are agreed), then calls like tools/list and tools/call, plus notifications such as "the tool list changed".A tool call on the wire:
→ {"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_weather","arguments":{"city":"Berlin"}}}
← {"jsonrpc":"2.0","id":1,
"result":{"content":[{"type":"text","text":"12°C, cloudy"}]}}
Python (official SDK, FastMCP):
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weather")
@mcp.tool()
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return f"12°C, cloudy in {city}"
if __name__ == "__main__":
mcp.run() # stdio transport by default
Type hints and the docstring automatically become the tool's description and JSON schema, which the LLM reads to decide when and how to call it.
Kotlin: there's an official Kotlin SDK, maintained together with JetBrains. Official SDKs also exist for TypeScript, Java, C#, Go, Rust, Swift, Ruby and PHP.
For example, in Claude Code:
claude mcp add weather -- python weather_server.py # local (stdio)
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ # remote
Other hosts use a similar JSON configuration listing each server's command or URL.
MCP gives LLMs real capabilities, so the risks are real too:
roots).| What | An open protocol connecting AI apps to tools and data |
| Why | Replaces M×N custom integrations with one standard |
| Roles | Host → Client → Server |
| Server primitives | Tools (actions), Resources (data), Prompts (templates) |
| Wire format | JSON-RPC 2.0 over stdio or Streamable HTTP |
| Auth | OAuth 2.1 for remote servers |
| SDKs | Python, TypeScript, Kotlin, Java, C#, Go, Rust, and more |