Every AI product built in the last two years has had to solve the same problem independently: how does an LLM access external data and tools? Anthropic released the Model Context Protocol (MCP) in late 2024 as an open specification for solving this problem once, standardized, and reusable. The protocol is now being adopted faster than most specifications in recent memory - 97 million monthly SDK downloads and over 16,000 MCP servers in the wild.
The Problem It Solves
An LLM by itself knows what it was trained on. To be useful in a product, it needs to access current data - files, databases, APIs, calendars, tickets. The traditional approach is “tool calling”: define a JSON schema for each tool, pass it in the system prompt, handle the structured output, call the tool, return results.
The problem is every LLM has a different tool calling API. Every application builds its own integration layer. If you want your AI assistant to access both your Notion workspace and your GitHub issues, you write two integrations. If you switch from Claude to GPT-4, you rewrite both. If a new tool becomes available, you add another integration.
This is the M x N problem. M AI clients times N tools equals M x N integrations. MCP reduces it to M + N. Build one server per tool. Build one client per AI application. Everything connects.
How MCP Works
MCP defines a client-server architecture using JSON-RPC 2.0 over stdio or HTTP with streaming.
An MCP server exposes three types of capabilities:
- Resources: Data that can be read (files, database records, API responses). Think of these as GET endpoints - the AI reads data without side effects.
- Tools: Actions that can be executed (create a ticket, send an email, run a query). Think of these as POST endpoints - the AI triggers actions with side effects.
- Prompts: Pre-defined prompt templates that users can invoke. Think of these as saved workflows - “summarize this PR” or “review this code for security issues.”
An MCP client (the AI application) connects to servers, discovers their capabilities through a handshake, and calls tools or reads resources as needed during a conversation.
// Client discovers what tools the server offers
{
"jsonrpc": "2.0",
"method": "tools/list"
}
// Server responds with available tools
{
"result": {
"tools": [{
"name": "search_documents",
"description": "Search through company documents by keyword",
"inputSchema": {
"type": "object",
"properties": {
"query": { "type": "string" },
"limit": { "type": "integer", "default": 5 }
},
"required": ["query"]
}
}]
}
}
// Client calls a tool
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_documents",
"arguments": {
"query": "quarterly revenue 2026",
"limit": 5
}
}
}
The server handles the call and returns results. The LLM sees the results as context. No proprietary format. No per-model implementation. Any MCP client can call any MCP server without either side knowing or caring about the other’s implementation.
The Ecosystem Exploded
The speed of adoption has been remarkable. Within months of the spec release, MCP servers existed for virtually every major platform:
| Category | Servers | What they expose |
|---|---|---|
| Developer Tools | GitHub, GitLab, Linear, Jira | Repos, issues, PRs, code, project management |
| Databases | PostgreSQL, MySQL, SQLite, MongoDB | Read/write queries, schema inspection |
| Communication | Slack, Teams, Gmail, Discord | Messages, channels, email drafts |
| Cloud | AWS, GCP, Azure, Cloudflare | S3, Lambda, CloudWatch, Workers |
| Productivity | Notion, Google Drive, Confluence | Documents, spreadsheets, wikis |
| Browser | Puppeteer, Playwright | Full browser automation, screenshots, testing |
| Search | Brave Search, Google Search | Web search results |
| Analytics | Google Analytics, Mixpanel | Traffic data, user events |
| Commerce | Shopify, Stripe, WooCommerce | Orders, products, payments |
| CRM | Salesforce, HubSpot | Contacts, deals, pipelines |
Anthropic published reference implementations. The community added thousands more. Companies like Block, Apollo, Replit, Sourcegraph, Zapier, and Linear built official MCP servers for their platforms.
Everyone Adopted It
The fragmentation risk that existed in early 2025 has largely resolved. MCP became the industry standard through sheer adoption velocity:
OpenAI adopted MCP in March 2025 across the Agents SDK, Responses API, and ChatGPT desktop. By December 2025, OpenAI opened its App Directory to MCP-based submissions.
Google confirmed MCP support in Gemini models in April 2025. Google Cloud now provides managed MCP servers across all Google and Google Cloud services with enterprise-ready endpoints.
Microsoft integrated MCP support into its AI platform and development tools.
The Agentic AI Foundation (AAIF) was established under the Linux Foundation, co-founded by Anthropic, Block, and OpenAI, with support from Google, Microsoft, AWS, Cloudflare, and Bloomberg. MCP is no longer one company’s spec - it is an industry-governed standard.
The comparison to HTTP is increasingly accurate. Just as HTTP became the universal language for web communication regardless of which browser or server you use, MCP is becoming the universal language for AI-to-tool communication regardless of which LLM or application you use.
The LSP Parallel
The comparison to LSP (Language Server Protocol) is worth understanding in detail because it predicts where MCP is heading.
Before LSP, every code editor had to implement autocomplete, go-to-definition, and diagnostics for every programming language separately. VS Code needed a Python plugin. Sublime needed a separate Python plugin. Vim needed another. Each was built independently, with different quality levels and different feature sets.
After LSP, implement the language server once (the Python language server), and every LSP-compatible editor gets the feature. One implementation, every client. The M x N problem became M + N overnight.
MCP is the same pattern for AI tool use. Before MCP, every AI application needed its own GitHub integration, its own Slack integration, its own database integration. After MCP, implement the server once, every AI client gets the integration. The ecosystem benefits are identical:
- Tool builders invest in one implementation instead of maintaining integrations for every AI platform
- AI application builders get access to thousands of tools without writing integration code
- Users get consistent behavior across AI applications - the Slack MCP server works the same in Claude Desktop as it does in a custom agent framework
What a Real MCP Server Looks Like
Building an MCP server is straightforward. The Python SDK makes it a few dozen lines:
from mcp.server import Server
from mcp.server.stdio import stdio_server
import mcp.types as types
app = Server("my-notes")
@app.list_tools()
async def list_tools() -> list[types.Tool]:
return [types.Tool(
name="search_notes",
description="Search through personal notes by keyword",
inputSchema={"type": "object", "properties": {
"query": {"type": "string", "description": "Search keyword"},
"max_results": {"type": "integer", "default": 10}
}, "required": ["query"]}
)]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "search_notes":
results = search_notes_db(arguments["query"], arguments.get("max_results", 10))
return [types.TextContent(type="text", text=str(results))]
async def main():
async with stdio_server() as (read, write):
await app.run(read, write, app.create_initialization_options())
The TypeScript SDK is equally concise:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({ name: "my-notes", version: "1.0.0" }, {
capabilities: { tools: {} }
});
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "search_notes",
description: "Search through personal notes by keyword",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "Search keyword" }
},
required: ["query"]
}
}]
}));
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "search_notes") {
const results = await searchNotesDb(request.params.arguments.query);
return { content: [{ type: "text", text: JSON.stringify(results) }] };
}
});
const transport = new StdioServerTransport();
await server.connect(transport);
The server is testable independently of any AI model. The interface is defined by the spec, not by Anthropic’s or OpenAI’s API quirks. A well-written MCP server works today, and it will work with whatever AI application ships next year.
Where MCP Clients Live
MCP clients are already embedded in the tools developers use daily:
| Client | How it uses MCP |
|---|---|
| Claude Desktop | Connects to local MCP servers for file access, database queries, API calls |
| Claude Code | Uses MCP servers for browser testing (Playwright), GitHub operations, database access |
| VS Code | Copilot extensions can use MCP servers for context and tool access |
| Cursor | Built-in MCP support for connecting to external tools during coding |
| Custom agents | Any application using the Claude API, OpenAI API, or open-source LLMs can implement the client spec |
The client implementation is even simpler than the server - connect, discover capabilities, call tools as needed. Most agent frameworks now include MCP client support out of the box.
The 2026 Roadmap
The protocol is actively evolving. Key developments on the roadmap:
Streamable HTTP Transport - The original spec used stdio (local) or HTTP+SSE (remote). The latest spec version adds streamable HTTP, making remote MCP servers more practical for production deployments without the limitations of SSE.
OAuth 2.1 Authentication (Q2 2026) - Enterprise authentication with PKCE for browser-based agents and SAML/OIDC integration for enterprise identity providers. This is the biggest blocker for enterprise adoption and it is being addressed directly.
Agent-to-Agent Communication (Q3 2026) - One agent calling another through MCP as if the second agent were a tool server. This enables hierarchical agent architectures where orchestrator agents delegate to specialized sub-agents through the same protocol.
MCP Apps - Tools can now return interactive UI components that render directly in the conversation. Dashboards, forms, visualizations, and multi-step workflows - not just text responses. This turns MCP servers from data providers into full application backends.
MCP Registry (Q4 2026) - A curated, verified server directory with security audits, usage statistics, and SLA commitments. Enterprise teams will be able to evaluate servers against security requirements before deployment - similar to how package registries work for npm or PyPI but with security verification built in.
Horizontal Scaling - The transport and session model is evolving so servers can scale horizontally without holding state, with metadata discoverable via .well-known endpoints without requiring a live connection.
The Context Cost Problem
One practical consideration that gets overlooked: every MCP server connected to a client adds its tool definitions to the context window. A server with 5 tools might add 500-1000 tokens of schema. Connect 10 servers and that is 5,000-10,000 tokens consumed before the conversation even starts.
This matters because context window space is the most expensive resource in AI applications. Strategies that work in practice:
- Connect only what you need. Do not leave every MCP server enabled all the time.
- Prefer CLI tools for simple operations. Running
git statusthrough a shell is cheaper than connecting a full GitHub MCP server when all that is needed is the current repo status. - Use server selection. Some clients allow dynamic server selection based on the task, connecting to the database server only when a query is needed rather than keeping it loaded throughout the conversation.
Building vs Buying MCP Servers
For common services (GitHub, Slack, databases), use the existing community servers. They are well-tested, maintained, and handle edge cases that a custom implementation would miss.
Build a custom MCP server when:
- The data source is internal (company databases, proprietary APIs)
- The existing server does not expose the specific operations needed
- Security requirements demand that data processing stays within controlled infrastructure
- The tool needs domain-specific logic that a generic server cannot provide
The build cost is low. A functional MCP server for an internal API can be built in an afternoon. The protocol handles the communication layer - the server just needs to implement the business logic.
Bottom Line
MCP is a specification for solving the LLM-to-tool connection problem once instead of every time. It won. OpenAI, Google, Microsoft, and thousands of developers adopted it. The ecosystem has 16,000+ servers, 97 million monthly SDK downloads, and governance under the Linux Foundation.
Building AI integrations without MCP in 2026 is like building a website without HTTP. Technically possible. Practically pointless. The network effects have crossed the threshold where the standard is the standard regardless of opinion.
Whether building AI products, building tools that AI should access, or just trying to make an AI assistant more useful for daily work - MCP is the protocol that connects them. Understanding it is no longer optional.
Comments