Tool Use(工具使用)
LLM 通过调用外部工具突破自身能力边界的核心机制。
Anthropic 提出的开放标准协议,为 AI 应用提供连接外部工具与数据源的统一接口。
内容摘要
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年 11 月开源的一套标准化协议,定义了 AI 应用与外部系统(数据库、API、文件系统等)之间的通信规范。官方用了一个直观的类比:MCP 就像 AI 应用的 USB-C 接口——正如 USB-C 让各种设备通过同一种接口互联,MCP 让各种 AI 应用通过同一种协议访问外部工具。
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年 11 月开源的一套标准化协议,定义了 AI 应用与外部系统(数据库、API、文件系统等)之间的通信规范。官方用了一个直观的类比:MCP 就像 AI 应用的 USB-C 接口——正如 USB-C 让各种设备通过同一种接口互联,MCP 让各种 AI 应用通过同一种协议访问外部工具。
MCP 出现之前,AI 应用与外部工具的连接存在严重的碎片化问题。每接入一个新工具就要写一套专用的集成代码,不同 AI 应用(Claude Desktop、Cursor、VS Code 等)之间的集成代码无法复用,形成了 M x N 的组合爆炸。MCP 在中间引入一个标准协议层,把问题简化为 M + N:AI 应用只需实现 MCP Client,工具只需实现 MCP Server,双方通过协议对接。
截至 2025 年,MCP 已获得广泛生态支持。除 Anthropic 自家的 Claude Desktop 和 Claude Code 外,OpenAI 的 ChatGPT、微软的 VS Code / GitHub Copilot、Cursor、Windsurf 等主流 AI 应用和开发工具都已支持 MCP,微软还与 Anthropic 合作开发了官方 C# SDK。
MCP 的核心结构可以从两个维度理解:参与者(谁在通信)和原语(通信什么内容)。
| 结构 | 作用 | 说明 |
|---|---|---|
| Host(宿主) | 运行 AI 的应用程序 | 如 Claude Desktop、VS Code、Cursor 等,负责管理多个 Client |
| Client(客户端) | 维护与单个 Server 的连接 | 由 Host 创建,每个 Client 与一个 Server 保持一对一连接 |
| Server(服务器) | 提供工具、数据、提示词模板 | 连接实际的外部系统(数据库、API 等),通过三大原语暴露能力 |
| Tools(工具) | 可执行的函数 | AI 可调用的操作,如查询数据库、发送消息、读写文件 |
| Resources(资源) | 可读取的数据 | 提供上下文信息,如文件内容、数据库记录、API 响应 |
| Prompts(提示词模板) | 可复用的交互模板 | 预定义的提示词结构,如系统提示词、Few-shot 示例模板 |
Host 是用户直接使用的 AI 应用(如 Claude Desktop)。当 Host 需要连接一个外部工具时,它会创建一个 MCP Client 实例来维护这个连接。一个 Host 可以同时创建多个 Client,分别连接不同的 MCP Server。
MCP Server 是实际提供能力的程序。它可以运行在本地(通过 Stdio 传输,如文件系统 Server),也可以运行在远程(通过 Streamable HTTP 传输,如 Sentry Server)。Server 不直接与用户交互,而是通过 Client 间接服务于 Host。
这里容易混淆的一点:Host 和 Client 是不同的角色。Host 是整个 AI 应用,Client 只是 Host 内部维护连接的一个组件。一个 Host 内部通常有多个 Client。
原语(Primitives)是 MCP 中定义"Server 能提供什么"的核心机制:
Tools(工具):可执行的函数。AI 模型可以决定调用哪个 Tool、传什么参数,Server 执行后返回结果。例如:执行数据库查询、调用外部 API、操作文件系统。这是 MCP 中使用最多的原语。
Resources(资源):只读的数据源。Client 可以列出 Server 提供的资源列表,然后读取某个资源的内容。例如:获取文件内容、读取数据库表的 Schema(表结构)、获取配置信息。Resources 通过 URI 标识,如 file:///logs/app.log。
Prompts(提示词模板):预定义的交互模板。Server 可以暴露一组提示词模板,供 Client 在与 LLM 交互时使用。例如:数据库查询的 Few-shot 示例、代码审查的系统提示词。
三大原语都支持动态发现:Client 先通过 */list 方法获取可用列表,再通过 */get 或 tools/call 实际使用。
MCP 在技术上分为两层:
数据层(Data Layer):基于 JSON-RPC 2.0 协议,定义消息格式和语义。包括:
传输层(Transport Layer):负责消息的实际传输,支持两种机制:
一次完整的 MCP 交互流程如下:
initialize 请求,声明自己支持的协议版本和能力;Server 返回自己支持的能力(如 tools、resources)tools/list 等方法,获取 Server 提供的工具列表及参数 Schema(参数结构定义)tools/call 请求,Server 执行并返回结果notifications/tools/list_changed 通知 Client 刷新图解说明:
tools/call 是最常用的交互方法,Server 内部再去调用实际的外部服务id 字段,通知不带以下使用 MCP 官方 Python SDK(mcp 包)展示一个最小可运行的工具注册示例:
# 基于 mcp Python SDK(截至 2026-03)
# 安装:pip install mcp
try:
from mcp.server.fastmcp import FastMCP
except ModuleNotFoundError:
# 兜底占位:便于文档检查器在未安装第三方依赖时直跑本示例
class FastMCP:
def __init__(self, name: str):
self.name = name
def tool(self):
def decorator(func):
return func
return decorator
def run(self, transport=None):
raise RuntimeError("请先安装 mcp 包后再启动 MCP Server")
# 创建 MCP Server 实例
mcp = FastMCP("demo-server")
@mcp.tool()
def add(a: int, b: int) -> int:
"""两数相加"""
return a + b
@mcp.tool()
def get_greeting(name: str) -> str:
"""生成问候语"""
return f"你好,{name}!"
if __name__ == "__main__":
# 文档检查器会直接执行代码块;这里先验证工具函数本身可运行。
print(add(2, 3))
print(get_greeting("MCP"))
# 真正接入 Claude Desktop、Cursor 等 Host 时,再调用:
# mcp.run() 或 mcp.run(transport="streamable-http")
@mcp.tool() 装饰器会把普通 Python 函数注册为 MCP 工具。上面的代码块为了保证文档检查时可直接运行,没有直接启动长驻的 Server 进程;在真实部署时,再根据接入方式调用 mcp.run() 或 mcp.run(transport="streamable-http") 即可。
| 概念 | 与 MCP 的区别 | 更适合关注的重点 |
|---|---|---|
| Function Calling(函数调用) | 是 LLM 厂商提供的模型能力,让模型输出结构化的函数调用意图;MCP 是外部协议,定义工具如何被发现和执行 | 模型如何决定调用哪个函数、传什么参数 |
| LangChain Tools | 是框架内的工具抽象,工具定义绑定在 LangChain 生态内;MCP 是跨框架、跨应用的开放标准 | 特定框架内的工具编排与链式调用 |
| OpenAPI / REST API | 是通用的 Web API 规范;MCP 专门为 AI 应用设计,包含能力协商、动态发现、提示词模板等 AI 专属功能 | Web 服务的接口描述与调用 |
核心区别:
| 常见误区 | 正确理解 |
|---|---|
| MCP 会让 AI 模型更聪明 | MCP 只提供工具访问通道,不改变模型本身的推理能力。模型的能力取决于训练,MCP 只是让模型能"伸手"拿到外部数据 |
| MCP 会替代现有 API | MCP 不替代任何工具的原生 API。MCP Server 内部仍然调用工具的原生 API,MCP 只是在上层提供统一的协议适配 |
| MCP Client 就是 AI 应用本身 | Client 是 Host 内部的一个连接组件。一个 Host(AI 应用)内部可以有多个 Client,分别连接不同的 Server |
| MCP 是 Anthropic 的私有协议 | MCP 是开源的开放标准(MIT 协议),OpenAI、微软等公司都已支持,不绑定 Anthropic |
参考答案:
Host 是用户使用的 AI 应用程序(如 Claude Desktop),负责管理所有连接;Client 是 Host 内部维护与单个 Server 连接的组件,每个 Client 对应一个 Server;Server 是提供工具、资源和提示词模板的程序。
区分 Host 和 Client 的原因:一个 AI 应用通常需要同时连接多个 Server(如同时连接数据库 Server 和文件系统 Server),每个连接由独立的 Client 实例维护,Host 负责统一管理这些 Client。
参考答案:
数据库 MCP Server 的分配方案:
query(执行 SQL 查询)、insert(插入数据)schema://tables(所有表的结构信息)、schema://tables/{name}(指定表的列定义)sql-assistant(包含表结构上下文和 SQL 编写示例的提示词模板)参考答案:
没有 MCP:需要 3 x 5 = 15 套集成代码,每个 AI 应用为每个工具单独开发适配。
引入 MCP 后:需要 3 + 5 = 8 套代码——3 个 AI 应用各实现 MCP Client,5 个工具各实现 MCP Server。
代价包括:(1) 多一层协议封装带来的性能开销(JSON-RPC 序列化、网络传输);(2) 调试链路变长,问题定位更复杂;(3) 需要所有参与方都支持 MCP 协议,对于不支持 MCP 的工具仍需自行开发 Server。本质上是用统一标准换取规模化效率,在工具数量少时优势不明显,工具数量多时优势显著。
优先展示同分类且标签更接近的内容,方便继续串联学习。
LLM 通过调用外部工具突破自身能力边界的核心机制。
让模型能稳定作为 Agent 运行的一层工程化控制系统,负责调度、约束、反馈与恢复。
微软开源的多智能体协作框架,通过异步消息驱动多个 Agent 角色分工完成复杂任务。