2628 字
13 分钟
MCP 协议:AI Agent 的"USB-C 接口"是如何统一工具调用标准的

AI 圈的”USB-C 时刻”到了#

你有多少个充电器?USB-C 出现之前,每个设备都有自己的充电口——Micro-USB、Lightning、Mini-USB、各种奇奇怪怪的圆形接口……出门不带三根线你都不好意思说自己是个数码博主。

AI Agent 的世界在 2025 年之前也是这个状态。每个 AI 框架都有自己的工具调用方式——LangChain 的工具接口长这样,OpenAI Function Calling 长那样,Claude 的 tool use 又是另一种格式。开发者想对接一个数据库,需要为每个框架写一套适配器。

2026 年,这个混乱的局面终于被 MCP(Model Context Protocol) 终结了。

MCP 到底是什么?#

MCP 是 Anthropic 提出的开放协议,全称 Model Context Protocol。它的目标是成为 AI 代理与外部工具之间的通用接口层——就像 USB-C 统一了充电和数据传输一样,MCP 统一了 AI 的工具调用方式。

你只需要把工具包装成一个 MCP 服务器,任何支持 MCP 的 AI 代理都能直接使用它,不管背后是 Claude、GPT 还是 Gemini。

// MCP Server 示例:一个简单的数据库查询工具
import { Server } from '@modelcontextprotocol/sdk'
import { Database } from 'libsql'
const server = new Server('database-agent', {
capabilities: {
tools: {
// 注册工具
query_database: {
description: '对数据库执行 SQL 查询',
parameters: {
type: 'object',
properties: {
sql: { type: 'string', description: 'SQL 查询语句' },
params: {
type: 'array',
items: { type: 'string' },
description: 'SQL 参数(可选)'
}
},
required: ['sql']
},
// 工具的实现逻辑
handler: async ({ sql, params }) => {
const db = new Database('file:./local.db')
const result = await db.execute(sql, params ?? [])
return {
content: [{
type: 'text',
text: JSON.stringify(result.rows, null, 2)
}]
}
}
}
}
}
})
// 启动 MCP 服务器
server.listen(3001)

2026 年 MCP 生态的关键进展#

1. Chrome DevTools MCP:浏览器调试进入 AI 时代#

Google 官方发布的 chrome-devtools-mcp 是今年最受关注的 MCP 实现之一。它把 Chrome DevTools 的能力包装成了 MCP 工具,让 AI 代理可以直接控制浏览器:

// 使用 Chrome DevTools MCP 进行自动化调试
import { ChromeDevToolsMCP } from 'chrome-devtools-mcp'
const devtools = new ChromeDevToolsMCP({
port: 9222,
headless: true
})
// AI 代理可以执行的操作
const tools = {
// 捕获页面截图
screenshot: async (url: string) => {
await devtools.navigate(url)
return devtools.captureScreenshot()
},
// 检查网络请求
networkLogs: async () => {
return devtools.getNetworkRequests()
},
// 分析性能
performance: async () => {
return devtools.runLighthouse()
},
// 控制台错误捕获
consoleErrors: async () => {
return devtools.getConsoleMessages('error')
}
}

想象一下这个场景:你让 AI 代理”帮我排查一下首页为什么加载这么慢”——它自己打开 Chrome DevTools,跑 Lighthouse,分析网络瀑布图,然后告诉你”图片没做懒加载,第三方的 SDK 阻塞了渲染”。

2. Claude Context:为 RAG 注入 MCP 能力#

Zilliz 开源的 claude-context 项目是基于 MCP 构建的上下文引擎。它通过 MCP 协议连接向量数据库、文件系统和外部 API,让 AI 代理能够自动检索和组织上下文信息。

Terminal window
# 安装 claude-context MCP 服务器
$ npx @zilliztech/claude-context serve
# 启动后自动注册 MCP 工具
# AI 代理可以调用以下能力:
# - context.search(query) → 在向量数据库中搜索相关信息
# - context.index(path) → 索引本地文件
# - context.summarize(text) → 对长文本进行摘要

这个项目在 GitHub 上单日新增超过 1,000 星,说明开发者对”让 AI 更好地管理上下文”的需求非常强烈。

3. 数据库、文件系统、云服务——全面 MCP 化#

2026 年,几乎所有主流的开发工具都提供了 MCP 接口。从 PostgreSQL 到 Redis,从 AWS 到 GCP,从 GitHub 到 JIRA——你只要能想到的工具,大概率已经有人写了对应的 MCP 服务器。

Terminal window
# 一条命令启动 PostgreSQL MCP 服务器
$ npx @mcp/postgres serve postgresql://localhost:5432/mydb
# 然后在 Claude Code 中直接对话:
# "帮我查一下最近一周的用户注册量"
# AI 自动连接 PostgreSQL → 执行 SQL → 返回结果
# 或者结合多个 MCP 服务器:
# "把上个月的销售数据从 PostgreSQL 导出到 Google Sheets"
# AI 自动调用 postgres MCP 查询数据 → 调用 google-sheets MCP 写入

MCP 的工作原理#

MCP 采用的是客户端-服务器架构。AI 代理(如 Claude Code)作为 MCP Client,各种工具和外部服务作为 MCP Server,通过 JSON-RPC 协议进行通信。

┌─────────────────┐ JSON-RPC ┌─────────────────┐
│ │ ◄──────────────► │ │
│ MCP Client │ │ MCP Server │
│ (Claude Code) │ │ (PostgreSQL) │
│ │ │ │
└─────────────────┘ └─────────────────┘
│ │
│ MCP 协议定义了: │
│ 1. 工具发现(list_tools) │
│ 2. 工具调用(call_tool) │
│ 3. 资源访问(read_resource) │
│ 4. 提示模板(get_prompt) │
└──────────────────────────────────────┘

关键的是,MCP 协议是双向流式的——服务器可以主动推送数据给客户端,不需要客户端轮询。这对实时场景(比如监控系统告警、数据库变更通知)非常关键。

动手写一个 MCP 服务器#

理论说了这么多,不如上手写一个。下面是一个完整的 MCP 服务器示例,它包装了 GitHub API,让 AI 代理可以直接查询 Issue 和 PR 状态:

import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { z } from 'zod'
// 定义 GitHub MCP 服务器
const server = new Server(
{ name: 'github-agent', version: '1.0.0' },
{ capabilities: { tools: {} } }
)
// 注册工具:获取 Issue 详情
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params
switch (name) {
case 'get_issue': {
const { owner, repo, issueNumber } = args as {
owner: string, repo: string, issueNumber: number
}
const res = await fetch(
`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}`,
{ headers: { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` } }
)
const issue = await res.json()
return {
content: [{
type: 'text',
text: `## ${issue.title}\n\n**状态**: ${issue.state}\n**标签**: ${issue.labels.map(l => l.name).join(', ')}\n\n${issue.body}`
}]
}
}
case 'list_open_prs': {
const { owner, repo } = args as { owner: string, repo: string }
const res = await fetch(
`https://api.github.com/repos/${owner}/${repo}/pulls?state=open`,
{ headers: { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` } }
)
const prs = await res.json()
const prList = prs.map(pr =>
`- [#${pr.number}] ${pr.title} (@${pr.user.login})`
).join('\n')
return {
content: [{ type: 'text', text: `## 开放的 PR\n\n${prList}` }]
}
}
}
})
// 通过标准输入输出连接
const transport = new StdioServerTransport()
await server.connect(transport)
console.error('GitHub MCP Server running on stdio')

启动这个服务器后,任何支持 MCP 的 AI 代理都可以直接执行 get_issuelist_open_prs 操作——不需要额外的适配器或插件。

Terminal window
# 启动 MCP 服务器
$ node github-mcp-server.mjs
# 在 Claude Code 的 MCP 配置中添加
# ~/.claude/mcp_config.json
{
"mcpServers": {
"github": {
"command": "node",
"args": ["./github-mcp-server.mjs"],
"env": {
"GITHUB_TOKEN": "ghp_xxxx"
}
}
}
}
# 现在 Claude Code 可以直接操作 GitHub
# > "帮我把这个 repo 开放的 PR 列出来"
# > "看看 issue #42 的讨论进展"

MCP vs Function Calling:有什么本质区别?#

很多人会问:“MCP 和 OpenAI 的 Function Calling 有什么区别?不都是让 AI 调用工具吗?”

好问题。区别在于协议的开放性和标准化程度

OpenAI 的 Function Calling 是 OpenAI API 的一部分——你用 GPT 模型的时候可以用,但换到别的模型就不行了。而且每个提供商的函数调用格式都不一样:OpenAI 的格式、Anthropic 的 tool use 格式、Google 的 function_declaration 格式……开发者为不同模型对接同一工具,需要写 N 套适配代码。

MCP 的答案是:不管你是哪个模型,不管你是哪个框架,都使用同一个协议。 任何实现了 MCP Client 的 AI 代理都可以连接任何 MCP Server。

// 使用 MCP Client 连接任意 MCP Server
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
const transport = new StdioClientTransport({
command: 'node',
args: ['./db-mcp-server.mjs']
})
const client = new Client(
{ name: 'my-agent', version: '1.0.0' },
{ capabilities: {} }
)
await client.connect(transport)
// 发现可用工具
const { tools } = await client.listTools()
console.log('可用工具:', tools.map(t => t.name))
// 输出: ['query_database', 'analyze_slow_queries', 'create_index']
// 调用工具
const result = await client.callTool({
name: 'query_database',
arguments: {
sql: 'SELECT COUNT(*) FROM users WHERE created_at > NOW() - INTERVAL 7 DAY'
}
})

这套代码不依赖于具体的 AI 模型。你可以在 Claude Code 里用,也可以在自己的 Agent 框架里用,甚至可以用在 Jupyter Notebook 里做交互式数据分析。工具和模型彻底解耦了。

MCP 的传输层选择#

MCP 支持多种传输方式,适应不同的部署场景:

传输方式适用场景示例
stdio本地进程通信(最常用)Claude Code 启动一个子进程
SSE远程服务器通信团队共享的 MCP 网关服务
WebSocket双向实时通信监控系统推送告警
HTTP简单的请求-响应REST API 风格的调用

对于本地开发来说,stdio 是最常见的方式——MCP 服务器作为一个子进程运行,通过标准输入输出与 AI 代理通信。这种方式零配置、零网络开销。

Terminal window
# 2026 年 Claude Code 自动发现的 MCP 配置
# 放在 ~/.claude/mcp_config.json 中
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-filesystem", "."],
# 允许 AI 代理直接读写文件
},
"git": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-git"],
# 允许 AI 代理执行 git 操作
},
"terminal": {
"command": "deno",
"args": ["run", "-A", "https://mcp.example.com/terminal.ts"],
# 允许 AI 代理执行终端命令(需谨慎!)
}
}
}

配置好之后,Claude Code 就自动获得了文件系统操作、Git 操作和终端命令执行的能力——全都不需要你手动安装插件或配置 API。

现实世界中的应用案例#

MCP 在 2026 年已经被广泛应用于生产环境。以下是一些真实场景:

金融合规:Anthropic 开源的 financial-services 仓库包含完整的 MCP 集成示例,AI 代理可以通过 MCP 连接 Bloomberg Terminal、查询交易记录、生成合规报告。

数据库运维:通过 PostgreSQL MCP 服务器,AI 代理可以直接执行 EXPLAIN ANALYZE 分析慢查询,然后自动推荐索引优化方案。

Terminal window
# 开发者对 AI 说:
# "帮我看看生产数据库为什么今天特别慢"
#
# AI 代理自动执行的操作:
# 1. 通过 MCP 连接到 PostgreSQL
# 2. 执行 pg_stat_activity 查看当前连接数
# 3. 执行 EXPLAIN ANALYZE 分析慢查询
# 4. 检查索引使用情况和表膨胀程度
# 5. 返回诊断结果和优化建议

总结#

MCP 协议是 2026 年 AI 工具生态中最重要的基础设施之一。它解决了 AI Agent 与外部工具之间的”最后一公里”问题,让开发者可以一次开发,到处运行——你写一个 MCP 服务器,所有主流的 AI 代理都能直接使用。

如果你在构建 AI 相关的工具或服务,强烈建议你优先实现 MCP 接口。这不仅能让你的工具被更多的 AI 代理使用,也能让你站在 AI 工具生态的标准制定者这一边。毕竟——谁掌握了接口标准,谁就掌握了生态的入口。

MCP 协议:AI Agent 的"USB-C 接口"是如何统一工具调用标准的
https://www.oferry.com/posts/a133/
作者
晨平安
发布于
2026-06-04
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00