All posts
MCPAgentsProtocolTools

MCP: The Protocol That's Changing How Agents Use Tools

December 1, 20252 min readRavi Iyengar · Principal AI Engineer

What Is MCP?

The Model Context Protocol (MCP) is an open standard that defines how AI models connect to external tools, data sources, and services. Think of it as a universal adapter for AI tool use.

Before MCP, every AI application had to build custom integrations: a bespoke Slack connector here, a proprietary database adapter there. MCP standardizes this so any MCP-compatible tool can plug into any MCP-compatible AI application.

The Core Architecture

MCP operates on a client-server model:

  • MCP Client: Your AI application (Claude, a custom agent)
  • MCP Server: A tool, database, or service exposing capabilities
  • Transport: Typically stdio or HTTP with SSE

When an AI needs to use a tool, it:

  1. Discovers available tools from connected MCP servers
  2. Calls the tool with structured arguments
  3. Receives a structured response
{
  "method": "tools/call",
  "params": {
    "name": "search_documents",
    "arguments": {
      "query": "Q3 revenue figures",
      "limit": 10
    }
  }
}

Why This Matters for Agent Development

Composability: Build once, use everywhere. An MCP server for your company's Confluence can be used by Claude, by your custom agents, and by future AI tools without modification.

Security: MCP servers can implement their own auth, rate limiting, and access controls — the AI never needs raw database access.

Ecosystem: Anthropic, Zapier, GitHub, and hundreds of others are shipping MCP servers. Your agents can leverage this ecosystem immediately.

Building Your First MCP Server

from mcp.server import Server
from mcp.types import Tool, TextContent

app = Server("my-knowledge-base")

@app.list_tools()
async def list_tools():
    return [
        Tool(
            name="search_kb",
            description="Search the internal knowledge base",
            inputSchema={
                "type": "object",
                "properties": {
                    "query": {"type": "string"},
                    "limit": {"type": "integer", "default": 5}
                },
                "required": ["query"]
            }
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "search_kb":
        results = await kb.search(arguments["query"], arguments.get("limit", 5))
        return [TextContent(type="text", text=format_results(results))]

Our Verdict

MCP is the right abstraction. It separates concerns cleanly: AI reasoning on one side, tool implementation on the other. We've migrated three of our existing agent integrations to MCP and won't go back.

The ecosystem is young but growing fast. Now is the right time to start building MCP-compatible tools.