模型上下文协议 (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频道提问。

相关推荐
“负拾捌”7 小时前
基于NodeJs实现一个MCP客户端(会话模式和无会话模式)
javascript·ai·node.js·大模型·mcp
华为云开发者联盟2 天前
【新特性】 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年10月发布)
人工智能·华为云开发者联盟·ai agent·mcp·华为云versatile
字节跳动安全中心2 天前
开源!可信MCP,AICC机密计算新升级!
安全·llm·mcp
大模型真好玩2 天前
低代码Agent开发框架使用指南(六)—Coze 变量与长期记忆
人工智能·coze·mcp
字节跳动开源2 天前
开源可信MCP,AICC机密计算新升级!
mcp
数据智能老司机2 天前
使用 Python 入门 Model Context Protocol(MCP)——深入解析模型上下文协议(MCP)
llm·agent·mcp
YUELEI1182 天前
Mcp 基础
mcp
大模型真好玩4 天前
LangGraph实战项目:从零手搓DeepResearch(四)——OpenDeepResearch源码解析与本地部署
人工智能·agent·mcp
昭昭日月明4 天前
🚀 告别手动调试,Chrome DevTools MCP 推荐
ai编程·mcp