MCP:基础概念
做项目要用到 MCP,所以对官方的文档进行学习及摘录,不然做出的东西一知半解,不深入。
学习来源: https://modelcontextprotocol.io
什么是 MCP
MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems.
MCP Server 是连接 AI 应用与外部系统的开源标准。
通过 MCP,AI 应用可以连接:
- 数据源(本地文件、数据库)
- 工具(Shell 命令、搜索引擎)
- 工作流(文中举例是“特殊提示词”,我理解应该是“具体任务”)

MCP can have a range of benefits.
- Developers: MCP reduces development time and complexity when building, or integrating with, an AI application or agent.
- AI applications or agents: MCP provides access to an ecosystem of data sources, tools and apps which will enhance capabilities and improve the end-user experience.
- End-users: MCP results in more capable AI applications or agents which can access your data and take actions on your behalf when necessary.
- 为开发者降低开发成本、复杂性
- 赋能 AI 应用或智能体
- 终端用户受益,更好地使用 AI 应用或智能体
MCP 提供了一套“连接”的标准,无疑是规范了开发者的开发逻辑,成本和复杂性必然是会降低的。同时,终端用户使用了赋予更多功能的 AI 应用或智能体,自然是提高了生产效率。
MCP 规范
JSON-RPC 消息格式、有状态连接
MCP 为 AI 应用提供了一套标准化的方式:
- 与语言模型共享上下文信息
- 向 AI 系统展示工具和功能
- 构建可组合的集成和工作流
MCP 为 AI 应用提供了一套标准化的方式:
- 与语言模型共享上下文信息
- 向 AI 系统展示工具和功能
- 构建可组合的集成和工作流
不同于常规网络模型,MCP 客户端的关键特性:
- 归属于主机应用,非单独的应用或进程
- 具备协议适配、能力桥接的功能
- 是主机应用发起连接的具体执行者
规范约定服务端提供以下 3 种特性:
- 资源(Resources):用户或 AI 模型的上下文、数据
- 提示词(Prompts):用户的模板化的消息和工作流
- 工具(Tools):AI 模型可调用的方法
同时,规范约定客户端向服务端提供以下 3 种特性:
- 采样(Sampling):支持服务端主动发起智能体式行为,以及递归的大语言模型交互能力
- 根目录(Roots):允许服务端主动发起查询,获取可操作的 URI(统一资源标识符)或文件系统边界,明确自身的操作范围
- 探询(Elicitation):支持服务端主动发起请求,向终端用户收集 / 获取额外的信息
允许服务端的请求的发起、调用,及资源的操作
MCP 关键组件
MCP 包含的关键组件如下:
- 基础协议:JSON-RPC 消息类型
- 生命周期管理:连接建立、能力协商、会话控制
- 授权机制:基于 HTTP 传输的鉴权和授权
- 服务端特性:资源、提示词、工具
- 客户端特性:采样、根目录、探询
- 实用工具:日志功能等
消息类型包括:请求(Request)、响应(Response)和通知(Notification)。
生命周期的各个阶段:
- 初始化:
- 确认协议
- 能力协商
- 信息共享
- 运行:
- 遵循协商确定的协议版本
- 仅使用经协商成功敲定的能力特性
- 关闭:
- 对于 stdio 类型:
- 关闭子进程的输入流
- 等待服务端程序退出,或发送 SIGTERM
- 若上一操作无响应,则发送 SIGKILL
- 对于 HTTP 类型
- 关闭 HTTP 连接
- 对于 stdio 类型:
MCP 层次结构
MCP 包含两个层级:
- 数据层:基于 JSON-RPC 的客户端-服务端通信
- 传输层:通信的传输机制及通道
MCP 支持两种传输机制:
- Stdio 传输:使用进程间通信的标准输入输出流,没有网络开销
- 流式 HTTP 传输
核心基本部件
服务端:工具、资源、提示词。
Each primitive type has associated methods for discovery (/list), retrieval (/get), and in some cases, execution (tools/call). MCP clients will use the */list methods to discover available primitives. For example, a client can first list all available tools (tools/list) and then execute them.
通过接口暴露服务端特性。
(计划内)
任务(实验):持久的执行包装器,支持对MCP请求的延迟结果检索和状态跟踪(例如,昂贵的计算、工作流自动化、批处理、多步骤操作)
客户端与服务端的交互
- 客户端发送 method 为 “initialize” 的请求
- 客户端通过 method 为 “tools/list” 的请求,获取服务端可用的的工具
- 服务端返回工具的基本信息
- name
- title
- description
- inputSchema
- 客户端通过 method 为 “tools/call” 的请求调用服务端的工具
- 服务端响应结果中的 “result.content” 字段为执行结果
- result.content 是一个数组
- 数组中元素的 type 字段标识内容的类型,有 text、json、code、table、list