文章来源:https://anmolbaranwal.com/
本文涵盖内容如下:
- 现有AI工具的问题。
- MCP及其核心组件介绍。
- MCP 内部是如何工作的?
- MCP 解决的问题以及它为何重要。
- MCP 的 3 个层(以及我最终如何理解它们)。
- 使用内置 Auth 连接 100 多个托管 MCP 服务器的最简单方法。
- MCP 的一些限制。
1. 现有AI工具的问题
如果您曾经尝试构建一个可以真正执行诸如检查电子邮件或发送聊天消息(基于您的工作流程)等操作的 AI 代理,那么您就会知道其中的痛苦。
API 太多,上下文信息不足
你想让AI使用的每个工具,本质上都是一个小型API集成。想象一下,一个用户问:“张三有没有给我发邮件,说昨天的比赛报告?”
对于LLM来说,答案是:
- 请注意,这是一个电子邮件搜索任务。
- 选择正确的端点
search_email_messages
- 用自然语言解析并总结结果
所有这些都保持在上下文窗口内。这很重要。模型经常会忘记、猜测或产生幻觉。如果你无法验证准确性,你甚至都没有意识到问题的存在。
API 是基于步骤的,但 LLM 不擅长记住步骤
让我们举一个 CRM 的基本例子
- 首先,您获取联系人 ID →
get_contact_id
- 然后,获取他们的当前数据→
read_contact
- 最后,修补更新→
patch_contact
在传统代码中,你可以将其抽象成一个函数,然后就完成了。但是使用 LLM 呢?每一步都有可能因为参数错误、字段缺失或链式调用中断而出错。然后你的“AI 助手”就会突然用自然语言道歉,而不是更新任何内容。
脆弱的提示词工程
API 在不断发展,文档在变化,授权流程也在更新。你可能某天早上醒来发现,原本运行良好的代理现在因为第三方的变更而崩溃了。
与传统应用不同的是,它没有共享的框架或抽象层可供依赖。每个 AI 工具集成都如同脆弱的提示词工程,需要快速构建工程和 JSON 代码。这可能会破坏 AI 代理的“肌肉记忆”。
LLM锁定
构建了很棒的 GPT-4 工具。但是,如果你切换到 Claude 或 Gemini 等其他工具,则需要从头重写所有函数描述和系统提示。这不是一个大问题,但没有通用的解决方案。
必须有一种方式让工具和模型清晰地沟通,而不是将所有逻辑塞进臃肿的提示词中。这就是 MCP 的用武之地。
2. MCP及其核心组件介绍
模型上下文协议 (MCP)是一种新的开放协议,它标准化了应用程序向 LLM 提供上下文和工具的方式。
可以将其视为 AI 的通用连接器。MCP 作为 Cursor 的插件系统,允许您通过将其连接到各种数据源和工具来扩展 Agent 的功能。
MCP 帮助您在 LLM 之上构建代理和复杂的工作流程。
例如,Obsidian 的 MCP 服务器可帮助 AI 助手搜索和阅读 Obsidian 库中的笔记。
您的 AI 代理现在可以:
→ 通过 Gmail 发送电子邮件
→ 在 Linear 中创建任务
→ 在 Notion 中搜索文档
→ 在 Slack 中发布消息
→ 在 Salesforce 中更新记录
所有这些都通过标准化界面发送自然语言指令来实现。
想想这对生产力意味着什么。以前需要在 5 个以上应用之间切换的任务,现在只需与客服人员进行一次对话即可完成。
从本质上讲,MCP 遵循客户端-服务器架构,其中主机应用程序可以连接到多个服务器。
核心组件
以下是任何通用 MCP 服务器中的核心组件:
MCP hosts
- 想要通过 MCP 访问数据的 Claude Desktop、Cursor、Windsurf 或 AI 工具等应用程序。MCP Clients
- 协议客户端与 MCP 服务器保持 1:1 连接,充当通信桥梁。MCP Servers
- 轻量级程序,每个程序通过标准化模型上下文协议公开特定功能(如读取文件、查询数据库…)。Local Data Sources
- 您计算机上的 MCP 服务器可以安全访问的文件、数据库和服务。例如,浏览器自动化 MCP 服务器需要访问您的浏览器才能运行。Remote Services
- MCP 服务器可以连接的外部 API 和基于云的系统。
如果你有兴趣了解该架构,可以查看官方文档。它涵盖了协议层、连接生命周期、错误处理以及整体实现。
3. MCP 内部是如何工作的?
MCP 生态系统由几个共同运作的关键参与者组成。让我们简要地了解一下它们。
客户端
客户端是你实际使用的应用程序,例如 Cursor、Claude Desktop 等。它们的作用是:
- 向 MCP 服务器请求可用功能
- 向 AI 模型展示这些能力(工具、资源、提示)
- 将AI的工具使用请求转发回服务器并返回结果
- 为模型提供基本的 MCP 协议概述,以实现一致的交互
它们处理系统前端之间的通信:用户、AI 模型和 MCP 服务器。
服务器
MCP 服务器充当用户/AI 与外部服务之间的中介。它们:
- 提供标准化的 JSON-RPC 接口用于工具和资源访问
- 将现有 API 转换为与 MCP 兼容的功能,而无需更改 API
- 处理身份验证、能力定义和通信标准
他们为客户端提供上下文、工具和提示词。
这些是执行实际任务的外部系统或平台(例如 Discord、Notion、Figma)。它们不会为 MCP 更改 API。
整个设置允许开发人员将任何兼容的 API 插入任何支持 MCP 的客户端,避免依赖大型 AI 提供商的集中式集成。
MCP 构建模块:工具、资源和提示
- 工具
工具代表人工智能可以执行的操作,例如search_emails
或create_issue_linear
。它们构成了模型如何通过 MCP 执行现实世界功能的基础。
- 资源
资源是指 MCP 服务器希望向客户端提供的任何类型的数据。这些可以包括:
- 文件内容
- 数据库记录
- API 响应
- 实时系统数据
- 屏幕截图和图片
- 日志文件
- 以及更多
每个资源都由一个唯一的 URI(例如 )标识,file://user/prefs.json
该 URI 可以是项目注释、编码偏好或任何特定于您的内容。它包含文本或二进制数据。
资源使用遵循此格式的 URI 来标识。
[协议]: //[主机]/[路径]
例如:
file:///home/user/documents/report.pdf
postgres://database/customers/schema
screen://localhost/display1
服务器也可以定义自己的 URI 方案。更多详情请参阅官方文档。
- 提示词
工具让AI做事,但提示词指导AI在做事时如何表现。
这就像在使用工具时向模型提供的指令。它们充当操作指南,帮助人工智能遵循特定的风格、工作流程或安全协议,例如在按下delete_everything
按钮之前遵循特定的安全检查清单。
🎯 让我们探讨一个实际场景:
想象一下 Google 日历 MCP 服务器。日历 API 功能强大而且功能丰富,每个事件都包含访客、时区、提醒、附件等字段。如果你要求 AI 模型执行这些操作`,它可能很难从中筛选出相关数据。
这就是prompts
我们resources
进来的地方。
MCP 提示可以指导模型:
处理日历事件时,仅修改标题或参与者匹配的事件。使用该list-events
工具提取相关事件,将其复制到临时资源 ( Resource B
),在那里应用更改,然后使用update-events-from-resource
同步功能将其同步回来。
这种模式让人工智能专注于受控状态下的干净、可编辑数据 ( the resource
),并以可重复使用的标准化指令 ( the prompt
) 和适当的操作 ( tool
) 为指导。
可以阅读Builder.io上的概念示例,他们已经在 MCP 提示下对其进行了介绍。
当客户端连接到 MCP 服务器时,它会请求可用工具、资源和提示的列表。根据用户的输入,客户端选择向模型显示的内容。当模型选择一个操作时,客户端会通过服务器执行该操作,并通过数据流确保正确的授权。
4. MCP 解决的问题以及它的重要性
MCP解决的问题:
- 一个通用协议=数千种工具
这种通用协议意味着一个 AI 可以与数千种工具集成,只要这些工具具有 MCP 接口,从而无需为每个新应用程序进行自定义集成。
服务使用一致的JSON-RPC格式描述它们可以做什么(“发送 Discord 消息”、“创建 Linear 票证”)以及如何执行这些操作(参数、身份验证方法)。
- 角色明确划分:模型思考,工具行动
它在人工智能模型(思考者)和外部工具(执行者)之间建立了清晰的区分。你的AI代理不会因为Slack每次调整API而崩溃。
- 使用 MCP,您在将 GPT 替换为 Claude 或 Gemini 时无需重新编写所有工具描述。您的工具和逻辑保持不变
- MCP 支持记忆和多步骤工作流程,这意味着您的代理可以记住跨任务的事情并智能地将操作链接在一起
- 它可以减少幻觉。总的来说,MCP 使用清晰、结构化的工具定义。这有助于 AI 保持扎实和准确
MCP 为何重要?
- 它将
通用AI助理
开发人员的需求变成了现实。 - 将这些操作组合成复杂的工作流程(由 AI 处理逻辑)的潜力将导致
自动化智能新时代
。
因此,MCP 使开发人员能够更轻松地利用 AI 做更多事情。
5. MCP 的 3 个层(以及我最终如何理解它们)
这就是我对这个概念的详细理解。我会附上一个常见的例子,希望能帮助你快速理解。
⚡ 模型 ↔ 语境:“用LLM能理解的方式与他交流”
想象一下,模型就像机器人的大脑(LLM
)。它可以处理信息,但需要明确的指令。上下文提供了这些指令,使其能够正常工作。
例如:如果你告诉机器人“给我做一个三明治”,这太模糊了。但如果说“用这些面包、火腿和奶酪做一个三明治”,就能给机器人提供理解和执行任务的语境。
- 模型是机器人(LLM)。
- 上下文是您给出的具体指示(三明治的配料)。
⚡ 上下文 ↔ 协议:“为 LLM 提供结构化的内存、工具和状态”
一旦机器人接收到指令(上下文),它就需要一种方式来遵循指令、记住细节并使用工具。这一切都由 完成Protocol
,它是让机器人运用记忆和工具完成工作的系统。
我们还是以三明治为例。给它制定一个规程,可以帮助它记住食材,知道如何用刀等等。
- 上下文告诉机器人该做什么。
- 协议为其提供了执行此操作的工具和内存。
这是完成任务的结构。
⚡ 协议 ↔ 运行时:“实际运行 AI 代理”
机器人知道该做什么(上下文)以及如何去做(协议)。现在它需要真正地去做,这可以通过运行时来实现。
回到三明治的例子,运行时就是三明治开始执行的时刻。它就像任务开始执行的环境(比如厨房)。
- 协议为机器人提供了遵循的方法。
- 运行时是机器人实际工作的环境。
让我们将这三个层放在一起,看看使用会产生什么效果饭店版
。
- 这
Model
是厨师。他们拥有烹饪的知识和技能。 - 这
Context
是菜单。它告诉厨师需要哪些食材,以及这道菜应该是什么样子、味道如何。 - 这
Protocol
是服务员。服务员会把订单交给厨师,准确地告诉厨师菜品的制作方法,甚至会记住你是否对某种食物过敏。 - 厨房
Runtime
是厨师实际准备食物的地方。所有工具、加热和准备工作都在这里进行。
一旦您了解了服务器和客户端等核心组件(在“MCP 的内部工作原理”部分中介绍),一切就变得有意义了。
各层相互配合,使整个系统正常运转。
6. 使用内置方法连接 100 多个托管 MCP 服务器的最简单方法
在本节中,我们将探索将 Cursor 与 MCP 服务器连接起来的最简单方法。
如果您想了解如何在 Cursor 中添加和使用自定义 MCP 服务器,请阅读官方文档。
步骤 1:先决条件。
安装 Node.js 并确保npx
它在您的系统中可用。
第 2 步:在 Cursor 中启用 MCP 服务器。
您可以使用打开 Cursor 中的命令面板Ctrl + Shift + P
并搜索光标设置。
您会在侧边栏上找到 MCP 选项。
步骤 3:使用预定义的 MCP 服务器
我们也可以从头创建一个,但为了简单起见,我们使用预定义的。
我们将使用 Composio 作为服务器,因为它们内置了身份验证功能。您可以在mcp.composio.dev找到 Composio 的列表。
- 内置身份验证支持 OAuth、API 密钥、JWT 和 Basic 身份验证。这意味着您无需创建自己的登录系统。
- 完全托管的服务器无需复杂的设置,可以轻松地将 AI 代理与 Gmail、Slack、Notion、Linear 等 250 多种工具集成。
- 提供 20,000 多个预构建的 API 操作,无需编码即可快速集成。
- 根据您的配置需求,可以在本地或远程操作。
- 更好的工具调用准确性使 AI 代理能够与集成应用程序顺畅交互。
- 它与 AI 代理兼容,这意味着它可以将 AI 代理连接到工具,以便在单个对话中执行发送电子邮件、创建任务或管理票证等任务。
这也意味着更少的停机时间和维护问题。您可以在status.composio.dev查看状态。
您可以轻松地与一堆有用的 MCP 服务器集成,而无需编写任何代码。
通过每个选项,您可以找到活跃用户总数、当前版本、最近更新时间以及所有可用的操作。
您将找到使用它来安装的说明TypeScript
,Python
并且它支持 Claude (MacOS)、Windsurf (MacOS) 和 Cursor 作为 MCP 主机。
步骤4:集成MCP服务器
现在是时候集成一个带光标的邮件服务器了。目前,我们将使用 Gmail MCP 服务器。
以前是使用 SSE,但 Cursor 最近用改变了这种方法npx command
。我们需要生成终端命令。请查看此页面来生成您的终端命令。
终端命令将如下所示。
npx @composio / mcp @latest setup“https://mcp.composio.dev/gmail/xyzxyz...” ——客户端光标
您可以在终端中运行此命令并重新启动 Cursor 以注意更改。
如果您使用的是 Python,请按照以下方法安装 composio-toolset。
pip install composio_openai从composio_openai导入 ComposioToolSet,App
从openai导入 OpenAIopenai_client = OpenAI ()
composio_toolset = ComposioToolSet (entity_id= "default" )
tools = composio_toolset.get_tools ( apps=[ App . GMAIL ])
根据您的使用情况,您可以将最终配置放在两个位置:
- 对于特定于项目的工具,请
.cursor/mcp.json
在项目目录中创建一个文件。这允许您定义仅在该特定项目中可用的 MCP 服务器。 - 对于您想要在所有项目中使用的工具,请
\~/.cursor/mcp.json
在主目录中创建一个文件。这将使 MCP 服务器在您的所有 Cursor 工作区中可用。终端将强制执行第二个选项,使其可全局访问。
它将显示必要的操作和状态绿点,表示已成功集成。
mcp.json
如下。
{ “mcpServers” : { “gmail_composio” : { “url” : “https://mcp.composio.dev/gmail/freezing-wrong-dress-7RHVw0” } }
}
您可以查看示例服务器和实现列表。您可以按照此结构(根据您的偏好选择)集成社区服务器。
✅ SSE 服务器配置。
Cursor 支持此配置,您可以指定url
要连接到 SSE 服务器的字段。
// 此示例演示了使用 SSE 格式的 MCP 服务器
// 用户应手动设置并运行服务器
// 它可以联网,以允许其他人访问它
{ "mcpServers" : { "server-name" : { "url" : "http://localhost:3000/sse" , "env" : { "API_KEY" : "value" } } }
}
✅ STDIO 服务器配置 (Python)
这将使用 Python 脚本通过标准输入/输出 (STDIO) 传输设置一个 MCP 服务器。此方法主要用于本地开发。
// 如果您使用的是 CLI 服务器 Python
// 此示例演示了使用 stdio 格式的 MCP 服务器
// Cursor 会自动为您运行此过程
// 这使用 Python 服务器,使用 `python` 运行
{ "mcpServers" : { "server-name" : { "command" : "python" , "args" : [ "mcp-server.py" ] , "env" : { "API_KEY" : "value" } } }
}
✅ STDIO 服务器配置(Node.js)
// 如果您使用的是 CLI 服务器 Node.js
// 此示例演示了使用 stdio 格式的 MCP 服务器
// Cursor 会自动为您运行此过程
// 这使用 Node.js 服务器,使用 `npx` 运行
{ "mcpServers" : { "server-name" : { "command" : "npx" , "args" : [ "-y" , "mcp-server" ] , "env" : { "API_KEY" : "value" } } }
}
步骤 5:直接在 Agent 内使用服务器。
在继续操作之前,请务必检查Composio MCP 服务器页面上可用的操作。您还可以在仪表板上找到工具和操作。
您可以使用命令打开聊天Ctrl + I
。
您可以启用Agent Mode
Cursor 中最自主的模式,该模式旨在以最少的指导处理复杂的编码任务。
我更喜欢在执行之前进行一些控制,所以我选择默认设置。您可以输入任何查询。只需点击run tool
按钮即可。
如您所见,它将调用适当的 MCP 服务器(如果您有多个),并且它将根据您的提示相应地使用正确的操作。
由于没有活动连接,它将首先建立一个连接。您需要授权该过程。
我使用的是很久以前创建的虚拟账户,建议你也这么做,以便进行测试。一旦你满意了,就可以用你的主账户来自动化操作。
如您所见,它正确获取了电子邮件。
让我们通过发送一封``主题为“Composio 演示”的电子邮件进行检查,并在电子邮件正文中说明测试 MCP 服务器。
正如您所看到的,我收到了具有提示中指定的正确主题和正文的电子邮件。
发送电子邮件
收到电子邮件
使用此 MCP服务器,您可以做很多令人惊奇的事情,例如Get attachments
、、、、、、、等等。Create email draft``Modify thread labels``Reply to a thread``get contacts``delete message``move to trash``search people``send email
永远记住,你的能力是有限的。我已经测试了超过 15 个提示,以分析极端情况。
8.MCP的一些局限性
MCP 的期望和现实可能大相径庭。当你仔细阅读这些要点时,你就会明白我的意思。
别误会我的意思,MCP 非常有前景,但您应该注意以下一些限制:
⚡ 并非所有 AI 平台都支持 MCP
Claude(尤其是其桌面应用程序)以及 Cursor 或 Windsurf 等工具直接支持 MCP。但如果您使用的是 ChatGPT 或本地 LLaMA 模型之类的工具,它可能无法开箱即用。
有一些开源工具试图解决这个问题,但在 MCP 得到更广泛的采用之前,所有 AI 助手的支持都很困难。
⚡ Agent自主权并不完美
MCP赋予了能力,但是AI的判断还不够完善。
例如,工具的使用取决于模型对工具描述和使用情境的理解程度。它通常需要及时调整或代理端逻辑来提高可靠性。
⚡ 性能开销
通过 MCP 使用工具会增加开销。每次调用都是外部的,速度可能比 AI 自行回答慢得多。例如,通过 MCP 工具从网页抓取数据可能需要几秒钟,而模型只需几毫秒就能从训练数据中猜出答案。
现在,如果您正在协调多个工具,延迟就会累积起来,就像按顺序调用 5 个不同的 MCP 服务器来执行以下操作:
- 从 Google Drive 获取文件
- 使用 LLM 工具总结内容
- 翻译摘要
- 根据翻译生成推文
- 使用 Buffer 等社交媒体工具进行安排
该链可能需要 10 到 15 秒,具体取决于服务器响应时间。
一些代理可以处理并行工具的使用,因此您可以进一步优化流程。
⚡ 信任问题
让人工智能执行实际操作可能会有风险。即使人工智能通常能正确执行,用户也常常希望在事情发生之前进行审查。
目前,大多数工具要么完全自主,要么完全不自主。很少有中间地带,让人工智能既能利用自主性,又能在关键时刻将控制权交给用户。我们都需要一个human in the loop
……
❌ 糟糕的方法:AI 未经询问就立即发送电子邮件。
✅ 更好的方法:AI 会说,I'm about to email X with this message, is it okay to send?
并且只有在您批准后才会采取行动。
⚡ 可扩展性问题
当今大多数 MCP 服务器都是为单个用户构建的,通常只是在开发人员的笔记本电脑上运行。
单个 MCP 服务器服务多个独立代理或用户的情况目前尚未得到深入探索。为此,公司需要处理更复杂的问题,例如并发请求、分离数据上下文以及强制使用速率限制。
这个领域的生态系统仍有发展空间,尤其是 MCP 网关或企业级 MCP 服务器框架等理念。
⚡ 安全标准
MCP 没有内置身份验证或授权。
Authentication & Authorization
:MCP 本身不支持用户或代理的身份验证。如果您将 MCP 服务器暴露在网络上,则必须自行添加安全措施。
一些实现使用 OAuth 2.1 来添加权限范围(read-only or write-only access
),但目前没有标准方法,因此每个服务器处理身份验证的方式都不同。
Correct Permissions
:理想情况下,代理应该只使用他们需要的工具。但是,如果有多个强大的工具可用(例如浏览器访问和终端),除非您手动禁用,否则没有什么可以阻止AI使用错误的工具。
Prompt Injection
:如果人工智能误解了提示,它可能会犯错。更糟糕的是,有人可能会编写恶意提示,诱骗人工智能执行有害操作(prompt injection
)。安全措施取决于每个 MCP 服务器的构建方式。
如果您想了解如何减轻 MCP 实施中的安全风险,请阅读以下内容:
- 了解并减轻Microsoft MCP 实施中的安全风险。
- Pillar 的MCP 安全风险。
MCP 仍然很新。随着需求的发现,我们将进一步开发以解决更多边缘情况。
在AI模型方面,我们可能会看到针对工具使用和MCP进行微调的模型。Anthropic已经提到了未来AI models optimized for MCP interaction
。
如果您计划构建 MCP,这里有一些不错的资源:
- mcp-chat — 是一款适用于 MCP 服务器的 CLI 聊天客户端。用于测试和评估 MCP 服务器和代理
- mastra registry — MCP 服务器目录的集合,用于将 AI 连接到您最喜欢的工具。
- smithery.ai — 通过 MCP 服务器为您的代理扩展 4,630种功能。详细信息包括
monthly tool calls
:local option``tools``API``installation instructions for different clients
- 官方团队提供的热门 MCP 服务器目录— GitHub 上 2 万颗星。
- 1800+ MCP 服务器的光标目录。
- 这些 MCP 完全是 我的 Cursor 工作流程的 10 倍——带有实际用例的 YouTube 视频。
MCP 仍在不断发展,但其核心理念始终保持不变,我已尽力解释其概念。希望您能从中找到一些有用的信息。
与代理的一次对话可以帮助您自动化复杂的工作流程。