模型上下文协议 (MCP) 快速入门

阅读原文

作者:Frank Fiegel,发表于2024年11月25日。

标签:anthropic, mpc, typescript

当大型语言模型首次出现时,用户必须将代码复制粘贴到文本界面中与它们交互。这种方式很快被证明不够用,导致开发了定制化集成以获得更好的上下文加载。然而,这些集成是分散的,需要单独开发。模型上下文协议(MCP)通过提供一个通用协议来解决这个问题,使AI能够高效地与本地和远程资源交互。

有关MCP的问题?加入模型上下文协议Discord并在#general频道提问。

协议

协议的高级概述:

  • 主机是启动连接的LLM应用程序(如Claude Desktop或IDE)
  • 客户端在主机应用程序内部与服务器保持1:1连接
  • 服务器向客户端提供上下文、工具和提示

服务器

如果你已经熟悉工具使用,那么MCP会让你感到熟悉。

让我们快速看一下其中一个示例服务器实现:Brave搜索服务器。

在内部,服务器实现定义了它可以访问的工具,并将它们的可用性传达给客户端。

javascript 复制代码
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [WEB_SEARCH_TOOL, LOCAL_SEARCH_TOOL],
}));

这里,WEB_SEARCH_TOOL是描述可用工具的对象,例如:

css 复制代码
{
  name: "brave_web_search",
  description:
    "Performs a web search using the Brave Search API, ideal for general queries, news, articles, and online content. " +
    "Use this for broad information gathering, recent events, or when you need diverse web sources. " +
    "Supports pagination, content filtering, and freshness controls. " +
    "Maximum 20 results per request, with offset for pagination. ",
  inputSchema: {
    type: "object",
    properties: {
      query: {
        type: "string",
        description: "Search query (max 400 chars, 50 words)"
      },
      count: {
        type: "number",
        description: "Number of results (1-20, default 10)",
        default: 10
      },
      offset: {
        type: "number",
        description: "Pagination offset (max 9, default 0)",
        default: 0
      },
    },
    required: ["query"],
  },
}

据我所知,这与Anthropic Claude工具使用APIOpenAI函数调用完全相同。

然后它暴露一个请求处理器。

dart 复制代码
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  // ...
});

请求处理器将传入请求与工具匹配,然后调用与该工具相关联的函数。

vbnet 复制代码
case "brave_web_search": {
  if (!isBraveWebSearchArgs(args)) {
    throw new Error("Invalid arguments for brave_web_search");
  }
  const { query, count = 10 } = args;
  const results = await performWebSearch(query, count);
  return {
    content: [{ type: "text", text: results }],
    isError: false,
  };
}

每个MPC服务器都有一个URI(例如,tool://brave_web_search/brave_web_search),作为单独的进程运行,并通过JSON-RPC与客户端通信。例如,你可以通过以下命令启动Brave搜索服务器:

你可以通过注册Brave账号获取免费的Brave搜索API密钥。

shell 复制代码
$ export BRAVE_API_KEY=your-api-key
$ npx -y @modelcontextprotocol/server-brave-search

客户端

客户端需要知道它可以连接到哪个服务器。

arduino 复制代码
const transport = new StdioClientTransport({
  command: "tool://brave_web_search/brave_web_search"
});

然后,它需要连接到服务器:

csharp 复制代码
await client.connect(transport);

连接的目的是通过协议协商功能。在连接期间:

  • 客户端发送带有协议版本和功能的初始化请求
  • 服务器响应其协议版本和功能
  • 客户端发送初始化通知作为确认
  • 开始正常的消息交换

最后,客户端可以向服务器发送消息。

csharp 复制代码
const resources = await client.request(
  { method: "brave_web_search" },
  BraveWebSearchResultSchema
);

协议定义了4种消息类型:

  • 请求:期望响应的消息
  • 通知:不期望响应的消息
  • 结果:对请求的成功响应
  • 错误:对请求的失败响应

传输

MCP支持多种传输机制:

  • 标准输入输出传输

    • 使用标准输入/输出进行通信
    • 适合本地进程
  • 带SSE的HTTP传输

    • 使用服务器发送事件进行服务器到客户端的消息
    • 使用HTTP POST进行客户端到服务器的消息

所有传输都使用JSON-RPC 2.0交换消息。

主机

主机是启动与服务器连接的应用程序(例如Claude Desktop)。

主机负责发现服务器的功能,并计划如何利用它们来解决最终用户问题。

协议的这部分相当模糊。然而,据我理解,预期是主机实现自定义路由逻辑。你可以在我早期的文章在对话式AI中实现工具功能中看到此类实现的示例。

开源组件

框架

这些是高级框架,使构建MCP服务器变得更容易。

SDK

生态系统

服务器

  • Filesystem - 具有可配置访问控制的安全文件操作
  • GitHub - 存储库管理、文件操作和GitHub API集成
  • Google Drive - Google Drive的文件访问和搜索功能
  • PostgreSQL - 具有模式检查的只读数据库访问
  • Slack - 频道管理和消息功能
  • Memory - 基于知识图谱的持久记忆系统
  • Puppeteer - 浏览器自动化和网页抓取
  • Brave Search - 使用Brave的搜索API进行网络和本地搜索
  • Google Maps - 位置服务、方向和地点详情
  • Fetch - 网络内容获取和转换,以高效使用LLM

社区服务器

  • MCP YouTube -- 使用yt-dlp从YouTube下载字幕。
  • mcp-security-scanner -- 一个用MCP插件构建的安全漏洞扫描器,用于分析JavaScript代码。
  • Cloudflare MCP Server -- 这是一个用于与Cloudflare服务交互的模型上下文协议(MCP)服务器。它为管理Cloudflare KV Store、R2 Storage、D1 Database、Workers和Analytics提供了统一的接口。
  • mcp-get -- 一个用于安装和管理模型上下文协议(MCP)服务器的命令行工具。

我们现在有一个基于网络的MCP服务器目录:glama.ai/mcp/servers
未来的更新将发布到github.com/punkpeye/aw...

早期采用和使用案例

几个组织和工具已经采用了MCP:

Sourcegraph Cody

来自Cody博客文章

这是Cody连接到Postgres数据库的示例,在查看数据库模式后编写Prisma查询:

Zed编辑器

来自Zed编辑器博客文章

这是使用Zed扩展程序来访问PostgreSQL的示例,以便立即向模型提供关于我们整个数据库模式的信息,这样当我们要求它为我们编写查询时,它确切地知道存在哪些表和列,以及它们的类型是什么。

Sourcegraph的博客文章中还有一个使用TypeScript和MCP构建Linear集成的示例

使用Claude Desktop测试MCP

Claude Desktop应用是测试MCP的最简单方法。

在文本编辑器中打开Claude Desktop应用配置文件:~/Library/Application Support/Claude/claude_desktop_config.json

~/Library/Application Support/Claude/claude_desktop_config.json在你的机器上可能不存在。你需要创建它。
~/Library/Application Support/Claude/config.json是一个不同的、不相关的文件。不要编辑它。

添加此配置:

perl 复制代码
{
  "mcpServers": {
    "brave_search": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "your-api-key"
      }
    }
  }
}

这告诉Claude Desktop:

  • 有一个名为brave_search的MCP服务器
  • 使用npx @modelcontextprotocol/server-brave-search启动它

保存文件,并重启Claude Desktop。

现在,你可以要求Claude Desktop"搜索网络"获取某些内容。

例如,尝试让Claude Desktop"搜索网络查找glama.ai"。

你首先会被提示允许Claude Desktop使用MCP:

![权限对话框](图片:要求Claude Desktop使用MCP)

点击"允许此次聊天"以允许Claude Desktop使用MCP。

之后,你将看到Claude Desktop使用Brave搜索MCP服务器来搜索网络查找"glama.ai"并获取结果。

替代方案

有几个解决与MCP相同问题的开源项目。

  • Web Applets -- 一个开放规范和SDK,用于创建代理可以使用的应用程序。

接下来是什么?

我预计MCP在获得HTTP传输支持之前不会得到广泛采用。

然而,我确实想象未来像Glama或Claude Desktop这样的通用LLM客户端将拥有MCP服务器市场,用户将能够将这些服务插入到他们的工作流程中。

局限性

目前使用MCP的实际应用很少。但随着时间推移,这种情况会改变。

至于Claude Desktop:

  • Claude Desktop应用中MCP服务器的设置过程目前是手动的。
  • 每次重新打开应用时,你都必须授予Claude Desktop使用MCP的权限。查看这个解决方法
  • MCP仅在本地支持(服务器必须在你自己的机器上运行)。
  • 大多数说明针对macOS。然而,这里有人成功在Windows上使用MCP

早期想法

我认为这是Anthropic的一个受欢迎的举措。然而,需要一些时间来看它是否会获得牵引力。

同时,我看好计算机使用成为AI驱动自动化的标准,包括MCP试图解决的所有问题。

有关MCP的问题?加入模型上下文协议Discord并在#general频道提问。

相关推荐
小雷FansUnion1 天前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
CoderLiu2 天前
用这个MCP,只给大模型一个figma链接就能直接导出图片,还能自动压缩上传?
前端·llm·mcp
吴佳浩2 天前
Python入门指南-AI番外-MCP完整教程:从零开始学会Model Context Protocol
人工智能·python·mcp
聚客AI2 天前
🚀拒绝试错成本!企业接入MCP协议的避坑清单
人工智能·掘金·日新计划·mcp
ZNineSun2 天前
MCP+Cursor入门
ai·cursor·mcp
大模型真好玩2 天前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(四)——微软GraphRAG代码实战
人工智能·python·mcp
源图客2 天前
MCP Chart Server服务本地部署案例
mcp
weixin_4250230012 天前
Spring Boot使用MCP服务器
服务器·spring boot·后端·spring ai·mcp
喜欢吃豆12 天前
快速手搓一个MCP服务指南(一):FastMCP 快速入门指南详解
网络·人工智能·python·深度学习·大模型·mcp
大模型真好玩12 天前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(二)——GraphRAG图谱构建详细步骤
人工智能·python·mcp