MCP(模型上下文协议)深入浅出

348 阅读14分钟

随着大语言模型(LLM)能力的突飞猛进,AI 助手在各种场景中开始崭露头角。然而,单纯依赖模型自身的训练数据和推理能力,往往难以获取最新的业务数据和执行外部操作。模型需要打破数据孤岛,与实际系统和工具互动,才能输出更准确、更有用的结果。MCP(Model Context Protocol)应运而生,它是由 Anthropic 在 2024 年发布的开放标准协议,旨在为 AI 应用提供一种“USB-C 接口”式的通用连接方案。借助 MCP,开发者可以轻松地让模型访问外部数据源、调用工具功能,从而让前沿模型产生更相关、更丰富的回答。MCP 为构建 Agent 搭建了一座桥梁,使 AI 可以自动处理机械化任务,让开发者专注于创造。

AI 集成的挑战

在 MCP 出现之前,将 AI 模型与外部系统对接是一项复杂工程。每个数据源(如 GitHub、数据库、第三方服务)都有自己的 API 接口或定制方案,AI 应用需要为每一种情况单独编写对接逻辑,导致大量重复工作和维护成本。

业界形象地称之为“N×M 问题”:众多 AI 客户端(如 IDE、聊天助手)需要连接众多服务器/工具,形成错综复杂的集成网络,难以扩展。

MCP 的提出旨在统一这一切:它为 AI 应用和外部系统之间搭建了一个标准化的双向通道,替代了过去分散的点对点集成方案,使系统架构更简单、更可靠。

换句话说,MCP 就像为 AI 提供了一个通用接口,各种工具都可以互通有无,从而打破信息孤岛,让 AI 在不同任务和环境间自由切换而不丢失上下文。

image.png

MCP 协议、组件与机制

MCP 基于客户端-服务器架构,主要由三类角色构成:主机(Host)、客户端(Client)和服务器(Server)。

其中,主机应用是具备 LLM 功能的程序(如 Claude 桌面版、Cursor IDE、Codeium 等),负责管理模型和用户的交互流程;MCP 客户端则运行在主机内部,与每个服务器保持一对一的长连接,负责在主机和服务器间路由消息、协商协议;MCP 服务器负责对外提供具体功能(如访问某个数据源、执行特定操作)。协议层负责定义消息格式(基于 JSON-RPC)和通信约定。

image.png

如上图所示,主机(左侧)可以同时运行多个 MCP 客户端,它们分别连接到不同的 MCP 服务器。每个服务器聚焦提供一种集成功能,比如服务器 A 可能包装了本地文件系统接口,服务器 B连接数据库,服务器 C 对接某个在线服务,等等。

主机通过标准的 MCP 协议依次与这些服务器通信,无需针对每种新服务编写额外逻辑。MCP 的架构灵感来自语言服务器协议(LSP),旨在为 AI 应用提供类似“即插即用”的扩展能力。

在上述架构中,各组件职责如下:

  • 主机应用(Host)负责整体流程控制,管理与多个客户端的生命周期,并可决定用户授权等策略。
  • 每个客户端(Client)维持与对应服务器的状态连接,负责路由请求/响应、记录服务器提供的功能(工具、资源、提示模板等),并在初始化时协商协议版本和功能列表。
  • 服务器(Server)则是扩展 LL 功能的核心:它通过工具(Tools)暴露可执行的函数接口,让模型能够直接调用外部功能;通过资源(Resources)向模型提供上下文数据(如文件内容、数据库记录等);通过提示模板(Prompts)提供预定义的交互指导。工具由模型自动发现和调用,而资源和提示由用户或主机控制。

image.png

总结来说,MCP 协议使得主机→客户端→服务器之间的交互和工具调用都变得标准化、可组合,各组件之间清晰分工,极大提升了系统互操作性。

关键组件详解

  • 工具(Tools):服务器对外提供的可执行操作,等价于函数或 API 调用。比如 YouTube 服务器可能提供 search_videos(搜索视频)、get_video_details(获取视频统计)等工具;邮件服务器提供 send_email、get_inbox 等工具。工具带有名称、描述和参数模式,客户端可通过 tools/list 发现可用工具,模型可通过 tools/call 来调用它们。工具设计为由模型控制(model-controlled),意味着模型可以自动根据用户意图选择并调用相应工具。
  • 资源(Resources):服务器对外暴露的数据内容,用于为模型提供上下文信息。资源可以是文本文件、数据库记录、网页 API 返回结果、日志、图像等任何数据,统一通过 URI 标识。客户端或用户可以根据需要选择订阅和使用哪些资源,不同客户端可有不同策略(比如 Claude 需要用户手动选择,其他客户端可能自动匹配)。资源为模型补充了额外情境,帮助模型理解业务环境。
  • 提示词模板(Prompts):服务器预定义的交互模板或指令流程,可作为快捷方式引导模型完成常见任务。提示词由名字和参数组成,可接收动态参数并利用资源上下文,支持多轮对话和工作流程分步展开。例如,服务器可能提供一个“Analyze code”提示,帮助模型一步步分析代码。提示词是用户可控的(user-controlled),用户在客户端界面中可显式选择使用哪些提示词。

MCP 如何解决现有问题

通过以上设计,MCP 从根本上解决了AI工具集成的碎片化问题。过去,每增加一个 AI 应用就要为每个数据源单独适配一套接口,而现在采用 MCP 协议后,只需遵循统一规范,即可让任何客户端与任何服务器协同工作。

这减少了开发者的重复工作,也降低了系统维护成本。随着生态系统的成熟,AI 应用将在不同工具和数据间保持一致的上下文,取代原有的臃肿架构。

同时,MCP 也建立在主流模型支持的函数调用机制之上,将“工具调用”能力标准化,使得原来仅限于特定平台(如 OpenAI 的自定义 GPT)的功能,能够应用于任何实现了 MCP 的AI应用。

MCP 对 LLM 自动化与 Agent 系统的意义

MCP 的出现对 Agent 和自动化流程具有深远影响。引入 MCP 后,LLM 不仅仅是输出文字的“黑盒子”,还能主动调用外部功能、持续保持状态与上下文。

例如,Cursor、Claude Desktop 等 IDE/聊天工具集成 MCP,让开发者可以直接在聊天中用自然语言让模型搜索文档、读取代码仓库、调用 API、编辑界面等。这样一来,模型成为真正的“智能助理”,能够执行任务而非仅给建议。正如业内所说,MCP 将推动 AI 从“交互式助手”迈向“自主型 Agent”,让模型自动完成更多机械化工作。

当前,包括代码开发工具商、设计工具平台等都在积极跟进 MCP,期待借此提高模型的上下文感知力和操作能力。

基于 Cursor 连接 MCP 服务器

docs.cursor.com/context/mod…

前提条件

安装 Node.js 并确保可用。

在 Cursor 中启用 MCP 服务器

可以在 Cursor 中打开命令面板并搜索设置:

image.png

找到 MCP 选项:

image.png

集成 MCP 服务器

我们将使用Composio 作为服务器,因为它们具有内置的身份验证。

内置身份验证支持 OAuth、API 密钥、JWT 和基本身份验证。这意味着您不必创建自己的登录系统。完全托管的服务器消除了复杂设置的需要,使得将 AI Agent与 250 多种工具(如Gmail、Slack、Notion、Linear 等)集成变得简单。

以 Gmail MCP 服务器为例:

npx @composio/mcp@latest setup "https://mcp.composio.dev/gmail/xyzxyz..." --client cursor

在终端中运行此命令并重新启动 Cursor。

如果使用 Python,安装 composio-toolset 如下:

### pip install composio_openai

from composio_openai import ComposioToolSet, App
from openai import OpenAI

openai_client = OpenAI()
composio_toolset = ComposioToolSet(entity_id="default")
tools = composio_toolset.get_tools(apps=[App.GMAIL])

根据使用情况最终配置:

  1. 对于特定于项目的工具,在项目目录中创建一个文件。这允许定义仅在该特定项目中可用的 MCP 服务器。
  2. 对于希望在所有项目中使用的工具,在主目录中创建一个文件。这使得 MCP 服务器在所有的 Cursor 工作区中可用。终端将强制执行第二个选项,使其全局可访问。

image.png

成功集成:

image.png

mcp.json如下:

{  
    "mcpServers": {  
        "gmail_composio": {  
            "url": "https://mcp.composio.dev/gmail/freezing-wrong-dress-7RHVw0"  
        }  
    }  
}

STDIO 服务器配置

使用标准输入/输出(STDIO)传输和 Python 脚本设置 MCP 服务器。这种方法主要用于本地开发。

// CLI server Python  
// This example demonstrated an MCP server using the stdio format  
// Cursor automatically runs this process for you  
// This uses a Python server, run with `python`  
{  
    "mcpServers": {  
        "server-name": {  
            "command": "python",  
            "args": ["mcp-server.py"],  
            "env": {  
                "API_KEY": "value"  
            }  
        }  
    }  
}

在 Agent 中使用服务器

确保检查 composio mcp 服务器页面上的可用操作。

可以启用Agent Mode,这是 Cursor 中最自主的模式,旨在以最少的指导处理复杂的编码任务。

image.png

由于没有活动连接,它将首先建立一个连接,需要授权。

image.png

成功获取电子邮件。

实用示例

使用 YouTube MCP 服务器查询热门视频

利用 Composio 提供的 YouTube MCP 服务器,演示如何用自然语言查询热门视频。首先需要连接服务器。在支持 MCP 的客户端(如 Cursor IDE)中运行命令,将 YouTube MCP 服务器添加到配置中:

npx @composio/mcp@latest setup "https://mcp.composio.dev/youtube/your-server-id" --client cursor

执行后,Cursor 的 mcp.json 配置文件会新增一项,如:

{
  "mcpServers": {
    "youtube_composio": {
      "url": "https://mcp.composio.dev/youtube/your-server-id"
    }
  }
}

然后首次使用时,需要在浏览器中打开弹出的 OAuth 链接,完成授权,允许 MCP 服务器读取 YouTube 数据。

配置完成后,我们可以在 Cursor 的聊天框输入类似:“Fetch me the top 5 videos about Model Context Protocol based on views and likes. ”(请基于播放量和点赞数列出前5个关于‘模型上下文协议’的YouTube热门视频)。Cursor 会首先检查与服务器的连接,然后依次调用 YouTube 工具:如 YOUTUBE_CHECK_ACTIVE_CONNECTION(检查连接)、YOUTUBE_SEARCH_YOUTUBE(搜索视频)、YOUTUBE_VIDEO_DETAILS(获取视频详情)等,并最终汇总结果返回。下图展示了查询过程及部分结果:

image.png 通过 MCP 工具搜索 “Model Context Protocol” 相关视频。可以看到,系统自动调用了多个工具,并返回了热门视频列表

图中可以看到,Cursor 依次执行了连接检查、视频搜索和详情查询工具,最终按观看量与点赞数为基础得出排名前两条视频的信息。

通过这个示例,MCP 将复杂的 API 调用流程封装为连续的工具调用,用户无需手动拼接 API 请求或处理分页,只需像和聊天机器人对话一样下达指令即可获取信息。

通过 Cursor 与 Figma 的 MCP 集成,读取和修改设计

这个示例展示如何让 LLM 直接操作设计工具。这里我们使用开源的 Cursor Talk to Figma MCP 项目,实现 Cursor 与 Figma 的互通。首先,在主机端安装和配置环境(需要 Bun)

github.com/sonnylazuar…

  1. 克隆项目代码并安装依赖(假定已进入项目目录):

    bun setup
    

    该命令会安装 MCP 相关依赖,并在 Cursor 的配置中添加 MCP 服务器。

  2. 启动项目中的 WebSocket 服务,它负责协调 Cursor 和 Figma 之间的通信:

    bun socket
    
  3. 在 Cursor 的 MCP 配置文件(通常为 ~/.cursor/mcp.json)中添加 Figma 服务器定义,例如:

    {
      "mcpServers": {
        "TalkToFigma": {
          "command": "bunx",
          "args": ["cursor-talk-to-figma-mcp@latest"]
        }
      }
    }
    
  4. 在 Figma 中安装对应的插件(通过开发者模式导入 src/cursor_mcp_plugin/manifest.json),并使用它连接到上一步启动的 WebSocket(通过加入相同的频道)。此时,Cursor 和 Figma 就建立起了 MCP 通道。

一切准备就绪后,我们可以在 Cursor 的聊天中用自然语言描述所需的设计,让模型直接“画”出结果。例如,输入: 在当前 Figma 文件中新建一个移动端登录界面,包括用户名和密码输入框以及一个蓝色的“登录”按钮。

模型将识别到需要创建 UI 元素,并调用 Figma 服务器提供的工具来操作设计。该服务器提供了丰富的设计操作工具,包括创建框架 (create_frame)、创建文本节点 (create_text)、设置颜色 (set_fill_color)、调整布局 (set_layout_mode) 等。在后台,Cursor 可能依次执行如下操作:

  • 调用 create_frame 在画布上新建一个容器框架,作为登录界面的背景。
  • 调用 create_text 添加“用户名”、“密码”标签和提示文本。
  • 调用 create_rectanglecreate_frame 创建输入框形状。
  • 调用 set_fill_color 将登录按钮填充为蓝色。
  • 调用自动布局工具对齐各元素。

整个流程对用户透明,模型自动发现并使用合适的工具构建界面。最终,我们在 Figma 文件中得到了一个完整的登录页面布局,无需自己手动拖拽设计元素。

当下 MCP 的局限性

并非所有 AI 平台都支持 MCP

Claude(特别是它的桌面应用程序)和像 Cursor 或 Windsurf 这样的工具直接支持 MCP。但是,如果你使用的是本地 LLM 模型,它可能无法开箱即用。

Agent 自主性并不完美

MCP 提供了能力,但 LLM 的判断仍然不完美。工具的使用取决于模型对工具描述和使用上下文的理解程度。它通常需要调整提示词或代理端逻辑来提高可靠性。

性能开销

通过 MCP 使用工具会增加开销。每次调用都是外部的,可能比 AI 自己回答要慢得多。通过 MCP 工具从网页抓取数据可能需要几秒钟,而模型可以在毫秒内从训练数据中猜出答案。

信任问题

让 AI 执行真实操作可能会让人感到风险。即使人工智能通常能做到正确,用户往往希望在事情发生之前进行审查。大多数工具要么完全自主,要么完全不自主。很少有中间地带,人工智能可以利用自主性,但在重要时刻仍然给予用户控制权。

可扩展性的问题

目前大多数 MCP 服务器都是为单用户构建的,通常只在开发者的环境上运行。一个 MCP 服务器为多个独立代理或用户提供服务的情况尚未得到充分探索。为了做到这一点,需要处理更复杂的事务,比如并发请求、独立的数据上下文以及强制执行速率限制使用。

安全标准

MCP 没有内置的身份验证或授权功能。如果您通过网络暴露 MCP 服务器,则必须添加自己的安全措施。

结语

MCP 协议以开放、标准化的方式将 AI 模型与外部系统连接起来,极大简化了跨工具集成的复杂度。它不仅让 LLM 获得了“查看和操作世界”的能力,而且为 AI 自动化和 Agent 的发展提供了坚实基石。

对于开发者而言,MCP 相当于在 AI 应用中插入了一个通用接口:每增加一个数据源或功能,只需开发一个符合协议的服务器;每个 AI 应用也只需一个 MCP 客户端即可接入所有服务器。这种模块化设计正加速构建更智能、更强大的 AI 工具生态。如前文案例所示,无论是查询网络数据(YouTube 热门视频)还是操作专业应用(Figma 设计稿),MCP 都能让流程变得像日常对话一样简单易用。

随着更多平台和工具支持 MCP,未来的 AI 应用将更加自动化、连贯和高效,让开发者和终端用户享受更流畅的交互体验。我们建议开发者尽早熟悉 MCP 的使用和原理,为即将到来的智能化软件开发浪潮做好准备。