MCP 是什么?

Model Context Protocol (MCP) 是一个开放标准,用于连接 AI 应用与数据源。就像 USB-C 为设备连接提供了通用接口一样,MCP 为 AI 模型提供了访问外部数据和工具的标准化方式。

核心价值

MCP 解决了 AI 模型被困在”信息孤岛”中的问题,让它们能够安全、标准化地访问实时数据和执行外部操作。

三大核心功能

MCP 协议定义了三种主要的交互模式,每种都解决特定的使用场景:

1. 资源 (Resources) 📄

定义: 资源是服务器向客户端暴露的数据内容,可以是文件、数据库记录、API 响应等任何形式的信息。 特点:
  • 只读访问: 资源通常用于数据检索
  • URI 标识: 每个资源都有唯一的 URI 标识符
  • 类型多样: 支持文本、二进制、JSON 等多种数据格式
实际应用:
# 示例:访问文件系统资源
@server.resource("file://{path}")
async def get_file_content(path: str):
    return {
        "uri": f"file://{path}",
        "name": os.path.basename(path),
        "mimeType": "text/plain",
        "content": await read_file(path)
    }
使用场景:
  • 文档内容检索
  • 数据库查询结果
  • API 数据获取
  • 配置文件读取

2. 工具 (Tools) 🔧

定义: 工具是服务器向客户端暴露的可执行功能,允许 AI 模型执行操作、修改数据或触发外部系统的行为。 特点:
  • 可执行: 工具会执行具体的操作
  • 参数化: 支持输入参数来定制行为
  • 副作用: 可能会修改外部状态
实际应用:
# 示例:文件操作工具
@server.tool("create_file")
async def create_file(path: str, content: str):
    await write_file(path, content)
    return f"文件 {path} 创建成功"

@server.tool("send_email")
async def send_email(to: str, subject: str, body: str):
    await email_service.send(to, subject, body)
    return "邮件发送成功"
使用场景:
  • 文件和数据操作
  • API 调用
  • 系统命令执行
  • 业务流程触发

3. 提示 (Prompts) 💭

定义: 提示是服务器预定义的提示模板,可以被客户端调用来生成特定类型的 AI 交互。 特点:
  • 模板化: 预定义的提示结构
  • 参数支持: 可以接受参数来定制提示内容
  • 工作流: 支持复杂的多步骤操作
实际应用:
# 示例:代码审查提示
@server.prompt("code_review")
async def code_review_prompt(file_path: str, language: str):
    code_content = await read_file(file_path)
    return {
        "messages": [
            {
                "role": "user",
                "content": f"请审查这段 {language} 代码并提供改进建议:\n\n{code_content}"
            }
        ]
    }
使用场景:
  • 代码审查工作流
  • 文档生成模板
  • 数据分析提示
  • 创意写作助手

架构模式

客户端-服务器模型


↔️

通信协议

JSON-RPC 2.0: MCP 使用经过验证的 JSON-RPC 2.0 协议,确保可靠的通信:
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_file",
    "arguments": {
      "path": "/tmp/test.txt",
      "content": "Hello, MCP!"
    }
  }
}

传输方式

本地进程通信
  • 通过标准输入/输出流通信
  • 适用于本地服务和工具
  • 简单可靠,易于调试

数据流示例

让我们通过一个具体的例子来理解 MCP 的工作流程:

场景:AI 助手帮助处理 GitHub Issues

  1. 用户请求: “帮我查看最新的 GitHub Issues 并创建一个总结报告”
  2. 资源访问:
    客户端 → 服务器: 获取资源 "github://issues/latest"
    服务器 → 客户端: 返回最新 Issues 列表
    
  3. 工具调用:
    客户端 → 服务器: 调用工具 "create_report"
    服务器 → 客户端: 返回生成的报告
    
  4. 结果呈现: AI 助手向用户展示处理结果

安全和权限

权限控制

  • 资源级权限: 控制可访问的数据范围
  • 工具级权限: 限制可执行的操作类型
  • 用户上下文: 基于用户身份的权限管理

安全最佳实践

  • 输入验证: 严格验证所有输入参数
  • 权限最小化: 只授予必要的最小权限
  • 审计日志: 记录所有关键操作
  • 加密传输: 使用 TLS 加密敏感数据

与现有技术的对比

特性MCPREST APIGraphQLWebSocket
标准化✅ 统一协议❌ 各自实现✅ 有规范❌ 自定义协议
AI 优化✅ 专为 AI 设计❌ 通用 API❌ 通用查询❌ 通用通信
工具集成✅ 原生支持❌ 需额外开发❌ 仅数据查询❌ 需自定义
学习成本🟡 中等🟢 低🟡 中等🔴 高

开发者生态

官方 SDK

  • Python: pip install mcp
  • TypeScript: npm install @modelcontextprotocol/sdk
  • Kotlin: JetBrains 合作维护
  • Go: Google 合作维护

社区工具

  • MCP Inspector: 调试和测试工具
  • 服务器模板: 快速启动项目
  • 示例集合: 最佳实践参考

企业采用

  • Block: 金融服务集成
  • Apollo: GraphQL 数据访问
  • Replit: 开发环境集成
  • Sourcegraph: 代码搜索和分析

未来发展

路线图

  • 协议扩展: 支持更多数据类型和操作
  • 性能优化: 提升大规模部署的性能
  • 工具生态: 更丰富的预构建服务器
  • 标准认证: 企业级安全认证机制

社区参与

  • 开源贡献: 参与核心协议开发
  • 服务器开发: 构建特定领域的服务器
  • 最佳实践: 分享使用经验和模式
  • 文档改进: 完善社区文档
MCP 代表了 AI 应用架构的重要演进,从孤立的模型转向连接的智能系统。理解这些核心概念是掌握 MCP 的第一步。

下一步

现在您已经了解了 MCP 的核心概念,可以继续学习: