一文看懂:MCP(大模型上下文协议)
MCP逐渐被接受,是因为MCP是开放标准。在AI项目开发中可以发现,集成AI模型复杂,现有框架如LangChain Tools、LlamaIndex和Vercel AI SDK存在问题。LangChain和LlamaIndex代码抽象高,商业化过重;Vercel AI SDK与Nextjs绑定过深。
MCP的优势在于:一是开放标准利于服务商开发API,二是避免开发者重复造轮子,可利用现有MCP服务增强Agent。
本文转自: [https://zhuanlan.zhihu.com/p/27327515233] Author: [AI产品经理大群]
同时基于: [https://guangzhengli.com/blog/zh/model-context-protocol/](https://guangzhengli.com/blog/zh/model-context-protocol/]
一、什么是MCP(Model Context Protocol)
定义
MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而无法充分发挥潜力的难题,MCP 使得 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供了连接万物的接口。
协议支持对接 内容存储库、业务工具、开发环境 等多种外部服务,从而赋能 AI 大模型获取更丰富的上下文信息,生成更加精准、相关且智能的回答
Function Calling是AI模型调用函数的机制,MCP是一个标准协议,使AI模型与API无缝交互,而AI Agent是一个自主运行的智能系统,利用Function Calling和MCP来分析和执行任务,实现特定目标。

image.png
**
MCP 就像转接头,统一不同服务供所有人使用
- *
MCP 就像一个“转接头”或“通用插座”,它的核心作用是统一不同外部服务(如 Google Drive、GitHub、Slack、本地文件系统等),通过标准化接口与 AI 模型对接。这样,开发者只需基于 MCP 规范开发一次“接口适配器”(MCP 服务器),就能让所有兼容 MCP 的模型(MCP 客户端)无缝接入,无需针对每个模型单独适配,大幅提升兼容性与开发效率。MCP 里面还包含 SSE(Server-Sent Events),是一种允许服务器向浏览器推送实时更新的技术。

MCP 的价值
举个栗子,在过去,为了让大模型等 AI 应用使用我们的数据,要么复制粘贴,要么上传下载,非常麻烦。
即使是最强大模型也会受到数据隔离的限制,形成信息孤岛,要做出更强大的模型,每个新数据源都需要自己重新定制实现,使真正互联的系统难以扩展,存在很多的局限性。
现在,MCP 可以直接在 AI 与数据(包括本地数据和互联网数据)之间架起一座桥梁,通过 MCP 服务器和 MCP 客户端,大家只要都遵循这套协议,就能实现“万物互联”。
有了MCP,可以和数据和文件系统、开发工具、Web 和浏览器自动化、生产力和通信、各种社区生态能力全部集成,实现强大的协作工作能力,它的价值远不可估量。
MCP 与 Function Calling 的区别
- MCP(Model Context Protocol),模型上下文协议
- Function Calling,函数调用
这两种技术都旨在增强 AI 模型与外部数据的交互能力,但 MCP 不止可以增强 AI 模型,还可以是其他的应用系统。

工作原理
MCP 协议采用了一种独特的架构设计,它将 LLM 与资源之间的通信划分为三个主要部分:客户端、服务器和资源。
客户端负责发送请求给 MCP 服务器,服务器则将这些请求转发给相应的资源。这种分层的设计使得 MCP 协议能够更好地控制访问权限,确保只有经过授权的用户才能访问特定的资源。
以下是 MCP 的基本工作流程:
- 初始化连接:客户端向服务器发送连接请求,建立通信通道。
- 发送请求:客户端根据需求构建请求消息,并发送给服务器。
- 处理请求:服务器接收到请求后,解析请求内容,执行相应的操作(如查询数据库、读取文件等)。
- 返回结果:服务器将处理结果封装成响应消息,发送回客户端。
- 断开连接:任务完成后,客户端可以主动关闭连接或等待服务器超时关闭。
MCP 核心架构
MCP 遵循客户端-服务器架构(client-server),其中包含以下几个核心概念:
- MCP 主机(MCP Hosts):发起请求的 LLM 应用程序(例如 Claude Desktop、IDE 或 AI 工具)。
- MCP 客户端(MCP Clients):在主机程序内部,与 MCP server 保持 1:1 的连接。
- MCP 服务器(MCP Servers):为 MCP client 提供上下文、工具和 prompt 信息。
- 本地资源(Local Resources):本地计算机中可供 MCP server 安全访问的资源(例如文件、数据库)。
- 远程资源(Remote Resources):MCP server 可以连接到的远程资源(例如通过 API)。

MCP Client
MCP client 充当 LLM 和 MCP server 之间的桥梁,MCP client 的工作流程如下:
- MCP client 首先从 MCP server 获取可用的工具列表。
- 将用户的查询连同工具描述通过 function calling 一起发送给 LLM。
- LLM 决定是否需要使用工具以及使用哪些工具。
- 如果需要使用工具,MCP client 会通过 MCP server 执行相应的工具调用。
- 工具调用的结果会被发送回 LLM。
- LLM 基于所有信息生成自然语言响应。
- 最后将响应展示给用户。
Claude Desktop 和Cursor都支持了MCP Server接入能力,它们就是作为 MCP client来连接某个MCP Server感知和实现调用。
MCP Server
MCP server 是 MCP 架构中的关键组件,它可以提供 3 种主要类型的功能:
- 资源(Resources):类似文件的数据,可以被客户端读取,如 API 响应或文件内容。
- 工具(Tools):可以被 LLM 调用的函数(需要用户批准)。
- 提示(Prompts):预先编写的模板,帮助用户完成特定任务。
这些功能使 MCP server 能够为 AI 应用提供丰富的上下文信息和操作能力,从而增强 LLM 的实用性和灵活性。
你可以在 MCP Servers Repository 和 Awesome MCP Servers 这两个 repo 中找到许多由社区实现的 MCP server。使用 TypeScript 编写的 MCP server 可以通过 npx 命令来运行,使用 Python 编写的 MCP server 可以通过 uvx 命令来运行。
通信机制
MCP 协议支持两种主要的通信机制:基于标准输入输出的本地通信和基于SSE(https://en.wikipedia.org/wiki/Server-sent_events)的远程通信。
这两种机制都使用 https://www.jsonrpc.org/specification 格式进行消息传输,确保了通信的标准化和可扩展性。
- 本地通信:通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信。
- 远程通信:利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。
二、MCP的功能与应用:
如何使用 MCP
如果你还没有尝试过如何使用 MCP 的话,我们可以考虑用 Cursor(本人只尝试过 Cursor),Claude Desktop 或者 Cline 来体验一下。
当然,我们并不需要自己开发 MCP Servers,MCP 的好处就是通用、标准,所以开发者并不需要重复造轮子(但是学习可以重复造轮子)。
首先推荐的是官方组织的一些 Server:https://github.com/modelcontextprotocol/servers。
目前社区的 MCP Server 还是比较混乱,有很多缺少教程和文档,很多的代码功能也有问题,我们可以自行尝试一下 https://cursor.directory/ 的一些例子,具体的配置和实战笔者就不细讲了,大家可以参考官方文档。
MCP的功能
MCP通过引入多样化的MCP Server能力,显著增强了AI工具的功能,例如我们常用的Cursor和Claude。以下是一些官方参考服务器,展示了MCP的核心功能和SDK的应用:
数据与文件系统:
文件系统:提供安全文件操作,带可配置的访问控制。
PostgreSQL:提供只读数据库访问,具备架构检查功能。
SQLite:支持数据库交互和商业智能功能。
Google Drive:实现Google Drive的文件访问和搜索功能。
开发工具:
Git:工具用于读取、搜索和操作Git仓库。
GitHub:集成仓库管理、文件操作和GitHub API。
GitLab:支持项目管理的GitLab API集成。
Sentry:从http://Sentry.io获取并分析问题。
网络与浏览器自动化:
Brave Search:利用Brave的搜索API进行网络和本地搜索。
Fetch:为LLM优化的网络内容获取和转换。
Puppeteer:提供浏览器自动化和网页抓取功能。
生产力和通信:
Slack:支持频道管理和消息功能。
Google Maps:提供位置服务、路线和地点详情。
Memory:基于知识图谱的持久记忆系统。
AI与专业工具:
EverArt:使用多种模型进行AI图像生成。
Sequential Thinking:通过思维序列进行动态问题解决。
AWS KB Retrieval:使用Bedrock Agent Runtime从AWS知识库检索。
官方集成工具:
这些MCP服务器由公司维护,用于其平台:
Axiom:使用自然语言查询和分析日志、跟踪和事件数据。
Browserbase:云端自动化浏览器交互。
Cloudflare:在Cloudflare开发者平台上部署和管理资源。
E2B:在安全的云沙箱中执行代码。
Neon:与Neon无服务器Postgres平台交互。
Obsidian Markdown Notes:读取和搜索Obsidian知识库中的Markdown笔记。
Qdrant:使用Qdrant向量搜索引擎实现语义记忆。
Raygun:访问崩溃报告和监控数据。
Search1API:统一的API用于搜索、爬虫和网站地图。
Tinybird:与Tinybird无服务器ClickHouse平台交互。
集成工具:
Docker:管理容器、镜像、卷和网络。
Kubernetes:管理pod、部署和服务。
Linear:项目管理和问题跟踪。
Snowflake:与Snowflake数据库交互。
Spotify:控制Spotify播放和管理播放列表。
Todoist:任务管理集成。
三、怎么使用和开发MCP Server
使用
目前支持的部分工具列表(更多见https://www.pulsemcp.com/clients):
客户端 | 资源 | 提示 | 工具 | 采样 | 根目录 | 备注 |
Claude 桌面应用 | ✅ | ✅ | ✅ | ❌ | ❌ | 所有MCP 功能 |
Zed | ❌ | ✅ | ❌ | ❌ | ❌ | 提示以斜杠命令形式出现 |
Sourcegraph Cody | ✅ | ❌ | ❌ | ❌ | ❌ | 通过OpenCTX 支持资源 |
Firebase Genkit | ⚠️ | ✅ | ✅ | ❌ | ❌ | 支持资源列表和查找 |
Continue | ✅ | ✅ | ✅ | ❌ | ❌ | 支持所有MCP功能 |
GenAIScript | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
Cursor | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
Claude Desktop 使用示例
以 Claude Desktop 为例,配置 MCP 客户端的步骤如下:
- 安装 Claude Desktop: 确保已在 macOS 或 Windows 系统上安装最新版本的 Claude Desktop。
- 配置 MCP 服务器: 在 Claude Desktop 的配置文件中,配置入口Claude Desktop—>菜单—>Settings—>Developer—>Edit Config:

添加所需的 MCP 服务器信息,例如:
这里的@modelcontextprotocol/server-filesystem、mcp-server-git是对应的一些MCP Server,可以是开源找来的,也可以是你自己开发的。
配置完后,在主界面对话题右下角就有个锤子出现了,有几个锤子就是配置几个,然后对话中如果涉及使用该工具的,claude就会自动调用

Cherry Studio使用示例
1、安装好Cherry Studio https://cherry-ai.com/
2、配置MCP服务器 打开CherryStudio->设置->MCP服务器

- 检查uv bun是否安装OK(**注意CherryStudio的环境为私有环境,与系统环境是单独分开的)

- 如下:工具提供了页面输入框配置方式和json格式配置方式,我们需要明确安装MCP类型是Stdio还是SSE。

详细配置方式和问题解决可以参见官方材料:https://docs.cherry-ai.com/advanced-basic/mcp
MCP Server 的工作原理
我们先来看一个简单的例子,假设我们想让 AI Agent 完成自动搜索 GitHub Repository,接着搜索 Issue,然后再判断是否是一个已知的 bug,最后决定是否需要提交一个新的 Issue 的功能。
那么我们就需要创建一个 Github MCP Server,这个 Server 需要提供查找 Repository、搜索 Issues 和创建 Issue 三种能力。
我们直接来看看代码:
上面的代码中,我们通过
server.setRequestHandler
来告诉 Client 端我们提供了哪些能力,通过 description
字段来描述这个能力的作用,通过 inputSchema
来描述完成这个能力需要的输入参数。我们再来看看具体的实现代码:
可以很清晰的看到,我们最终实现是通过了
https://api.github.com
的 API 来实现和 Github 交互的,我们通过 githubRequest
函数来调用 GitHub 的 API,最后返回结果。在调用 Github 官方的 API 之前,MCP 的主要工作是描述 Server 提供了哪些能力(给 LLM 提供),需要哪些参数(参数具体的功能是什么),最后返回的结果是什么。
所以 MCP Server 并不是一个新颖的、高深的东西,它只是一个具有共识的协议。
如果我们想要实现一个更强大的 AI Agent,例如我们想让 AI Agent 自动的根据本地错误日志,自动搜索相关的 GitHub Repository,然后搜索 Issue,最后将结果发送到 Slack。
那么我们可能需要创建三个不同的 MCP Server,一个是 Local Log Server,用来查询本地日志;一个是 GitHub Server,用来搜索 Issue;还有一个是 Slack Server,用来发送消息。
AI Agent 在用户输入
我需要查询本地错误日志,将相关的 Issue 发送到 Slack
指令后,自行判断需要调用哪些 MCP Server,并决定调用顺序,最终根据不同 MCP Server 的返回结果来决定是否需要调用下一个 Server,以此来完成整个任务。参考资源
下面是推荐的一些 MCP 的资源,大家可以参考一下。
MCP 官方资源
社区的 MCP Server 的列表
社区的 MCP 文章
- Author:waytomcp
- URL:https://www.waytomcp.com/article/ywkdmcp
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!