Research: What is Anthropic MCP (Model Context Protocol)

Objective: Build core understanding of what MCP is, how to set it up, and how we can leverage it in real-time use cases.


Table of Contents

  1. What is MCP?
  2. The Problem MCP Solves
  3. Architecture & Core Components
  4. Three Core Primitives
  5. How It Works (Step by Step)
  6. Setup Guide
  7. Real-World Use Cases
  8. Ecosystem & Adoption
  9. Security Considerations
  10. Limitations & Challenges
  11. Key Takeaways

What is MCP?

The Model Context Protocol (MCP) is an open-source standard introduced by Anthropic in November 2024 that provides a universal way for AI applications (like Claude, ChatGPT, and others) to connect with external data sources, tools, and services.

Think of it as a "USB-C port for AI" — just as USB-C standardizes how devices connect to peripherals, MCP standardizes how AI models connect to external systems.

By late 2025, MCP SDK downloads grew from ~100K to over 97 million per month, with 13,000+ public servers available.


The Problem MCP Solves

LLMs are powerful but isolated — their knowledge is frozen at training time, and they can't natively interact with real-world systems.

Before MCP, every integration between an AI model and an external system (database, API, file system) required custom code, creating an N×M problem:

N AI models × M external systems = countless custom integrations

MCP replaces this fragmentation with a single universal protocol, reducing it to:

N + M connections (each side implements MCP once)

Architecture & Core Components

MCP uses a client-server architecture with these key components:

Component Role
MCP Host The AI application (e.g., Claude Desktop, an IDE) where the user interacts
MCP Client Lives inside the host; manages communication between the LLM and MCP servers
MCP Server A lightweight program that exposes specific data, tools, or capabilities
Transport Layer Uses JSON-RPC 2.0 messages via stdio (local) or SSE (remote)

Visual Flow

┌─────────────────────────────────────────┐
│           MCP HOST (e.g. Claude)        │
│                                         │
│  ┌───────────┐    ┌───────────┐        │
│  │MCP Client │    │MCP Client │        │
│  └─────┬─────┘    └─────┬─────┘        │
└────────┼─────────────────┼──────────────┘
         │                 │
         ▼                 ▼
┌─────────────────┐ ┌─────────────────┐
│  MCP Server A   │ │  MCP Server B   │
│  (e.g. GitHub)  │ │  (e.g. Postgres)│
└─────────────────┘ └─────────────────┘

Three Core Primitives

MCP servers expose capabilities through three primitives:

1. Tools (Model-Controlled)

Functions the AI can invoke autonomously.

Examples: Query a database, send an email, create a GitHub issue, execute code.

2. Resources (App-Controlled)

Read-only data the application can access on behalf of the user.

Examples: File contents, database records, API responses, configuration data.

3. Prompts (User-Controlled)

Pre-crafted instruction templates for common workflows.

Examples: "Summarize this PR", "Generate a migration script for this schema change".


How It Works (Step by Step)

  1. User sends a request to the AI application (e.g., "What's the status of issue #42?")
  2. Tool discovery — The MCP client queries available MCP servers to find relevant tools
  3. Tool invocation — The LLM generates a structured request to use a tool
  4. External action — The MCP server executes the action (e.g., GitHub API call)
  5. Data return — Results are sent back through the MCP client to the LLM
  6. Response generation — The LLM uses the returned data to formulate its answer

Setup Guide

Option 1: Use Pre-built MCP Servers with Claude Desktop

This is the fastest way to get started.

  1. Install Claude Desktop app
  2. Locate the config file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. Add a pre-built server (e.g., filesystem access):
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/directory"]
    }
  }
}
  1. Restart Claude Desktop — Claude automatically discovers and uses the connected tools.

Available pre-built servers: Google Drive, Slack, GitHub, Git, Postgres, Puppeteer, Filesystem, and many more.


Option 2: Build Your Own MCP Server (Python)

Install dependencies:

uv init mcp-server-demo
cd mcp-server-demo
uv add "mcp[cli]"

Create server.py:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Demo")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.tool()
def search_database(query: str) -> str:
    """Search the company database for relevant records."""
    # Your implementation here
    results = db.execute(query)
    return str(results)

@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Return a personalized greeting."""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.run()

Connect to Claude Desktop:

{
  "mcpServers": {
    "demo": {
      "command": "uv",
      "args": ["run", "path/to/your/server.py"]
    }
  }
}

Option 3: Build Your Own MCP Server (TypeScript)

Initialize project:

mkdir mcp-server && cd mcp-server
npm init -y
npm install @modelcontextprotocol/sdk

Create src/index.ts:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "mcp-server", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

// List available tools
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: "hello",
        description: "Say hello to someone",
        inputSchema: {
          type: "object",
          properties: { name: { type: "string" } },
          required: ["name"],
        },
      },
    ],
  };
});

// Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "hello") {
    return {
      content: [
        { type: "text", text: `Hello, ${request.params.arguments?.name}!` },
      ],
    };
  }
  throw new Error("Unknown tool");
});

const transport = new StdioServerTransport();
await server.connect(transport);

Connect to Claude Desktop:

{
  "mcpServers": {
    "mcp-server": {
      "command": "node",
      "args": ["path/to/build/index.js"]
    }
  }
}

Testing & Debugging

Use the MCP Inspector for debugging before wiring to a client:

npx @modelcontextprotocol/inspector build/index.js

This provides a browser-based UI with full request/response visibility.


Real-World Use Cases

1. Software Development (High Priority for Us)

2. Enterprise Knowledge Management

3. Database Queries in Natural Language

4. Workflow Automation

5. AI Fleet Management

6. Multi-Turn Conversational AI (Customer Support)

7. Cross-Platform AI Applications

8. Data Analytics

9. Efficient Tool Use via Code Execution


Ecosystem & Adoption

Clients (AI Apps Supporting MCP)

Client Type
Claude Desktop AI Assistant
ChatGPT AI Assistant
VS Code (Copilot) IDE
Cursor IDE
Zed IDE
Replit IDE
Sourcegraph Code Search
Codeium Code Completion

Enterprise Adopters

SDKs Available

Growth Stats


Security Considerations

Feature Description
OAuth 2.1 Standard authentication for remote servers
PKCE Authorization code flow protection
Least-Privilege Access Servers only expose what's necessary
Human-in-the-Loop Users approve sensitive actions
Scoped Permissions Granular control over what tools can do

Limitations & Challenges

Challenge Details
Initial Complexity Setting up custom servers requires development effort
Context Window Pressure Many tool definitions can overload the LLM's context
Token Consumption Large numbers of connected tools increase costs
Ecosystem Dependency Value grows with adoption — early stages still maturing
Performance at Scale Latency considerations with many concurrent server connections

Key Takeaways

Core Understanding

  1. MCP is the emerging standard for AI-to-tool connectivity — backed by Anthropic, adopted by OpenAI, Google, Microsoft
  2. It's open-source and protocol-based — not vendor-locked
  3. Client-server architecture with JSON-RPC 2.0 transport
  4. Three primitives: Tools, Resources, Prompts
  5. Massive ecosystem growth — 13K+ servers, 97M+ downloads/month

How We Can Leverage It

Opportunity Action
Internal tooling Build MCP servers for our databases, APIs, and services
Developer productivity Connect our repos, docs, and project management tools to AI assistants
Customer-facing AI Use MCP to give our AI products access to real-time data
Workflow automation Chain multiple internal systems through MCP for zero-code automation
Competitive advantage Early adoption positions us ahead as MCP becomes industry standard

References