跳到正文

CrawlForge Team工程团队

阅读时长 10 分钟

MCP 协议详解:2026 开发者指南

如今每一款主流 AI 编码助手——Claude、Cursor、Windsurf、Cline——都支持一种连接外部工具的共享协议。这个协议就是 MCP,即 Model Context Protocol。如果你构建开发者工具、数据流水线或 AI 应用,理解 MCP 已不再是可选项。它是 LLM 与外部世界之间的标准接口。

本指南从零开始解释 MCP:它是什么、在架构上如何运作、为何重要,以及如何基于它进行构建。

目录

什么是 Model Context Protocol?

Model Context Protocol(MCP) 是由 Anthropic 创建的开放标准,它定义了 AI 助手如何与外部工具和数据源通信。MCP 于 2024 年 11 月发布,提供了一个通用接口,使任何 AI 客户端无需定制集成代码即可连接到任何兼容 MCP 的服务器。

可以把 MCP 看作 AI 工具的 USB。在 USB 出现之前,每个外设都需要自己的接口和驱动。MCP 为 AI 做了同样的事:它统一了工具如何描述自身能力、客户端如何发现它们,以及调用如何在两端来回流转。

关于 MCP 的关键事实:

  • 由 Anthropic 维护的开放规范
  • 受 Claude Code、Claude Desktop、Cursor、Windsurf、Cline 和 Zed 支持
  • 使用 JSON-RPC 2.0 作为消息格式
  • 支持两种传输机制:stdio(本地)和 HTTP+SSE(远程)
  • 服务器暴露三种原语:Tools、Resources 和 Prompts

MCP 为何存在

在 MCP 出现之前,把一个 AI 助手连接到外部工具需要:

  1. 为每个工具编写定制的 API 封装
  2. 手动为 LLM 定义函数 schema
  3. 处理鉴权、错误恢复和响应解析
  4. 为你想支持的每一个 AI 客户端重复这套工作

这种做法无法扩展。一个拥有 10 个工具和 3 个 AI 客户端的开发者将需要 30 个集成点。MCP 把它压缩为 10 个服务器和 3 个客户端——它们说着同一种协议。

实际结果是:工具作者编写一个 MCP server,它便随处可用。客户端作者实现一次 MCP,每个服务器便都可用。

MCP 架构:Client、Server、Transport

MCP 采用客户端-服务器架构,包含三个核心组件:

MCP Host

host 是用户直接交互的应用——Claude Desktop、Cursor 或自定义的 AI 应用。host 管理一个或多个 MCP 客户端连接,并在 LLM 与相应服务器之间路由工具调用。

MCP Client

client 是 host 内部的协议级组件,与单个 MCP server 保持 1:1 连接。它负责能力协商、工具发现和请求/响应的序列化。

MCP Server

server 通过 MCP 协议暴露工具、资源和提示。每个服务器都是一个独立进程,可以用任何语言编写。服务器在初始化握手期间声明自己能做什么。

传输层

MCP 支持两种传输机制:

传输用例连接延迟
stdio本地工具、CLI 集成进程管道(stdin/stdout)亚毫秒级
HTTP + SSE远程服务器、云端部署HTTP POST + Server-Sent Events取决于网络

stdio 传输用于像 CrawlForge 这样的本地 MCP server。host 把服务器作为子进程派生,并通过标准 I/O 流通信。这消除了网络开销,让一切都运行在开发者本机上。

HTTP+SSE 用于远程服务器。客户端通过 HTTP POST 发送 JSON-RPC 请求,并通过 Server-Sent Events 连接接收流式响应。

MCP 工具发现的工作原理

当一个 MCP 客户端连接到服务器时,它做的第一件事就是发现可用的工具。这通过 tools/list 方法完成:

Typescript
// The client sends a tools/list request
const request = {
  jsonrpc: '2.0',
  id: 1,
  method: 'tools/list',
  params: {}
};

// The server responds with its complete tool catalog
const response = {
  jsonrpc: '2.0',
  id: 1,
  result: {
    tools: [
      {
        name: 'fetch_url',
        description: 'Fetch content from a URL with optional headers and timeout',
        inputSchema: {
          type: 'object',
          properties: {
            url: { type: 'string', format: 'uri', description: 'The URL to fetch' },
            headers: { type: 'object', description: 'Custom HTTP headers' },
            timeout: { type: 'number', default: 10000 }
          },
          required: ['url']
        }
      },
      {
        name: 'extract_content',
        description: 'Extract and analyze main content from web pages',
        inputSchema: {
          type: 'object',
          properties: {
            url: { type: 'string', format: 'uri' }
          },
          required: ['url']
        }
      }
      // ... more tools
    ]
  }
};

AI 助手会读取这些工具描述和 schema,以理解每个工具的功能及其接受的参数。这正是为什么良好的工具描述如此重要——它们直接影响 LLM 选择工具和填写参数的效果。

MCP 工具调用的工作原理

一旦 LLM 决定使用某个工具,客户端就会发送一个 tools/call 请求:

Typescript
// Client sends a tool invocation request
const callRequest = {
  jsonrpc: '2.0',
  id: 2,
  method: 'tools/call',
  params: {
    name: 'fetch_url',
    arguments: {
      url: 'https://news.ycombinator.com',
      timeout: 5000
    }
  }
};

// Server executes the tool and returns results
const callResponse = {
  jsonrpc: '2.0',
  id: 2,
  result: {
    content: [
      {
        type: 'text',
        text: '<!DOCTYPE html><html>...' // Full HTML content
      }
    ]
  }
};

随后 LLM 会处理这个响应,并可以串联更多的工具调用。例如,在抓取一个页面之后,它可能调用 extract_content 来清洗 HTML,再调用 analyze_content 来提取关键主题。

MCP 与 REST API 的对比

开发者常问 MCP 与传统 REST API 相比如何。以下是直接对比:

维度MCPREST API
发现通过 tools/list 自动完成手动(读文档、写客户端代码)
Schema自描述(JSON Schema)OpenAPI 规范(独立文件)
鉴权由 host/传输层处理每个请求的 header/token
AI 集成原生——LLM 读取工具描述手动——开发者编写函数 schema
多工具工作流LLM 自主串联工具开发者编写编排逻辑
传输stdio 或 HTTP+SSE仅 HTTP

关键区别在于:MCP 让工具对 AI 原生友好。REST API 需要开发者阅读文档、编写客户端代码,并为 LLM 定义函数 schema。而 MCP server 会自我描述,AI 自行弄清楚如何使用它。

如需更深入的技术对比,请阅读我们的 MCP 与 REST 分析。

构建一个 MCP server

下面是一个用 官方 @modelcontextprotocol/sdk 编写的最简 TypeScript MCP server:

Typescript
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = new Server(
  { name: 'my-mcp-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
);

// Define a tool
server.setRequestHandler('tools/list', async () => ({
  tools: [{
    name: 'get_weather',
    description: 'Get current weather for a city',
    inputSchema: {
      type: 'object',
      properties: {
        city: { type: 'string', description: 'City name' }
      },
      required: ['city']
    }
  }]
}));

// Handle tool invocation
server.setRequestHandler('tools/call', async (request) => {
  if (request.params.name === 'get_weather') {
    const { city } = request.params.arguments as { city: string };
    // Fetch real weather data here
    return {
      content: [{ type: 'text', text: `Weather in ${city}: 22C, partly cloudy` }]
    };
  }
  throw new Error(`Unknown tool: ${request.params.name}`);
});

// Start the server on stdio
const transport = new StdioServerTransport();
await server.connect(transport);

这个服务器暴露了单个 get_weather 工具。当连接到 Claude Code 或 Cursor 时,AI 可以自动发现并调用它。

真实场景的 MCP 示例:网页抓取

CrawlForge 原生实现了 MCP,提供 31 个工具。当开发者请求 Claude 研究某个主题时,真实的交互如下:

用户提示:"研究排名前 5 的向量数据库并对比它们的定价。"

Claude 在幕后做的事:

  1. 调用 search_web 查找向量数据库对比页面
  2. 对前 3 个结果调用 extract_content 获取干净文本
  3. 调用 batch_scrape 抓取 Pinecone、Weaviate、Qdrant、Milvus 和 ChromaDB 的定价页面
  4. 调用 analyze_content 提取定价数据和功能对比
  5. 把所有内容综合成一份结构化对比

这些步骤中的每一步都使用了不同的 CrawlForge 工具,由 LLM 根据当下任务自动选择。开发者不需要编写任何集成代码。

这正是 MCP 的威力所在:协议负责发现,工具描述引导选择,AI 负责编排工作流。

2026 年的 MCP 生态

自协议发布以来,MCP 生态迅速壮大:

客户端(Host):

  • Claude Code 和 Claude Desktop(Anthropic)
  • Cursor(Anysphere)
  • Windsurf(Codeium)
  • Cline(VS Code 扩展)
  • Zed(编辑器)
  • 通过 SDK 构建的自定义应用

值得关注的 MCP server:

  • CrawlForge —— 31 个网页抓取与研究工具
  • GitHub MCP —— 仓库管理与代码搜索
  • Postgres MCP —— 数据库查询与 schema 探索
  • Filesystem MCP —— 文件操作与目录管理

SDK:

  • TypeScript/JavaScript:@modelcontextprotocol/sdk
  • Python:mcp 包
  • Rust、Go 和 Java 的社区实现

官方 MCP 规范 由 Anthropic 维护,并正朝着鉴权标准、能力协商和流式工具结果等特性演进。

常见问题

用简单的话说,MCP 是什么?

MCP(Model Context Protocol)是一种标准,让 Claude 这样的 AI 助手能够连接外部工具。它就像一个万能插头——任何会说 MCP 的 AI 客户端都能使用任何 MCP server,无需定制集成代码。工具自我描述,AI 自行弄清如何使用它们。

Model Context Protocol 是谁创建的?

Anthropic 创建了 MCP,并于 2024 年 11 月将其作为开放规范发布。该协议作为开放标准维护,并接受社区贡献。

哪些编程语言支持 MCP?

TypeScript/JavaScript 和 Python 有官方 SDK。Rust、Go、Java 和 C# 有社区实现。由于 MCP 在标准传输(stdio 或 HTTP)之上使用 JSON-RPC 2.0,任何能读写 JSON 的语言都可以实现一个 MCP server。

MCP 与 OpenAI 的函数调用有何不同?

OpenAI 的函数调用是 OpenAI API 专有的,要求开发者在每次 API 调用中手动定义函数 schema。MCP 则是一个开放协议,工具自我描述,可跨多个 AI 客户端工作(而不仅限于一家厂商),并在简单的函数调用之外支持持久连接、资源访问和提示模板。

CrawlForge 如何使用 MCP?

CrawlForge 构建为一个原生 MCP server。当你把它连接到 Claude Code 或 Cursor 时,AI 会自动发现全部 31 个抓取工具,并可根据自然语言请求调用它们。无需编写任何 API 封装代码。请在我们的 快速入门指南 中了解如何配置。


今天就构建你的第一个 MCP 集成。 免费开始,赠送 1,000 credits,在 60 秒内把 CrawlForge 连接到 Claude。

亲自试一试——无需注册

在 Playground 中探索全部 31 个 CrawlForge 抓取与提取工具,然后免费开始,获取 1,000 credits。

1,000 免费 credits • 一次性 • 无需信用卡

标签

  • mcp
  • model-context-protocol
  • ai-engineering
  • claude
  • protocol
  • developer-guide
  • tutorial

关于作者

CrawlForge Team

工程团队

我们正在打造功能最全面的 Web 抓取 MCP server。我们开发的工具帮助开发者为 AI 应用提取、分析和转换 Web 数据。

邮件订阅

及时获取最新洞察

将教程、产品更新与 Web 抓取技巧直接发送到你的收件箱。

拒绝垃圾邮件,随时可取消订阅。

FAQ

常见问题

01用简单的话说,Model Context Protocol(MCP)是什么?

MCP 是一种标准,让 Claude 这样的 AI 助手能够连接外部工具。它就像一个万能插头——任何会说 MCP 的 AI 客户端都能使用任何 MCP server,无需定制集成代码。工具自我描述,AI 自行弄清如何使用它们。

02Model Context Protocol 是谁创建的?

Anthropic 创建了 MCP,并于 2024 年 11 月将其作为开放规范发布。该协议作为开放标准维护,并接受社区贡献。

03MCP 与 OpenAI 的函数调用有何不同?

OpenAI 的函数调用是 OpenAI API 专有的,要求开发者在每次 API 调用中手动定义函数 schema。MCP 则是一个开放协议,工具自我描述,可跨多个 AI 客户端工作(而不仅限于一家厂商),并在简单的函数调用之外支持持久连接、资源访问和提示模板。

04CrawlForge 如何使用 MCP?

CrawlForge 构建为一个原生 MCP server。当你把它连接到 Claude Code 或 Cursor 时,AI 会自动发现全部 31 个抓取工具,并可根据自然语言请求调用它们。无需编写任何 API 封装代码。

继续阅读

相关文章

AI 工程

11 分钟

如何用网页数据构建 RAG 流水线

构建一个生产级 RAG 流水线:爬取网站、提取内容、对文本分块、生成 embedding,并提供检索增强的回答。