Skip to content

MCP (Model Context Protocol) 核心要点

什么是 MCP?

Model Context Protocol(模型上下文协议) 是由 Anthropic 于 2024 年 11 月发布的开放标准,旨在标准化大型语言模型(LLM)与外部工具、系统和数据源的集成方式。

核心定位

MCP 提供了一个通用接口,使 AI 模型能够:

  • 安全地访问外部数据源
  • 调用外部工具和函数
  • 处理上下文提示信息
  • 实现与外部世界的无缝连接

类比:MCP 就像是 AI 应用程序的"USB-C 接口",提供标准化的连接方式。

MCP 简单架构图

核心架构

MCP 采用三层架构设计:

┌─────────────┐
│  MCP Host   │  ← 发起请求的 LLM 应用程序(如 Claude Desktop、IDE)
└──────┬──────┘

┌──────▼──────┐
│ MCP Client  │  ← 在主机内,与服务器保持一对一连接的协议客户端
└──────┬──────┘

┌──────▼──────┐
│ MCP Server  │  ← 提供上下文、工具和提示信息的服务器
└─────────────┘

MCP 架构概览

MCP 详细架构图

通信方式

  • 协议:基于 JSON-RPC 2.0
  • 传输:通过 stdio(标准输入输出)或 HTTP 进行通信
  • 交互:双向通信,支持请求/响应模式

MCP 通信流程图

主要特点

1. 标准化接口

  • 统一的协议规范,减少为每个数据源构建自定义连接器的需求
  • 适用于各种 LLM 提供商和应用程序

2. 多语言 SDK 支持

官方提供多种编程语言的 SDK:

  • Python
  • TypeScript/JavaScript
  • Java、Kotlin
  • C#、Go、PHP、Perl、Ruby、Rust、Swift

3. 安全性

  • 内置权限控制机制
  • 用户认证支持
  • 审计日志功能

4. 可扩展设计

  • 支持自定义插件和扩展
  • 灵活的工具和资源定义
  • 高效的上下文管理

如何创建可执行的 MCP 工具

环境准备

Python 环境:

bash
# 需要 Python 3.11 及以上版本
python --version

# 安装 MCP SDK
pip install mcp
# 或使用 FastMCP(更简洁的框架)
pip install fastmcp

TypeScript 环境:

bash
npm install @modelcontextprotocol/sdk

Python 示例:创建简单的 MCP 服务器

python
from mcp.server.fastmcp import FastMCP

# 创建 MCP 服务器实例
mcp = FastMCP("MyServer")

# 定义工具函数
@mcp.tool()
def add(a: int, b: int) -> int:
    """将两个数字相加"""
    return a + b

@mcp.tool()
def greet(name: str) -> str:
    """向指定的人打招呼"""
    return f"你好, {name}!"

# 运行服务器
if __name__ == "__main__":
    mcp.run()

TypeScript 示例

typescript
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

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

// 定义工具
server.setRequestHandler("tools/list", async () => ({
  tools: [
    {
      name: "add",
      description: "将两个数字相加",
      inputSchema: {
        type: "object",
        properties: {
          a: { type: "number" },
          b: { type: "number" },
        },
        required: ["a", "b"],
      },
    },
  ],
}));

server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "add") {
    const { a, b } = request.params.arguments as { a: number; b: number };
    return {
      content: [
        {
          type: "text",
          text: String(a + b),
        },
      ],
    };
  }
  throw new Error("Unknown tool");
});

// 启动服务器
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("MCP 服务器已启动");
}

main().catch(console.error);

运行和测试

运行 Python 服务器:

bash
python server.py

运行 TypeScript 服务器:

bash
npx tsx server.ts

配置客户端连接: 在 MCP 客户端(如 Claude Desktop)的配置文件中添加服务器配置:

json
{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["/path/to/server.py"]
    }
  }
}

开发流程

  1. 选择 SDK:根据项目需求选择合适的编程语言和 SDK
  2. 定义工具:使用装饰器或配置方式定义工具函数
  3. 实现功能:编写具体的业务逻辑
  4. 测试运行:本地测试服务器功能
  5. 配置连接:在客户端配置服务器连接
  6. 部署使用:部署到生产环境

MCP 工作原理

工具调用流程

MCP 工具调用遵循标准的请求/响应模式,通过 JSON-RPC 2.0 协议进行通信:

MCP 工具调用时序图

生命周期管理

MCP 连接的生命周期包括初始化、发现、操作和清理四个主要阶段:

MCP 生命周期图

核心概念

MCP 定义了三个核心概念,它们共同构成了 MCP 的功能基础:

Tools(工具)

  • 可被 AI 模型调用的函数
  • 包含名称、描述、输入参数定义
  • 返回结构化的结果
  • 实现 AI 模型与外部系统的交互能力

Resources(资源)

  • 可被 AI 模型访问的数据源
  • 支持列表、读取、订阅等操作
  • 例如:文件系统、数据库、API 数据
  • 提供结构化的数据访问接口

Prompts(提示)

  • 预定义的提示模板
  • 帮助 AI 模型更好地理解上下文
  • 支持参数化配置
  • 简化常见的交互模式

应用场景

  • 数据库访问:通过自然语言查询结构化数据
  • 文件系统操作:读取、写入、管理文件
  • API 集成:调用外部 API 服务
  • 开发工具集成:IDE 插件、代码分析工具
  • 实时数据流:订阅和处理实时数据

相关资源

实战教程


💡 提示:MCP 的核心价值在于标准化和可扩展性,通过统一的协议实现 AI 模型与外部系统的无缝集成。