MCP 2026-05-12

MCP 模型上下文协议入门

MCP Model Context Protocol Tool Use 集成

背景

让大模型“用工具”早就不是新鲜事,但 2024 年之前 everyone was 各做各的:每个应用要把同一个数据库、同一套 API 各自对接一遍。N 个模型 × M 个工具 = N×M 套集成,重复劳动且难以复用。

2024 年底,Anthropic 提出了 Model Context Protocol(MCP),一套开放标准,被形象地称为“AI 应用的 USB-C 接口”。只要工具方按协议实现一个 MCP Server,任何兼容 MCP 的客户端(IDE、桌面应用、Agent 框架)都能即插即用地调用它。

核心概念

MCP 把“谁在跑模型”和“能力从哪来”解耦,定义了三个角色:

  • 1 Host(宿主):运行模型的应用,例如 Claude Desktop、Cursor、VS Code 插件。
  • 2 Client(客户端):内嵌在 Host 中,负责与某个 Server 建立连接、收发消息。
  • 3 Server(服务端):真正提供能力的进程,可以是一个本地脚本,也可以是远端服务。

Server 通过三类“原语”暴露能力:

  • T Tools(工具):模型可主动调用的函数,例如“查天气”“跑 SQL”。带 JSON Schema 描述的输入。
  • R Resources(资源):可供读取的数据,例如文件内容、数据库行,由应用侧决定何时注入。
  • P Prompts(提示模板):预置给用户复用的交互模板,例如“帮我 code review 这段代码”。

示例

用官方 Python SDK 的 FastMCP 写一个最小天气工具 Server,只需十几行:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
def get_forecast(city: str) -> str:
    """返回指定城市的天气预报(模型据此理解何时调用)"""
    return f"{city} 今天晴,25°C,微风"

if __name__ == "__main__":
    mcp.run()  # 默认通过 stdio 与 Host 通信

客户端发现这个 Server 后,会在合适的时机把 get_forecast 暴露给模型;模型决定调用时,参数由 SDK 自动按类型校验。传输层除了 stdio,也支持基于 HTTP/SSE 的远程连接,方便把内部系统封装成团队共享的 MCP 服务。

总结

MCP 把“模型怎么连工具”这件事标准化了。对开发者来说,一次实现、处处可用;对 Agent 平台来说,可以直接把现成的 MCP Server 编排进工作流。

我计划在“AI Agent 工作台”项目里,把我们已有的企业知识库、Elasticsearch、MySQL 等能力都封装成 MCP Server,这样不同客户端和 Agent 都能用同一套接口调用,避免重复造轮子。