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 Calling | MCP |
|---|---|---|
| 谁定义 | 应用开发者 | 协议标准 |
| 部署 | 工具代码在应用里 | 工具在独立进程 |
| 复用 | 应用间不共享 | 一个 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 里问自己博客的问题
参考资料
- MCP 官方文档 — 协议规范、教程
- MCP TypeScript SDK
- 官方 Server 集合 — 拿来即用
- Awesome MCP Servers — 社区列表
- Anthropic: Introducing MCP — 发布公告
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:MCP 协议:Agent 的通用接口
本文链接:https://www.sshipanoo.com/blog/ai/ai-for-frontend/08-MCP协议/
本文最后一次更新为 天前,文章中的某些内容可能已过时!