一、 MCP 是什么?为什么需要它?
在标准的 Function Calling 模式中,一个核心痛点是:工具(函数)的定义和管理与应用程序代码强耦合。
- 传统方式: 开发者需要在应用程序代码中硬编码可用函数的列表(JSON Schema)。要增加、修改或删除一个工具,必须修改应用代码并重新部署。
- 问题: 这种方式缺乏动态性和模块化。想象一下,你为模型开发了一个“工具箱”,但每次想增加一把新“扳手”,都需要把整个工具箱返厂改造。
MCP(由 Anthropic 提出并开源)旨在解决这个问题。 它定义了一个标准化的协议,允许大模型应用程序(称为 MCP Client)以动态、安全的方式从外部的工具服务器(称为 MCP Server) 发现和调用工具。
核心思想: 将工具的提供者(Server)与工具的使用者(Client/Model)解耦。
二、 MCP 的核心架构与组件
MCP 的架构遵循客户端-服务器模型,通常基于 WebSocket 或 STDIO 进行通信。
| 组件 | 角色 | 职责 |
|---|---|---|
| MCP Client(客户端) | 大模型应用程序 | 1. 连接一个或多个 MCP Server。 2. 从 Server 发现可用的工具(函数)和资源(如只读数据)。 3. 将发现的工具动态注入给大模型,供其调用。 4. 将模型的工具调用请求转发给对应的 Server 并返回结果。 |
| MCP Server(服务器) | 专门化的工具/数据提供者 | 1. 向 Client 注册自己提供的工具列表(包含完整的 JSON Schema 描述)。 2. 监听来自 Client 的工具调用请求。 3. 执行具体的工具逻辑(如调用 API、查询数据库、执行代码)。 4. 将执行结果返回给 Client。 |
| MCP Protocol(协议) | 通信的“语言” | 定义了 Client 和 Server 之间交互的标准消息格式和流程,例如 tools/list, tools/call, resources/read 等。 |
三、 MCP 如何扩展 Function Calling 能力?
MCP 并没有改变大模型本身进行 Function Calling 的底层原理(意图识别、参数提取),而是在工具的管理和集成层面带来了革命性的变化。
1. 工具的动态发现与组合
- 传统模式: 工具列表是静态的,在应用启动时就固定了。
- MCP 模式: Client 可以在运行时连接多个专门的 MCP Server。例如:
- 连接一个
Weather Server,提供全球天气查询工具。 - 连接一个
Jira Server,提供项目管理工具(创建任务、查询进度)。 - 连接一个
CompanyDB Server,提供内部数据库查询工具。
- 连接一个
- 优势: 模型的能力可以像“插拔硬件”一样动态扩展。无需修改核心应用代码,只需让应用连接新的 Server,模型就能立即获得新工具。
2. 工具实现的专业化与隔离
- 传统模式: 所有工具的代码都写在同一个应用程序里,耦合度高。
- MCP 模式: 每个 MCP Server 都是一个独立的进程,专注于某一领域的工具实现(如 GitHub 操作、Slack 消息发送)。
- 优势:
- 安全: 工具运行在独立的沙箱中,即使某个 Server 被恶意利用或出现故障,也不会直接影响主应用。
- 技术栈自由: 不同的 Server 可以用最适合的语言编写(Python, Go, JavaScript 等),只要遵守 MCP 协议即可。
- 易于维护: 可以独立更新、部署和扩展每个工具 Server。
3. 资源(Resources)概念的引入
MCP 不仅定义了工具(可执行的操作),还定义了资源(Resources)——即只读的数据源。
- 示例: 一个 MCP Server 可以提供一个
read_file工具,同时也可以将一个配置文件注册为一个resource。模型可以直接请求读取这个 resource 的内容,而无需通过调用工具的间接方式。 - 优势: 为模型提供了更直接、更高效的数据访问通道,丰富了模型与外界交互的模式。
四、 MCP 的实践流程与示例
假设我们要构建一个智能助手,它可以管理日历和发送邮件。
没有 MCP 的时代:
- 在助手应用的代码里,定义
create_calendar_event和send_email两个函数的 JSON Schema。 - 在代码里实现这两个函数的逻辑。
- 将函数列表和实现与主应用捆绑部署。
使用 MCP 的时代:
-
部署工具服务器:
- 部署一个
Calendar MCP Server,它向网络宣告自己提供create_calendar_event工具。 - 部署一个
Email MCP Server,它向网络宣告自己提供send_email工具。
- 部署一个
-
配置 MCP Client(智能助手应用):
- 配置应用启动时连接上述两个 Server 的地址。
-
运行时交互:
- 发现: 助手应用启动后,自动向两个 Server 请求工具列表。Server 返回工具的完整描述(JSON Schema)。
- 注入: 助手应用将获取到的工具列表动态地注入到给大模型的提示词中。
- 调用: 用户说:“帮我安排明天下午两点和客户的会议,并发邮件通知他。”
- 大模型识别意图,决定调用
create_calendar_event和send_email。 - 生成参数,助手应用将调用请求路由到对应的
Calendar Server和Email Server。 - Server 执行具体操作(写入日历、调用 SMTP API),将结果返回给助手应用。
- 助手应用将结果整合后,通过模型生成最终回复给用户。
- 大模型识别意图,决定调用
五、 MCP 与现有技术栈的关系
- LangChain / LlamaIndex: 这些高级框架已经开始集成 MCP 支持。它们可以作为一个功能强大的 MCP Client,让你更容易地管理和连接多个 MCP Server,从而构建复杂的 Agent 系统。
- 云服务商: AWS Bedrock、Google Vertex AI 等平台预计将提供托管的 MCP Server 仓库或更简单的集成方式。
- 开源生态: 社区正在为各种常见服务(Notion, Slack, GitHub, 数据库等)积极开发开箱即用的 MCP Server,未来可以实现“即插即用”的工具集成。
总结:MCP 的价值
MCP 是 Function Calling 能力的“操作系统”或“总线”。它没有取代 Function Calling,而是为其构建了一个更强大、更灵活的基础设施。
| 特性 | 传统 Function Calling | 基于 MCP 的 Function Calling |
|---|---|---|
| 工具管理 | 静态、集中式 | 动态、分布式 |
| 集成复杂度 | 高(代码耦合) | 低(协议标准化) |
| 安全性与隔离性 | 低 | 高(进程隔离) |
| 可扩展性 | 差(需修改代码) | 强(即插即用) |
对于工程师而言,MCP 意味着:
- 模块化开发: 可以组建团队专门开发维护不同领域的工具 Server。
- 生态共享: 可以直接使用社区开发的高质量 MCP Server,无需重复造轮子。
- 未来适应性: 当需要为模型增加新能力时,只需寻找或开发一个对应的 MCP Server 并连接即可,大大降低了系统的演进成本。
MCP 协议正在成为构建下一代、可组合式 AI 应用的关键基石,它使大模型的工具调用能力变得更加企业级和工业化。
附录:
常用MCP Server列表
下面这个表格整理了一些常用且评价不错的 MCP Server,你可以根据自己的需求来选择。
| 分类 | MCP Server 名称 | 主要功能简介 | 项目地址 |
|---|---|---|---|
| 📦 开发与协作 | GitHub MCP Server | 让 AI 助手能与 GitHub 仓库交互,访问代码、Issues 和 Pull Requests。 | https://github.com/github/github-mcp-server |
| Linear MCP Server | 与 Linear 项目管理 API 集成,支持问题跟踪和产品迭代周期管理。 | https://github.com/jerhadf/linear-mcp-server | |
| Notion MCP | 安全地访问你的 Notion 工作区,获取文档、数据库等内容。 | https://github.com/mcnijay/notion-mcp | |
| 🗄️ 数据库与搜索 | Neo4j MCP | 与 Neo4j 图数据库交互,执行查询和分析关系网络。 | https://github.com/neo4j-contrib/mcp-neo4j |
| Qdrant MCP Server | 访问和操作 Qdrant 向量数据库,执行语义搜索。 | https://github.com/qdrant/mcp-server-qdrant | |
| Brave Search MCP Server | 使用注重隐私的 Brave 搜索引擎进行网络查询。 | https://github.com/arben-adm/brave-mcp-search | |
| Meilisearch | 一个极速的开源搜索引擎,其官方 MCP Server 支持使用MCP调用。 | https://github.com/meilisearch/meilisearch | |
| ☁️ 云服务与运维 | Cloudflare MCP Server | 与 Cloudflare 服务集成,包括 Workers、KV、R2 和 D1。 | https://github.com/cloudflare/mcp-server-cloudflare |
| AWS MCP Server | 使 AI 助手能够在安全的 Docker 环境中执行 AWS CLI 命令。 | https://github.com/alexei-led/aws-mcp-server | |
| Kubernetes MCP Server | 通过 MCP 操作 Kubernetes 集群,适合 AI 驱动的 DevOps 工具。 | https://github.com/Flux159/mcp-server-kubernetes | |
| 🌐 网络与自动化 | Firecrawl | 将整个网站转换为适合 LLM 的 Markdown 或结构化数据。 | https://github.com/mendableai/firecrawl |
| browser-use | 一个浏览器自动化库,让 AI 智能体可以模拟人类操作浏览器。 | https://github.com/browser-use/browser-use |
🔍 如何探索更多 MCP Server
除了上面列出的单个项目,互联网上还有很多社区和平台在持续收集和整理各类 MCP Server,是你寻找新工具的好去处:
- Awesome MCP Servers: 一个在 GitHub 上非常受欢迎的资源合集,由社区共同维护,收录了上千个 MCP Server。
- MCP.SO: 一个网站形式的目录,同样收集了非常多的 MCP Server,并且界面友好。
- Smithery: 一个帮助开发者寻找和发布代理服务的平台。
💡 使用入门建议
当你选好 MCP Server 后,通常需要在支持 MCP 的客户端(如 Cursor、Windsurf、Claude Desktop 等)中进行配置。一般步骤如下:
- 查看文档:前往该 MCP Server 的 GitHub 页面,仔细阅读它的安装说明和配置要求。
- 准备配置:多数客户端通过创建一个
mcp.json文件来配置。你需要按照文档填写服务器地址、命令或所需的 API 密钥等信息。 - 放置文件:将配置好的
mcp.json文件放在客户端指定的目录下。例如,在 Cursor 中,通常是项目根目录下的.cursor文件夹或用户主目录的.cursor文件夹。
常用MCP Client列表
目前主流的AI辅助编程工具和AI助手大多都已支持MCP(Model Context Protocol)协议,这意味着它们都可以作为MCP Client来使用。下面这个表格汇总了常见的MCP Client及其核心特点,方便你快速了解。
| MCP Client 名称 | 类型 | 核心特点/集成服务 |
|---|---|---|
| Cursor | AI 辅助 IDE | 支持通过项目或全局的 mcp.json 配置文件集成 MCP Server。 |
| Windsurf | AI 辅助 IDE | 支持通过工作区内的 mcp.json 配置文件集成 MCP Server。 |
| Claude Desktop | 桌面 AI 助手 | 通过编辑其配置文件来集成 MCP Server。 |
| ChatGPT (开发者模式) | 网页 AI 助手 | 在设置中开启开发者模式后,可以连接 MCP Server。 |
| Glama Chat | 多模态 AI 客户端 / AI 网关 | 一个支持 MCP 的多模态 AI 客户端,同时也是一个 AI 网关。 |
💁 如何配置MCP Client
不同客户端的配置方式略有不同,但基本逻辑相似,核心是创建一个配置文件(通常是 mcp.json),并在其中填写你想要连接的 MCP Server 信息。
通用配置步骤
- 创建配置文件:在客户端指定的目录(通常是项目根目录或用户的全局配置目录)创建
mcp.json文件。 - 编写配置内容:根据你要使用的 MCP Server,在配置文件中填写正确的连接方式(如URL或本地命令)和必要的认证信息(如API密钥)。下面是一个配置示例:
{ "mcpServers": { "notion": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.notion.com/mcp"] }, "linear": { "url": "https://mcp.linear.com", "auth": { "type": "apiKey", "key": "YOUR_LINEAR_API_KEY_HERE" } } } } - 启用与重启:在客户端的设置中确保已启用 MCP 服务器支持,有时配置后需要重启客户端才能生效。
客户端特定配置
- Cursor:将
mcp.json放在项目根目录的.cursor文件夹内,或放在用户主目录的.cursor文件夹以实现全局配置。 - Windsurf:将
mcp.json放在工作区或项目的根目录下。 - Claude Desktop:需要编辑其特定的配置文件(例如,在 macOS 上通常是
~/Library/Application Support/Claude/claude_desktop_config.json)。
💡 使用建议与注意事项
- 探索更多资源:除了上述客户端,网络上还有如
awesome-mcp-clients等社区维护的资源列表,可以帮助你发现更多选择。 - 注意上下文限制:连接的 MCP Server 并非越多越好。每个服务器都会占用模型的一部分上下文窗口,过多可能会导致核心对话可用的上下文减少。
- 安全第一:在配置 MCP Server,尤其是涉及写操作或敏感数据的服务时,请务必使用权限最小化的 API 密钥,并保护好你的认证信息。
1778

被折叠的 条评论
为什么被折叠?



