AI 世界的 USB-C 接口

为什么需要 MCP

上一篇我们自己写工具给 Agent 用。但想想这个场景:

  • 你想让 Cursor 能访问你的 Notion
  • 你想让 Claude Desktop 能查你的日历
  • 你想让 ChatGPT 能操作你的数据库

**每个应用都要手写一套集成?**太痛苦。就像 2000 年代每个外设都有自己专属接口那样混乱。

**MCP(Model Context Protocol)**是 Anthropic 在 2024 年底推出的开放协议(官方规范),目标非常明确:

提供一套统一的接口,让任何 LLM 应用都能即插即用地连接任何工具/数据源。

换句话说:MCP 就是 AI 时代的 USB-C

MCP 的架构

┌─────────────────┐        MCP         ┌─────────────────┐
│  Host(主机)   │ ◄─────────────────► │  Server(服务) │
│                 │  (JSON-RPC over    │                 │
│ Claude Desktop  │   stdio / SSE /    │  GitHub MCP     │
│ Cursor          │   HTTP)            │  Slack MCP      │
│ ChatGPT Apps    │                    │  Postgres MCP   │
│ 你自己的应用    │                    │  自定义 MCP     │
└─────────────────┘                    └─────────────────┘

-Host:集成 LLM 的应用(Claude Desktop、Cursor 等),或你自己开发的应用 -Server:实现某个能力的进程,通过标准协议暴露工具/资源/提示词 -协议:JSON-RPC 2.0,有 stdio(本地进程)和 HTTP(+SSE) 两种传输方式

MCP 暴露的三类东西

一个 MCP Server 可以提供:

类型作用类比
Tools可调用的函数上一篇讲的 Function Calling
Resources可读的数据(文档、文件、数据库记录)REST 的 GET
Prompts预设的 Prompt 模板快捷指令

实战:5 分钟写一个 MCP Server

用官方的 TS SDK,非常简单。

npm init -y
npm i @modelcontextprotocol/sdk zod
// server.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { z } from 'zod'

const server = new McpServer({
  name: 'my-notes',
  version: '1.0.0',
})

// 注册一个 Tool
server.tool(
  'search_notes',
  { query: z.string().describe('搜索关键字') },
  async ({ query }) => {
    // 你的业务逻辑
    const results = await searchMyNotes(query)
    return {
      content: [{ type: 'text', text: JSON.stringify(results) }],
    }
  }
)

// 注册一个 Resource
server.resource(
  'note',
  new ResourceTemplate('notes://{id}', { list: undefined }),
  async (uri, { id }) => ({
    contents: [{
      uri: uri.href,
      text: await readNote(id),
    }],
  })
)

// 以 stdio 方式启动
await server.connect(new StdioServerTransport())

编译运行:

tsc server.ts
node server.js

这个 Server 就准备好了,等 Host 通过 stdin/stdout 和它通信。

连上 Claude Desktop

在 Claude Desktop 的配置文件里加:

{
  "mcpServers": {
    "my-notes": {
      "command": "node",
      "args": ["/path/to/server.js"]
    }
  }
}

重启后,Claude 就能看到并调用 search_notes 工具了。你在 Claude 里聊天时,它能搜索你的私人笔记

连上你自己的应用

如果你不是给 Claude 用,而是给自己的 Agent 用,也一样:

import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'

const client = new Client({ name: 'my-app', version: '1.0' })
await client.connect(new StdioClientTransport({
  command: 'node',
  args: ['./mcp-servers/notes.js'],
}))

// 列出这个 Server 提供的所有工具
const { tools } = await client.listTools()

// 调用工具
const result = await client.callTool({
  name: 'search_notes',
  arguments: { query: 'React' },
})

然后把这些工具喂给你的 LLM(转成 OpenAI Function Calling 的格式)。

现成的 MCP Server 生态

这是 MCP 最大的优势——拿来即用。官方和社区已经有大量 Server:

  • @modelcontextprotocol/server-filesystem — 文件系统
  • @modelcontextprotocol/server-github — GitHub
  • @modelcontextprotocol/server-postgres — Postgres 查询
  • @modelcontextprotocol/server-puppeteer — 浏览器自动化
  • @modelcontextprotocol/server-brave-search — Brave 搜索
  • 社区:Slack、Notion、Linear、Jira、Figma、Obsidian……

完整列表:github.com/modelcontextprotocol/servers

和 Function Calling 的关系

它们不是竞争关系,而是不同层次

方面Function CallingMCP
谁定义应用开发者协议标准
部署工具代码在应用里工具在独立进程
复用应用间不共享一个 Server 多应用复用
运行时进程内调用跨进程 RPC

一个典型架构是:

[Agent] ──Function Calling──► [MCP Client]


                            [MCP Server × N]

Agent 用 Function Calling 的方式看,底层走 MCP 真正执行。

MCP 的未来

截至 2026 年:

-Claude Desktop / Cursor / Windsurf全部原生支持 -OpenAI也宣布支持(2025 年初) -ChatGPT Apps基于 MCP 构建

  • 几乎所有主流 IDE、Agent 框架都在加入

这意味着一件事:如果你要给 AI 开发工具,首选 MCP。写一次,所有 Host 都能用。

前端/全栈开发者的机会

1. 给现有 SaaS 做 MCP Server Slack/Notion/你家公司内部系统……谁先做谁抢占生态位。

2. 构建 MCP Host 自己做一个 AI 应用,天然支持所有现有 Server。

3. 浏览器插件 + MCP Chrome 扩展 + MCP Server 让 AI 能操作当前页面。

4. MCP 市场/管理平台 类似 npm 那样的工具发布和管理平台。

动手作业

给你自己的博客写一个 MCP Server:

  • Tool: search_posts(query) — 全文搜索
  • Tool: get_post(slug) — 读取某篇
  • Resource: blog://posts/{slug} — 文章资源
  • 接到 Claude Desktop,在 Claude 里问自己博客的问题

参考资料

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:MCP 协议:Agent 的通用接口

本文链接:https://www.sshipanoo.com/blog/ai/ai-for-frontend/08-MCP协议/

本文最后一次更新为 天前,文章中的某些内容可能已过时!