跳到内容

什么是 MCP

随着 OpenAI 加入 Anthropic 支持模型上下文协议 (MCP),我们正在见证一个统一的标准,用于语言模型与外部系统进行交互。这为多 LLM 架构创造了令人兴奋的机会,在这种架构中,专业的 AI 应用可以并行工作,通过标准化的接口发现工具、交接任务并访问强大的功能。

什么是 MCP 以及它为何重要?

MCP 是 Anthropic 开发的一种开放协议,用于规范 AI 模型和应用程序与外部工具、数据源和系统的交互方式。它通过提供一个标准化的接口层,解决了团队为 AI 集成构建自定义实现所导致的碎片化问题。

MCP 生态系统包含三个组成部分

  1. 主机:希望通过 MCP 客户端访问数据的程序,如 Claude Desktop、IDE 或 AI 工具
  2. 客户端:与服务器保持 1:1 连接的协议客户端
  3. 服务器:通过标准化的模型上下文协议公开特定功能的轻量级程序

MCP Architecture

当与客户端交互时,主机有两种主要选择:工具,它们是由模型控制的用于检索或修改数据的功能;以及资源,它们是应用程序控制的数据,例如文件。

还有一种意图是最终允许服务器本身在执行任务时,通过 sampling 端点向客户端和主机请求完成/批准。

MCP 解决的集成问题

在 MCP 出现之前,将 AI 应用程序与外部工具和系统集成会产生所谓的“M×N 问题”。如果您有 M 个不同的 AI 应用程序(Claude、ChatGPT、自定义代理等)和 N 个不同的工具/系统(GitHub、Slack、Asana、数据库等),您将需要构建 M×N 个不同的集成。这会导致团队间的重复工作、不一致的实现以及呈二次增长的维护负担。

MCP 将此问题转化为“M+N 问题”。工具创建者构建 N 个 MCP 服务器(每个系统一个),而应用程序开发者构建 M 个 MCP 客户端(每个 AI 应用程序一个)。总的集成工作量变为 M+N,而不是 M×N。

这意味着一个团队可以构建一个 GitHub MCP 服务器一次,它就可以与任何兼容 MCP 的客户端一起工作。同样,一旦您构建了一个兼容 MCP 的 Agent,它就可以立即与所有现有的 MCP 服务器一起工作,无需额外的集成工作。

市场信号:日益增长的采用率

自推出以来,MCP 的采用曲线异常陡峭。短短几个月内,就出现了近 3000 个社区构建的 MCP 服务器,显示了开发者对该标准的强烈兴趣。Zed、Cursor、Perser 和 Windsurf 等主要平台已成为 MCP 主机,将该协议集成到其核心产品中。包括 Cloudflare 在内的公司已经发布了官方 MCP 支持,并提供了 OAuth 等功能,供开发者开始构建出色的应用程序。

MCP Stars Growth

随着 OpenAI 和 Anthropic 都支持 MCP,我们现在拥有一个涵盖这两家最先进的 AI 模型提供商的统一方法。这一临界规模表明 MCP 有望成为 AI 工具集成的主要标准。

MCP 与 OpenAPI 规范的对比

尽管 MCP 和 OpenAPI 都是 API 接口的标准,但它们的目的和方法不同。以下是关键差异的简化比较

方面 OpenAPI 规范 模型上下文协议 (MCP)
主要用户 与 Web API 交互的人类开发者 发现和使用工具的 AI 模型和代理
架构 单个 JSON/YAML 文件中的集中式规范 具有主机、客户端和服务器的分布式系统,支持动态发现
用例 为人类使用者记录 RESTful 服务 使 AI 模型能够通过语义理解自主查找和使用工具

这两个标准在现代技术生态系统中发挥着互补的作用。OpenAPI 擅长为人类开发者记录传统的 Web 服务,而 MCP 是专为新兴的 AI Agent 生态系统构建的,它提供丰富的语义上下文,使语言模型能够发现和使用工具。

大多数组织可能会同时维护这两种标准:为其面向开发者的服务维护 OpenAPI 规范,并为其支持 AI 的应用程序维护 MCP 接口,根据需要在这两个世界之间架起桥梁。

MCP 开发入门

MCP 的学习曲线相对平缓——许多服务器的代码行数不足 200 行,并且可以在不到一小时内构建完成。以下是您可以在现有环境中使用 MCP 的几种方法

Claude Desktop

Claude Desktop 现在支持 MCP 集成,允许 Claude 通过工具访问最新信息。您可以通过转到 Claude 的“设置”并编辑配置来添加这些 MCP。

Claude Desktop MCP Settings

例如,您可以使用以下配置安装 Firecrawl 的 MCP

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

这使得 Claude 能够抓取网站并获取最新信息

Claude Desktop Using MCP

Cursor 集成

Cursor 通过一个简单的配置文件提供对 MCP 的支持。创建一个 .cursor/mcp.json 文件,其中包含您所需的 MCP 服务器

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<Personal Access Token Goes Here>"
      }
    }
  }
}

在 Cursor 设置中启用 MCP 选项

Cursor MCP Support

然后将 Cursor 的 Agent 与您的 MCP 服务器一起使用

Cursor MCP Agent

在上面的示例中,我提供了一个简单的 GitHub MCP,用于询问关于 instructor-ai 仓库的一些问题。但您实际上可以做更多的事情,例如,您可以提供一个 puppeteer MCP,让您的模型与 Web 浏览器交互,例如查看您的前端代码渲染后的样子,以便自动修复它。

OpenAI Agent SDK

OpenAI 的 Agent SDK 现在支持使用 MCPServer 类连接 MCP 服务器,这使您能够将 Agent 连接到本地工具和资源

import asyncio
import shutil

from agents import Agent, Runner, trace
from agents.mcp import MCPServer, MCPServerStdio

async def run(mcp_server: MCPServer, directory_path: str):
    agent = Agent(
        name="Assistant",
        instructions=f"Answer questions about the git repository at {directory_path}, use that for repo_path",
        mcp_servers=[mcp_server],
    )

    question = input("Enter a question: ")

    print("\n" + "-" * 40)
    print(f"Running: {question}")
    result = await Runner.run(starting_agent=agent, input=question)
    print(result.final_output)

    message = "Summarize the last change in the repository."
    print("\n" + "-" * 40)
    print(f"Running: {message}")
    result = await Runner.run(starting_agent=agent, input=message)
    print(result.final_output)

async def main():
    # Ask the user for the directory path
    directory_path = input("Please enter the path to the git repository: ")

    async with MCPServerStdio(
        cache_tools_list=True,  # Cache the tools list, for demonstration
        params={"command": "uvx", "args": ["mcp-server-git"]},
    ) as server:
        with trace(workflow_name="MCP Git Example"):
            await run(server, directory_path)

if __name__ == "__main__":
    if not shutil.which("uvx"):
        raise RuntimeError(
            "uvx is not installed. Please install it with `pip install uvx`."
        )

    asyncio.run(main())

这使得 Agent 能够理解本地 Git 仓库

Agent MCP Example

结论

对于开发者和组织而言,问题不再是您是否应该为 MCP 构建,而是何时构建。随着生态系统的成熟,早期采用者在将 AI 功能集成到其现有系统和工作流程中将拥有显著优势。尤其是在 Anthropic 即将推出的 MCP 注册表、对远程 MCP 服务器托管的支持以及有助于构建更丰富和更个性化集成的 OAuth 集成出现后,这一点尤为明显。

MCP 提供的标准化很可能推动下一波 AI 集成浪潮,使得构建能够通过统一接口利用不同提供商最佳功能的复杂多 Agent 系统成为可能。