Model Context Protocol (MCP): The Standard for AI Tool
By Dorian Laurenceau
๐ Last reviewed: April 24, 2026. Updated with April 2026 findings and community feedback.
Model Context Protocol (MCP): The Standard for AI Tool Integration
In late 2024, Anthropic introduced the Model Context Protocol (MCP), an open standard for connecting AI assistants to external tools, data sources, and services. As AI agents become more capable and widely deployed, the need for standardized integration has become critical. MCP addresses this by providing a universal "language" for AI-to-tool communication.
This comprehensive guide explains MCP's architecture, implementation, and significance for AI development.
<!-- manual-insight -->
MCP in 2026: what the first year of adoption actually taught us
Model Context Protocol (MCP) shipped in late 2024 and became the default way to expose tools and data to Anthropic's Claude, with Claude Code, Claude Desktop, and the broader ecosystem adopting it. One year in, the threads on r/ClaudeAI, r/LocalLLaMA, and r/MachineLearning have a more nuanced view than the launch coverage.
What MCP got right:
- โA genuinely open standard. The modelcontextprotocol.io spec is public, vendor-neutral in principle, and has multiple language implementations.
- โSeparation of capabilities. Tools, resources, and prompts as distinct primitives is a cleaner design than OpenAI's function-calling-only approach.
- โEcosystem momentum. The MCP servers repository catalogues hundreds of community and official integrations. GitHub, PostgreSQL, Slack, Stripe, filesystem, and many more are one-line setups.
- โA natural fit for desktop agents. Claude Desktop users can chain tools locally without writing backend code. The UX is genuinely new.
What the adoption year exposed:
- โSecurity is harder than it looks. Letting an LLM call arbitrary tools on your machine requires careful sandboxing. Simon Willison's writing on MCP security and the OWASP LLM Top 10 both point to prompt-injection-through-tool-results as the central risk. Running untrusted MCP servers is not safe by default.
- โCross-vendor support is partial. OpenAI, Google, and open-source frameworks support MCP to varying degrees. The "universal standard" framing oversold the current state; in practice it's still Anthropic-centric.
- โTool description quality is the bottleneck. MCP doesn't fix the fundamental agent-reliability problem: LLMs call the wrong tool or the right tool with wrong arguments. Good descriptions, scoped permissions, and validation matter more than the protocol.
- โLocal vs. remote servers have different tradeoffs. Local stdio servers are fast and private but don't scale. Remote servers (HTTP + SSE, now streamable HTTP) are scalable but introduce latency and new attack surfaces.
What production teams are actually doing:
- โCurating MCP servers carefully. Treat third-party MCP servers like third-party packages: audit, pin versions, sandbox.
- โWriting tool descriptions as first-class assets. The description is the prompt surface the model uses; it deserves the same attention as any system prompt.
- โUsing MCP for development tooling, not just end-user features. Claude Code exposes MCP to let engineers compose IDE integrations; that's been one of the highest-signal use cases.
- โMixing MCP with traditional function calling. MCP for the universal plumbing, direct function calls for custom business logic where protocol overhead doesn't help.
What's still unclear:
- โWhether OpenAI and Google will fully adopt MCP or fork their own standards. The political dynamics here matter more than the technical merits.
- โHow authentication and authorisation scale. OAuth, API keys, and per-session permissions are getting better, but no universal solution yet.
- โLong-running and streaming tools. The streamable HTTP transport helps but has adoption gaps.
The honest framing: MCP is the most serious attempt at an interoperable agent-tool protocol, and the technical design is solid. The year-one lesson is that protocol alone doesn't deliver reliable agents โ careful tool design, security, and evaluation do. MCP is a foundation, not a finished product.
Learn AI โ From Prompts to Agents
The Integration Problem
Before MCP
Every AI application built custom integrations:
Custom Integration Chaos:
| AI Application | Connection | Service |
|---|---|---|
| AI App 1 | custom code | Database A |
| AI App 1 | custom code | API B |
| AI App 1 | custom code | Service C |
| AI App 2 | different code | Database A |
| AI App 2 | different code | API B |
| AI App 2 | different code | Service D |
Result: N apps ร M services = NรM integrations
Problems:
- โDuplicated effort across applications
- โInconsistent implementations
- โHard to maintain
- โLimited reusability
- โSecurity varies widely
The MCP Solution
Standardize the connection layer:
MCP Standardized Layer:
| AI Applications | โ | MCP Protocol | โ | Services |
|---|---|---|---|---|
| AI App 1 | Database A | |||
| AI App 2 | Standard Layer | API B | ||
| AI App 3 | Service C |
Result: N apps + M servers (via standard MCP)
Benefits:
- โBuild once, use everywhere
- โConsistent security model
- โCommunity-maintained servers
- โPlug-and-play capability
- โClear responsibility boundaries
MCP Architecture
Core Components
| Component | Side | Role | Communication |
|---|---|---|---|
| MCP Host | Client | AI Application (Claude Desktop, IDEs) | JSON-RPC |
| MCP Server | Server | Service provider | JSON-RPC |
| Client Library | Client | SDK for host integration | Internal |
| Server Library | Server | SDK for server implementation | Internal |
Flow: MCP Host โ JSON-RPC โ MCP Server
MCP Host:
- โThe AI application (Claude Desktop, IDEs, etc.)
- โMaintains connections to servers
- โRoutes requests from AI to appropriate server
MCP Client:
- โLibrary within the host
- โHandles protocol communication
- โManages server lifecycle
MCP Server:
- โExposes functionality via MCP
- โCan be local or remote
- โProvides tools, resources, or prompts
Three Capability Types
1. Tools Actions the AI can execute:
{
"name": "search_database",
"description": "Search the company database",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer"}
}
}
}
2. Resources Data the AI can read:
{
"uri": "file:///data/reports/quarterly.pdf",
"name": "Q4 Report",
"mimeType": "application/pdf"
}
3. Prompts Reusable prompt templates:
{
"name": "code_review",
"description": "Structured code review prompt",
"arguments": [
{"name": "code", "required": true},
{"name": "language", "required": false}
]
}
How MCP Works
Connection Flow
1. INITIALIZATION
- โHost โ Server: "initialize" request
- โServer โ Host: capabilities response
- โHost โ Server: "initialized" notification
2. DISCOVERY
- โHost โ Server: "list_tools" request
- โServer โ Host: available tools list
3. INVOCATION
- โAI decides to use tool
- โHost โ Server: "call_tool" with arguments
- โServer โ Host: tool result
4. CLEANUP
- โHost โ Server: shutdown notification
Example: Database Tool
Server Implementation (Python):
from mcp.server import Server
from mcp.types import Tool, TextContent
server = Server("database-server")
@server.list_tools()
async def list_tools():
return [
Tool(
name="query_users",
description="Query user database",
inputSchema={
"type": "object",
"properties": {
"filter": {"type": "string"},
"limit": {"type": "integer", "default": 10}
}
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "query_users":
results = await database.query(
filter=arguments.get("filter"),
limit=arguments.get("limit", 10)
)
return [TextContent(type="text", text=str(results))]
Host Configuration (Claude Desktop):
{
"mcpServers": {
"database": {
"command": "python",
"args": ["database_server.py"],
"env": {
"DATABASE_URL": "postgresql://..."
}
}
}
}
Available MCP Servers
Official Servers
Anthropic provides reference implementations:
| Server | Function |
|---|---|
| Filesystem | Read/write local files |
| GitHub | Repository operations |
| GitLab | GitLab integration |
| Slack | Slack messaging |
| Google Drive | Document access |
| PostgreSQL | Database queries |
| Puppeteer | Browser automation |
| Memory | Persistent memory |
Community Servers
Growing ecosystem:
- โNotion integration
- โLinear (issue tracking)
- โObsidian (notes)
- โVarious APIs
- โCustom enterprise tools
Finding Servers
Resources:
- โGitHub: github.com/modelcontextprotocol
- โMCP Registry: Community-maintained list
- โnpm/PyPI: Published packages
Building MCP Servers
Python SDK
# Basic MCP server in Python
import asyncio
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
# Create server
app = Server("my-server")
# Define tools
@app.list_tools()
async def list_tools():
return [
Tool(
name="greet",
description="Generate a greeting",
inputSchema={
"type": "object",
"properties": {
"name": {"type": "string"}
},
"required": ["name"]
}
)
]
# Implement tools
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "greet":
return [TextContent(
type="text",
text=f"Hello, {arguments['name']}!"
)]
# Run server
async def main():
async with stdio_server() as (read, write):
await app.run(read, write)
asyncio.run(main())
TypeScript SDK
// Basic MCP server in TypeScript
import { Server } from "@modelcontextprotocol/sdk/server";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio";
const server = new Server({
name: "my-server",
version: "1.0.0"
});
// Define tools
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "calculate",
description: "Perform calculation",
inputSchema: {
type: "object",
properties: {
expression: { type: "string" }
}
}
}]
}));
// Implement tools
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "calculate") {
const result = eval(request.params.arguments.expression);
return { content: [{ type: "text", text: String(result) }] };
}
});
// Start server
const transport = new StdioServerTransport();
server.connect(transport);
Security Considerations
Trust Boundaries
| Layer | Trust Level | Responsibilities |
|---|---|---|
| AI Model Outputs | โ ๏ธ UNTRUSTED | Potentially adversarial responses |
| MCP Host | โ Validated | Validates tool calls, enforces permissions, logs actions |
| MCP Server | โ Controlled | Implements access controls, validates inputs, limits scope |
Flow: Untrusted AI Output โ MCP Host (validation) โ MCP Server (execution)
Best Practices
For Server Developers:
- โValidate all inputs strictly
- โImplement least-privilege access
- โLog all operations
- โHandle errors gracefully
- โNever trust AI-provided paths/URLs
For Host Administrators:
- โReview server capabilities before enabling
- โConfigure appropriate permissions
- โMonitor server activity
- โKeep servers updated
- โIsolate sensitive servers
Host Support
Claude Desktop
Native MCP support:
- โConfigure servers in settings
- โServers run locally
- โFull tool/resource/prompt support
IDE Integrations
Growing support:
- โVS Code extensions
- โJetBrains plugins
- โCustom IDE integrations
Custom Applications
Build your own:
- โUse MCP client libraries
- โImplement host logic
- โConnect to any MCP servers
Future of MCP
Roadmap Items
Protocol Enhancements:
- โStreaming responses
- โBetter error handling
- โAuthentication standards
- โRemote server protocols
Ecosystem Growth:
- โMore official servers
- โEnterprise integrations
- โCertification program
- โEnhanced discovery
Industry Adoption
MCP is positioned to become:
- โStandard for AI integrations
- โRequired skill for AI developers
- โPart of enterprise AI architecture
In Brief
- โ
MCP is an open standard for connecting AI assistants to tools and data sources
- โ
Three capability types: tools (actions), resources (data), prompts (templates)
- โ
Architecture separates hosts (AI apps) from servers (capabilities)
- โ
SDKs available for Python and TypeScript development
- โ
Growing ecosystem of official and community servers
- โ
Security requires careful trust boundary management
- โ
Becoming standard for AI tool integration across the industry
Learn AI Agent Development
MCP is a key technology for building capable AI agents. Understanding how agents use tools-and how to build those integrations-is essential for modern AI development.
In our Module 6, AI Agents & Orchestration, you'll learn:
- โHow AI agents reason and plan
- โTool integration patterns
- โThe ReAct framework
- โMulti-agent orchestration
- โBuilding safe, capable agents
- โError handling and recovery
These skills prepare you to build production-ready AI agents.
Module 6 โ AI Agents & ReAct
Create autonomous agents that reason and take actions.
Dorian Laurenceau
Full-Stack Developer & Learning DesignerFull-stack web developer and learning designer. I spent 4 years as a freelance full-stack developer and 4 years teaching React, JavaScript, HTML/CSS and WordPress to adult learners. Today I design learning paths in web development and AI, grounded in learning science. I founded learn-prompting.fr to make AI practical and accessible, and built the Bluff app to gamify political transparency.
Weekly AI Insights
Tools, techniques & news โ curated for AI practitioners. Free, no spam.
Free, no spam. Unsubscribe anytime.
โRelated Articles
FAQ
What is Model Context Protocol (MCP)?+
MCP is an open protocol by Anthropic that standardizes how AI assistants connect to external tools and data sources. It's like USB for AI-a universal connector that works with any compliant service.
How is MCP different from function calling?+
Function calling is provider-specific (OpenAI, Anthropic have different formats). MCP is a universal standard-build an MCP server once, and it works with any MCP-compatible AI client.
What can MCP connect to?+
Databases (PostgreSQL, SQLite), APIs (GitHub, Slack, Linear), file systems, web services, and custom tools. The ecosystem includes community-built servers for popular services.
How do I use MCP with Claude Code?+
Configure MCP servers in Claude Code settings. Specify the server command and environment variables. Claude automatically discovers available tools and can use them during sessions.