豺独 发表于 2025-6-1 21:05:45

[AIGC/Agent] MCP := 模型上下文协议 := AI Agent应用与外部系统集成的标准协议

引言

火爆 AI 编程圈的 MCP 到底是个什么东西?


[*]最近,如果你经常使用 AI 编程的话,肯定听到过 MCP 这个概念
[*]那到底什么是 MCP 呢?
[*]AI 应用层的开发并没有多少新的东西,大体还是老三样: Prompt、RAG、Agent。
但是自从 2024 年 11 月底 Claude (Anthropic) 主导发布了 MCP(Model Context Protocol 模型上下文协议) 后,AI 应用层的开发算是进入了新的时代。

MCP 就是以更标准的方式让 LLM Chat 使用不同工具,更简单的可视化如下图所示
这样你应该更容易理解“中间协议层”的概念了。Anthropic 旨在实现 LLM Tool Call 的标准。

概述:MCP

MCP 定义


[*]先从专业角度讲,MCP 就是Anthropic(Claude) 主导发布的一个AI Agent框架领域的、开放的、通用的、有共识的协议标准。
[*]Model Context Protocol(MCP)
MCP 功能与作用


[*]MCP 是一个标准协议,就像给 AI 大模型装了一个 “万能接口”,让 AI 模型能够与不同的数据源和工具进行无缝交互。
[*]MCP 旨在替换碎片化的 Agent 代码集成,从而使 AI 系统更可靠,更有效。
[*]通过建立通用标准,服务商可以基于协议来推出它们自己服务的 AI 能力,支持开发者更快的构建更强大的 AI 应用。
[*]开发者也不需要重复造轮子,通过开源项目可以建立强大的 AI Agent 生态。
[*]MCP 可以在不同的应用 / 服务之间保持上下文,增强整体自主执行任务的能力。
MCP 是一个标准协议,如同电子设备的 Type C 协议(可以充电也可以传输数据),使 AI 模型能够与不同的 API 和数据源无缝交互。
MCP 的必要性


[*]举例:目前不能同时通过某个 AI 应用做到联网搜索、发送邮件、发布博客等,MCP 可解决集成问题。
MCP 优势


[*]标准化:MCP 提供了一种统一的通信协议,使得不同的 AI 应用可以更容易地集成和扩展。
[*]灵活性:通过 MCP,AI 应用可以连接到各种数据源和工具,增强了其功能和适用性。
[*]安全性:MCP 确保了数据传输的安全性,保护了用户的隐私和数据安全。
生活化例子


[*]假设班长使用 MCP 处理班级事务,如查成绩、收集反馈、安排值日表,高效且安全。


[*]举个通俗易懂的例子:假设你正在使用一个 AI 编程助手来帮助你写代码。这个 AI 助手就是一个 MCP 主机。
它需要访问一些外部资源,比如代码库、文档或者调试工具。
MCP 服务器就像是一个中介,它连接了这些资源和 AI 助手。


[*]当你需要查找某个函数的用法时,AI 助手通过 MCP 客户端向 MCP 服务器发送请求。
[*]MCP 服务器接收到请求后,去代码库或文档中查找相关信息。
[*]找到信息后,MCP 服务器将结果返回给 AI 助手。
[*]AI 助手根据返回的信息,生成一段代码或解释,展示给你。


[*]再举个生活化的例子:假设你是一个班长,每天要处理很多班级事务:查班级成绩表(Excel 文件存在电脑里),收集同学反馈(微信群里聊天记录),安排值日表(在线文档)。


[*]传统方式:你需要自己打开 Excel、翻微信记录、编辑在线文档,手动整理信息,耗时费力。


[*]使用 MCP 后,你直接对 AI 说:“帮我查一下最近数学考试的平均分,把不及格的同学名单整理到值日表里,并在微信群提醒他们补考。”AI 会自动完成:用 “万能插头” MCP 连接你的电脑,读取 Excel 成绩。用 MCP 连接微信,找到相关聊天记录。用 MCP 修改在线文档,更新值日表。整个过程不需要你手动操作,数据也不会离开你的设备,安全又高效。
所以,MCP 厉害的地方在于,不用重复造轮子。过去每个软件(比如微信、Excel)都要单独给 AI 做接口,现在 MCP 统一了标准,就像所有电器都用 USB-C 充电口,AI 一个接口就能连接所有工具。
而且,数据不用上传到云端,AI 直接在本地处理。比如你的成绩单只存在自己电脑里,AI 通过 MCP 读取分析,但数据不会外泄。
MCP 会让 AI 更 “懂” 上下文,比如你让 AI “总结上周班会的重点”,它能自动调取会议录音、聊天记录、笔记文档,综合这些信息给你答案,而不是凭空编造。
所以,MCP 为 AI 应用提供了一个强大的工具,使其能够更灵活、更安全地与外部世界交互。
为什么 MCP 是一个突破?


[*]过去一年时间(2024年),AI 模型的发展非常迅速,从 GPT 4 到 Claude Sonnet 3.5 到 Deepseek R1,推理和幻觉都进步的非常明显。
新的 AI 应用也很多,但我们都能感受到的一点是,目前市场上的 AI 应用基本都是全新的服务,和我们原来常用的服务和系统并没有集成,换句话说,AI 应用和我们已有系统集成发展的很缓慢。
MCP没有出现前,在开发的过程中,将 AI 模型集成现有的系统或者第三方系统确实挺麻烦。
虽然市面上有一些框架支持 Agent 开发,例如 LangChain Tools, LlamaIndex 或者是 Vercel AI SDK。
LangChain 和 LlamaIndex 虽然都是开源项目,但是整体发展还是挺混乱的,首先是代码的抽象层次太高了,想要推广的都是让开发人员几行代码就完成某某 AI 功能,这在 Demo 阶段是挺好用的,但是在实际开发中,只要业务一旦开始复杂,糟糕的代码设计带来了非常糟糕的编程体验。还有就是这几个项目都太想商业化了,忽略了整体生态的建设。

还有一个就是 Vercel AI SDK,尽管个人觉得 Vercel AI SDK 代码抽象的比较好,但是也只是对于前端 UI 结合和部分 AI 功能的封装还不错,最大的问题是和 Nextjs 绑定太深了,对其它的框架和语言支持度不够。

所以 Claude 推动 MCP 可以说是一个很好的时机,首先是 Claude Sonnet 3.5 在开发人员心中有较高的地位,而 MCP 又是一个开放的标准,所以很多公司和社区都愿意参与进来,希望 Claude 能够一直保持一个良好的开放生态。

---- from https://guangzhengli.com/blog/zh/model-context-protocol/例如,我们目前还不能同时通过某个 AI 应用来做到联网搜索、发送邮件、发布自己的博客等等
这些功能单个实现都不是很难,但是如果要全部集成到一个系统里面,就会变得遥不可及。


[*]如果你还没有具体的感受,我们可以思考一下日常开发中,想象一下在 IDE 中,我们可以通过 IDE 的 AI 来完成下面这些工作。


[*]询问 AI 来查询本地数据库已有的数据来辅助开发
[*]询问 AI 搜索 Github Issue 来判断某问题是不是已知的bug
[*]通过 AI 将某个 PR 的意见发送给同事的即时通讯软件(例如 Slack)来 Code Review
[*]通过 AI 查询甚至修改当前 AWS、Azure 的配置来完成部署
上述这些功能通过 MCP 目前正在变为现实,大家可以关注 Cursor MCP 和 Windsurf MCP 获取更多的信息。
可以试试用 Cursor MCP + browsertools 插件来体验一下在 Cursor 中自动获取 Chrome dev tools console log 的能力。


[*]为什么 AI 集成已有服务的进展这么缓慢?
这里面有很多的原因,一方面是企业级的数据很敏感,大多数企业都要很长的时间和流程来动。
另一个方面是技术方面,我们缺少一个开放的、通用的、有共识的协议标准。


[*]MCP 就是 Claude(Anthropic) 主导发布的一个开放的、通用的、有共识的协议标准。
如果你是一个对 AI 模型熟悉的开发人员,想必对 Anthropic 这个公司不会陌生
他们发布了 Claude 3.5 Sonnet 的模型,到目前为止应该还是最强的编程 AI 模型(就在2025年2月底,发布了更震撼的3.7)。

这类协议的发布最好机会应该是属于 OpenAI 的,如果 OpenAI 刚发布 GPT 时就推动协议,相信大家都不会拒绝。
但是 OpenAI 变成了 CloseAI,只发布了一个封闭的 GPTs
这种需要主导和共识的标准协议一般很难社区自发形成,一般由行业巨头来主导。

Claude 发布了 MCP 后,官方的 Claude Desktop 就开放了 MCP 功能,并且推动了开源组织 Model Context Protocol,由不同的公司和社区进行参与,例如下面就列举了一些由不同组织发布 MCP 服务器的例子。
为什么是 MCP?Function Calling、AI Agent、MCP 这三者之间有什么区别?


[*]看到这里你可能有一个问题,在 23 年 OpenAI 发布 GPT function calling 的时候,不是也是可以实现类似的功能吗?
我们之前博客介绍的 AI Agent,不就是用来集成不同的服务吗?为什么又出现了 MCP。
Function Calling / 函数调用


[*]Function Calling 指的是 AI 模型根据上下文自动执行函数的机制。
[*]Function Calling 充当了 AI 模型与外部系统之间的桥梁,不同的AI模型有不同的 Function Calling 实现
代码集成的方式也不一样。由不同的 AI 模型平台来定义和实现。
如果我们使用 Function Calling,那么需要通过代码给 LLM 提供一组 functions,并且提供清晰的函数描述、函数输入和输出,> 那么 LLM 就可以根据清晰的结构化数据进行推理,执行函数。


[*]Function Calling 的特点:


[*]缺点:处理不好多轮对话和复杂需求
如果需要处理很多的任务,那么 Function Calling 的代码比较难维护。


[*]适用场景:适合边界清晰、描述明确的任务。
AI Agent


[*]AI Agent 是一个基于AI大模型的用户代理应用,它可以自主运行以实现特定目标。
用户 -- AI Agent -- AI 大模型(LLM)
传统的 AI 聊天仅提供建议或者需要手动执行任务,AI Agent 则可以分析具体情况,做出决策,并自行采取行动。
AI Agent 可以利用 MCP 提供的功能描述来理解更多的上下文,并在各种平台/服务自动执行任务。
MCP vs. Function Calling 的区别?


普通AI应用 vs. AI Agent 应用 的区别?



[*]普通 AI 应用 : 用户 -- AI 大模型(LLM)
[*]AI Agent 应用 : 用户 -- AI Agent (访问: RAG / 网站 / 数据库 / 本地资源 / ...) -- AI 大模型(LLM)
普通AI应用与AI Agent应用的主要区别在于自主性、交互性和任务复杂性:

[*]自主性:

[*]普通AI应用:通常被动执行预设任务,依赖用户输入,缺乏自主决策能力。
[*]AI Agent应用:具备自主性,能够根据环境和目标主动决策并采取行动。

[*]交互性:

[*]普通AI应用:交互简单,多为单向执行,如语音识别或图像分类。
[*]AI Agent应用:交互复杂,能够与环境动态互动,并根据反馈调整行为。

[*]任务复杂性:

[*]普通AI应用:处理单一任务,功能较为基础。
[*]AI Agent应用:处理复杂任务,涉及多步骤决策和长期规划,如自动驾驶或智能助手。

[*]学习与适应:

[*]普通AI应用:通常不具备学习能力,行为固定。
[*]AI Agent应用:能够通过机器学习适应新环境和任务,持续优化表现。

[*]目标导向:

[*]普通AI应用:无明确目标,仅执行特定功能。
[*]AI Agent应用:有明确目标,能够规划行动以实现目标。



[*]示例


[*]普通AI应用:语音助手执行简单指令,如设置闹钟。
[*]AI Agent应用:智能家居系统根据用户习惯自动调节设备,无需用户干预。
总结:普通AI应用功能单一且被动,而AI Agent应用则更自主、交互性强,适合处理复杂任务。
MCP 对于开源社区生态的贡献


[*]开放标准给服务商,服务商可以针对 MCP 开放自己的 API 和部分能力。
[*]不需要重复造轮子,开发者可以用已有的开源 MCP 服务来增强自己的 Agent。
MCP 架构与原理


核心部分


[*]MCP 主机(MCP Hosts):发起请求的 AI 应用程序,比如聊天机器人、AI 驱动的IDE等。
[*]MCP 客户端(MCP Clients):在主机程序内部,与MCP 服务器保持 1:1 的连接。
[*]MCP 服务器(MCP Servers):为 MCP 客户端提供上下文、工具和提示信息。
[*]本地资源(Local Resources):本地计算机中可供 MCP 服务器安全访问的资源,如文件、数据库。
[*]远程资源(Remote Resources):MCP 服务器可以连接到的远程资源,如通过 API 提供的数据。

工作流程


[*]连接:MCP 主机连接到一个或多个 MCP 服务器。
[*]请求:主机发送请求以获取数据或执行工具。
[*]处理:服务器处理请求,访问相关数据源或外部服务。
[*]返回:服务器将结果返回给主机。
[*]生成响应:主机将信息提供给 AI 模型,用于生成用户响应。
MCP 传输机制

传输机制:STDIO / SSE


[*]Model Context Protocol(MCP)支持两种主要的传输机制,用于 Cline 和 MCP 服务器之间的通信:标准输入/输出 (Standard Input/Ouput,STDIO) 和服务器发送事件 (Server Send Event,SSE)。

[*]每种机制都有其独特的特点、优势和适用场景。

STDIO 传输模式

STDIO 传输在您的本地机器上运行,并通过标准输入/输出流进行通信。
工作原理


[*]客户端 (Client) 将 MCP 服务器作为子进程启动
[*]通信通过进程流进行:客户端写入服务器的 STDIN,服务器通过 STDOUT 响应
[*]每条消息以换行符分隔
[*]消息格式:JSON-RPC 2.0
客户端                服务器
   |                     |
   |<---- JSON消息 ----->| (通过STDIN)
   |                     | (处理请求)
   |<---- JSON消息 ------| (通过STDOUT)
   |                     |本地与托管:部署方面

STDIO 和 SSE 传输之间的选择直接影响您将如何部署和管理 MCP 服务器。
STDIO:本地部署模型

STDIO 服务器在与 Client 相同的机器上本地运行,这有几个重要的影响:

[*]安装:服务器可执行文件必须安装在每个用户的机器上
[*]分发:您需要为不同的操作系统提供安装包
[*]更新:每个实例必须单独更新
[*]资源:使用本地机器的 CPU、内存和磁盘
[*]访问控制:依赖本地机器的文件系统权限
[*]集成:与本地系统资源(文件、进程)轻松集成
[*]执行:随 Cline 启动和停止(子进程生命周期)
[*]依赖:任何依赖项都必须安装在用户的机器上
实际示例

使用 STDIO 的本地文件搜索工具将:

[*]在用户的机器上运行
[*]直接访问本地文件系统
[*]在 Cline 需要时启动
[*]不需要网络配置
[*]需要与 Cline 一起安装或通过包管理器安装
SSE:托管部署模型

SSE 服务器可以部署到远程服务器上,并通过网络访问:

[*]安装:在服务器上安装一次,由多个用户访问
[*]分发:单一部署服务于多个客户端
[*]更新:集中更新立即影响所有用户
[*]资源:使用服务器资源,而非本地机器资源
[*]访问控制:通过认证和授权系统管理
[*]集成:与用户特定资源的集成更复杂
[*]执行:作为独立服务运行(通常是持续的)
[*]依赖:在服务器上管理,而非用户机器上
实际示例

使用 SSE 的数据库查询工具将:

[*]在中央服务器上运行
[*]使用服务器端凭据连接到数据库
[*]持续可用于多个用户
[*]需要适当的网络安全配置
[*]使用容器或云技术部署
混合方法

某些场景受益于混合方法:

[*]具有网络访问的 STDIO:充当远程服务代理的本地 STDIO 服务器
[*]具有本地命令的 SSE:可以通过回调触发客户端机器上操作的远程 SSE 服务器
[*]网关模式:用于本地操作的 STDIO 服务器,连接到用于专门功能的 SSE 服务器
在 STDIO 和 SSE 之间选择

考虑因素STDIOSSE位置仅本地机器本地或远程客户端单客户端多客户端性能更低延迟更高延迟(网络开销)设置复杂性更简单更复杂(需要 HTTP 服务器)安全性本质上安全需要明确的安全措施网络访问不需要必需可扩展性限于本地机器可以分布在网络上部署每用户安装集中安装更新分布式更新集中式更新资源使用使用客户端资源使用服务器资源依赖客户端依赖服务器端依赖参考文献


[*]MCP 传输机制 Stdio 与 SSE(译文) - Zhihu
MCP 社区项目

https://github.com/modelcontextprotocol
项目结构



MCP SDK


[*]Java : https://modelcontextprotocol.io/sdk/java/mcp-overview
[*]Python : https://github.com/modelcontextprotocol/python-sdk
[*]TypeScript : https://github.com/modelcontextprotocol/typescript-sdk
[*]Kotlin : https://github.com/modelcontextprotocol/kotlin-sdk
MCP 官方集成

数据库和文件管理


[*]文件系统 - 具有可配置访问控制的安全文件操作
[*]PostgreSQL - 只读数据库查询。
[*]SQLite - 数据库交互和商业智能功能
[*]Slack - Slack 消息发送和查询。
[*]Google Drive - Google Drive 的文件访问和搜索功能
[*]Google Maps - 集成 Google Map 获取位置信息。
开发者工具


[*]Git - 用于读取、搜索和操作 Git 仓库的工具
[*]GitHub - 仓库管理、文件操作和 GitHub API 集成
[*]GitLab - 支持项目管理的 GitLab API 集成
[*]Sentry - 从 Sentry.io 获取和分析问题
Web 和浏览器自动化


[*]Brave Search - 使用 Brave 的搜索 API 进行网络和本地搜索
[*]Fetch - 为 LLM 使用优化的网络内容获取和转换
[*]Puppeteer - 浏览器自动化和网页抓取功能
生产力和通信


[*]Slack - 频道管理和消息功能
[*]Google Maps - 位置服务、路线和地点详情
[*]Memory - 基于知识图谱的持久记忆系统
AI 和专业工具


[*]EverArt - 使用各种模型的 AI 图像生成
[*]Sequential Thinking - 通过思维序列进行动态问题解决
[*]AWS KB Retrieval - 使用 Bedrock Agent Runtime 从 AWS Knowledge Base 检索
MCP 官方集成的其他工具


[*]Axiom - 使用自然语言查询和分析日志、跟踪和事件数据
[*]Browserbase - 在云端自动化浏览器交互
[*]Cloudflare - 在 Cloudflare 开发者平台上部署和管理资源
[*]E2B - 在安全的云沙箱中执行代码
[*]Neon - 与 Neon 无服务器 Postgres 平台交互
[*]Obsidian Markdown Notes - 读取和搜索 Obsidian 知识库中的 Markdown 笔记
[*]Qdrant - 使用 Qdrant 向量搜索引擎实现语义记忆
[*]Raygun - 访问崩溃报告和监控数据
[*]Search1API - 用于搜索、爬虫和网站地图的统一 API
[*]Tinybird - 与 Tinybird 无服务器 ClickHouse 平台交互
第三方/社区支持的集成

由第三方平台构建的 MCP 服务器。


[*]Docker - 管理容器、镜像、卷和网络
[*]Kubernetes - 管理 pod、部署和服务
[*]Linear - 项目管理和问题跟踪
[*]Snowflake - 与 Snowflake 数据库交互
[*]Spotify - 控制 Spotify 播放和管理播放列表
[*]Todoist - 任务管理集成
[*]Grafana - 在 Grafana 中搜索查询数据。
[*]JetBrains – JetBrains IDEs。
[*]Stripe - 与Stripe API交互。
更多的可以查看社区服务器列表:

[*]MCP Servers Repository
社区 MCP 服务器

下面是一些由开源社区开发和维护的 MCP 服务器。
MCP Servers Repository


[*]AWS - 用 LLM 操作 AWS 资源。
[*]Atlassian - 与 Confluence 和 Jira 进行交互,包括搜索/查询 Confluence 空间/页面,访问 Jira Issue 和项目。
[*]Google Calendar - 与 Google 日历集成,日程安排,查找时间,并添加/删除事件。
[*]Kubernetes - 连接到 Kubernetes 集群并管理 pods、deployments 和 services。
[*]X (Twitter) - 与 Twitter API 交互。发布推文并通过查询搜索推文。
[*]YouTube - 与 YouTube API 集成,视频管理、短视频创作等。
MCP 客户端(汇总)

客户端ResourcesPromptsToolsSamplingRoots说明Claude Desktop App✅✅✅❌❌完全支持 MCP 所有特性5ire❌❌✅❌❌支持工具。BeeAI Framework❌❌✅❌❌支持代理工作流中的工具。Cline✅❌✅❌❌支持工具和资源。Trae------------Continue✅✅✅❌❌完全支持 MCP 所有特性Cursor❌❌✅❌❌支持工具。Emacs Mcp❌❌✅❌❌支持 Emacs 中的工具。Firebase Genkit⚠️✅✅❌❌支持通过工具进行资源列表和查找。GenAIScript❌❌✅❌❌支持工具。Goose❌❌✅❌❌支持工具。LibreChat❌❌✅❌❌Supports tools for Agentsmcp-agent❌❌✅⚠️❌支持工具、服务器连接管理和代理工作流程。Roo Code✅❌✅❌❌支持工具和资源。Sourcegraph Cody✅❌❌❌❌通过 OpenCTX 支持资源Superinterface❌❌✅❌❌支持工具TheiaAI/TheiaIDE❌❌✅❌❌支持 Theia AI 和 AI 驱动的 Theia IDE 中的 Agent 工具Windsurf Editor❌❌✅❌❌支持带有 AI Flow 的工具以进行协作开发。Zed❌✅❌❌❌Prompts appear as slash commands 提示符显示为斜杠命令OpenSumi❌❌✅❌❌支持 OpenSumi 中的工具Y 推荐文献


[*] AI Agent的设计模式综述 - 博客园/千千寰宇
[*]MCP终极指南 - guangzhengli.com
[*]Model Context Protocol官方

[*]主导厂商 : MCP 协议及开源社区,主要由 Claude 背后的厂家 Anthropic 主导,而非大名鼎鼎的 CloseAI
[*]官方组织 Model Context Protocol

[*]https://github.com/modelcontextprotocol

[*]官方文档

[*]https://modelcontextprotocol.io/introduction

[*]官方的 MCP Server 列表

[*]https://github.com/modelcontextprotocol/servers

[*]Claude Blog

[*]https://www.anthropic.com/news/model-context-protocol


[*]社区的 MCP Servers

[*]Cursor Directory
[*]Pulsemcp
[*]Glama MCP Servers

X 参考文献


[*]火爆 AI 编程圈的 MCP 到底是个什么东西? - Zhihu
    本文作者:      千千寰宇   
    本文链接:         https://www.cnblogs.com/johnnyzen   
    关于博文:评论和私信会在第一时间回复,或直接私信我。   
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA   许可协议。转载请注明出处!
    日常交流:大数据与软件开发-QQ交流群: 774386015      【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!   

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: [AIGC/Agent] MCP := 模型上下文协议 := AI Agent应用与外部系统集成的标准协议