Skip to main content

MCP Protocol Integration

Claude Code acts as an MCP (Model Context Protocol) client, connecting to external MCP servers to extend its tool and resource capabilities.

Connection Management

src/services/mcp/client.ts supports multiple transports: stdio, SSE (with OAuth), HTTP, WebSocket, SDK (in-process), Claude.ai proxy, and IDE-specific transports. Connections are lazy (memoized).

Connection Flow

connectToServer(config) -> pick transport -> create Client -> connect
// Returns: connected | failed | needs-auth

useManageMCPConnections (React hook) manages reconnection, listens for ToolListChangedNotification, and refreshes tools.

Tool Discovery & Integration

Each discovered tool gets a local Tool object cloned from MCPTool template with name mcp__serverName__toolName, overriding description, schema, call function, and permissions.

MCP Configuration

Configs merge from multiple sources: enterprise policy (exclusive override) -> user (~/.claude/.mcp.json) -> project (.claude/.mcp.json) -> plugins. Supports ${VAR} environment variable expansion.

MCP Resources & Skills

ListMcpResourcesTool and ReadMcpResourceTool handle MCP resources. When MCP_SKILLS feature flag is on, MCP prompts can be loaded as skills.

Key Source Files

FileResponsibility
src/services/mcp/client.tsMCP client: connect, discover, call
src/services/mcp/config.tsMCP config merging
src/services/mcp/types.tsType definitions
src/tools/MCPTool/MCPTool.tsMCP tool template

Next

Go to 10-multi-agent.md to learn about multi-agent coordination.

Hands-on Experiment

This chapter has a corresponding Python experiment:

Lab 09 — MCP Client

Covers: MCP protocol, tool discovery, tool pool merging

cd experiments && python -m exp_09_mcp_client.main --mock