MCP:Model Context Protocol 入门
📅 主题:工具与资源的标准化协议、MCP 服务与客户端
一、什么是 MCP
MCP(Model Context Protocol,模型上下文协议) 是一套开放协议,用于标准化 AI 应用与外部「能力」之间的连接方式。这里的「能力」主要包括两类:
- 工具(Tools):可被调用的操作,例如执行代码、调用 API、查询数据库、读写文件等,有输入参数和返回结果。
- 资源(Resources):可被读取的数据源,例如文件、数据库表结构、配置等,通过 URI 标识,支持按需拉取内容到模型上下文。
在 MCP 里:
- MCP Server(MCP 服务):暴露一组工具和/或资源,实现具体逻辑(如连接数据库、调用 GitHub API)。
- MCP Client(MCP 客户端):通常是 AI 应用(如 Cursor、Claude Desktop、自建 Agent),发现并连接这些 Server,把工具和资源「注入」到模型的上下文中,让模型可以按需调用工具、读取资源。
一句话:MCP 定义了「AI 应用如何发现、连接和使用外部工具与资源」的通用约定,避免每个应用、每个能力都各自造一套对接方式。
二、为什么需要 MCP
在没有统一协议之前:
- 每个 AI 产品各自定义「工具」的格式、调用方式、认证方式。
- 开发者想给多个 AI 应用提供同一能力(如「查公司文档」「执行 SQL」),需要为每个应用写一套适配。
- 工具与资源的形态不统一,难以复用和组合。
MCP 的目标是:
- 一次实现,多处使用:写一个 MCP Server(如「文件系统 Server」「GitHub Server」),任何兼容 MCP 的客户端都能连接使用。
- 统一抽象:工具 = 名称 + 描述 + 参数 schema;资源 = URI + 类型 + 可选内容。客户端用同一套模型与 UI 展示、调用。
- 生态与可扩展:社区可以贡献各类 MCP Server(数据库、浏览器、日历、邮件等),用户按需启用,扩展 AI 的能力边界。
三、核心概念
3.1 工具(Tools)
- 定义:Server 暴露的「可执行动作」,每个工具有名称、描述和参数 schema(如 JSON Schema)。
- 使用流程:客户端把工具列表提供给模型;模型决定调用哪个工具、传什么参数;客户端把调用请求发给 Server;Server 执行后返回结果;客户端把结果交回模型继续推理或生成。
- 示例:
read_file(path)、run_sql(query, db)、search_web(query)等。
3.2 资源(Resources)
- 定义:Server 暴露的「可读数据」,用 URI 标识(如
file:///path/to/doc.md、db://schema/users)。 - 使用流程:客户端可列出资源、按 URI 请求内容;Server 返回资源内容(如文本、Base64 等);客户端将内容注入模型上下文,供模型参考。
- 与 RAG 的区别:RAG 一般是「用户问题 → 检索 → 片段进上下文」;MCP 资源是「按 URI 拉取指定资源内容进上下文」,更偏结构化、按需加载。
3.3 Prompts(可选)
- 部分 MCP 实现还支持 Prompts:Server 预定义一批「提示模板」,客户端可以列出并请求渲染后的提示(如「用当前项目信息生成周报」),便于标准化常用任务。
四、架构与通信
4.1 客户端–服务端
- Server:常以进程形式运行,启动后监听或等待连接;实现「列出工具/资源」「执行工具」「读取资源」等接口。
- Client:AI 应用内嵌或单独进程,负责发现 Server、建立连接、转发模型的工具调用与资源请求,并把结果反馈给模型。
4.2 传输方式
- stdio:同一台机器上,Client 启动 Server 子进程,通过标准输入/输出交换 JSON-RPC 消息。简单、易调试,适合本地开发。
- SSE(Server-Sent Events):基于 HTTP,Server 暴露端点,Client 通过 HTTP 请求建立 SSE 连接并收发消息。适合远程、多实例部署。
协议层一般是 JSON-RPC 2.0:请求与响应都是 JSON,包含 method(如 tools/call、resources/read)、params、id 等字段。
4.3 安全与权限
- 连接前可做认证与授权(例如 Token、API Key),避免未授权访问。
- Client 侧可限制「允许连接哪些 Server」「允许调用哪些工具」,避免模型滥用敏感能力。
- 生产环境中通常会对网络、进程边界做隔离与审计。
五、MCP 与 Skills、RAG、Agent 的关系
| 概念 | 角色 | 与 MCP 的关系 |
|---|---|---|
| MCP | 定义「有哪些工具/资源、如何调用/读取」 | 提供能力接口的标准协议 |
| Skills / Agent Skills | 定义「在什么场景、按什么步骤使用能力」 | Skills 描述「何时用哪个 MCP 工具/资源、怎么用」;MCP 提供能力,Skills 提供用法 |
| RAG | 检索知识库并注入上下文 | 可与 MCP 资源结合:资源提供「可读数据源」,RAG 流程决定「检索哪些、如何注入」;也可由 MCP 工具封装检索 API |
| Agent | 决策与编排 | Agent 通过 MCP Client 获取工具与资源列表,在推理中决定调用工具、读取资源,并处理返回结果 |
因此:MCP 是能力层协议;Skills 是用法层;RAG 是检索与注入策略;Agent 是使用这些能力的智能体。四者配合,形成「标准能力接口 + 可复用用法 + 检索策略 + 自主决策」的完整链路。
六、实践:使用与开发 MCP
6.1 作为用户 / 客户端
- 在支持 MCP 的应用(如 Cursor、Claude Desktop)中,配置要连接的 MCP Server(名称、启动命令或 URL、环境变量等)。
- 应用启动后会发现 Server 暴露的工具与资源,并在对话或 Agent 中展示「可用工具」「可读资源」,模型即可按需调用或拉取。
- 可同时连接多个 Server,扩展不同领域能力(文件、数据库、浏览器、日历等)。
6.2 作为开发者 / Server 端
- 实现 MCP 协议规定的接口:初始化、列出工具、调用工具、列出资源、读取资源(以及可选 Prompts)。
- 工具实现中完成真实逻辑(调 API、查库、读写文件),并把结果按协议格式返回。
- 选择传输方式(stdio 或 SSE),编写配置说明(如何启动、所需环境变量),便于用户在其他客户端中复用。
6.3 生态与示例
- 官方与社区提供多种 MCP Server 示例:文件系统、Git、GitHub、数据库、Slack、Notion 等。
- 查阅 Model Context Protocol 文档与 SDK(如 TypeScript/JavaScript、Python)可快速搭建 Server 或集成 Client。
七、小结
- MCP 是「模型上下文协议」,用于标准化 AI 应用与工具、资源之间的连接方式;Server 暴露能力,Client 发现并调用/读取,供模型使用。
- 工具:可执行操作,有名称、描述与参数;资源:可读数据,用 URI 标识;可选 Prompts 提供预定义提示模板。
- 架构:Client–Server,常用 stdio(本地)或 SSE(远程),基于 JSON-RPC 通信;需考虑认证、权限与安全。
- 与 Skills、RAG、Agent:MCP 提供能力接口;Skills 规定用法与编排;RAG 负责检索与注入策略;Agent 基于 MCP 能力做决策与执行。
- 实践:用户侧配置并连接 MCP Server;开发者侧实现协议接口、选择传输方式并编写配置,即可融入现有 MCP 生态。