MCP协议是什么?JSON-RPC统一AI工具集成标准详解

MCP:一个“意外”统一AI工具的协议
零侵入式集成
AI Agent 开发者常被平台兼容性卡住:VS Code 扩展要学 LSP 和 Extension API,Chrome 插件得写 manifest.json 和 content script,本地工具又要搞 CLI 或 IPC。每个平台都像一道墙。
MCP(Machina Communication Protocol)没打算当救世主。它只是定义了一组极简的 JSON-RPC 调用约定——list-tools、call-tool、notify,加上一个 HTTP 或 stdio 传输层。结果 VS Code 的 mcp-server 扩展、Chrome 的 mcp-client 插件、还有 curl 命令行工具,都直接认它。没人牵头制定标准,但大家不约而同地往同一个接口上靠。
这不是“设计出来的统一”,是开发者用脚投票投出来的事实协议。
技术价值
零侵入,真零侵入
你不需要改 VS Code 源码,也不用给 Chrome 提 PR。只要启动一个进程监听 /mcp 端点(或通过 stdin/stdout),返回符合 MCP 规范的 JSON 响应,VS Code 就能发现你的工具、调用它、接收它的结果。
比如在 VS Code 里想让 AI Agent 读取当前文件内容,不用碰任何编辑器内部 API。你只管在 MCP Server 里实现一个 read-file 工具:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/mcp', methods=['POST'])
def mcp_endpoint():
req = request.json
if req['method'] == 'list-tools':
return jsonify({
'tools': [{
'name': 'read-file',
'description': 'Read contents of a file by path',
'input_schema': {'type': 'object', 'properties': {'path': {'type': 'string'}}}
}]
})
elif req['method'] == 'call-tool' and req['params']['name'] == 'read-file':
path = req['params']['input']['path']
try:
with open(path) as f:
content = f.read()
return jsonify({'result': content})
except Exception as e:
return jsonify({'error': str(e)})
if __name__ == '__main__':
app.run(port=5000)VS Code 自动把“当前文件路径”塞进 input,你只负责读文件、返回内容。编辑器逻辑、UI、权限模型——全由 VS Code 自己处理。
跨平台不是口号,是默认行为
MCP 不绑定操作系统、不绑定 GUI 工具包、不依赖 Node.js 或 Python 运行时。它只规定消息格式和传输方式。
所以:
- 你在 macOS 上用 Rust 写的 MCP Server,Chrome 插件能调;
- 你在 Linux 上跑的 Python Server,VS Code for Windows 能连;
- 你在 CI 里用 Bash 脚本模拟 MCP Server,
curl就能测试交互。
Firefox、Neovim、Obsidian、甚至本地 CLI 工具,只要愿意发 HTTP POST 或读写管道,就能接入。没有“适配层”,只有“照做”。
Server 端轻到可以扔进任意进程
MCP Server 不是框架,不是 SDK,不是中间件。它就是一个能收 JSON、能回 JSON 的端点。你可以用 Go 的 net/http、Rust 的 axum、Node 的 express,甚至用 socat 搭个管道代理。
轻量意味着:
- 启动快(毫秒级);
- 内存占用低(几十 KB);
- 可嵌入已有服务(比如你的 LangChain 应用进程里直接起一个
/mcp路由); - 出问题好排查(日志就一行
Received call-tool: read-file)。
对开发者的实际意义
快速验证想法,不写胶水代码
你想试试“AI 自动重构函数”?不用先啃 VS Code 文档三个月。写一个 MCP Server,暴露 refactor-function 工具,输入 AST 节点范围,输出新代码字符串。VS Code 自动把光标位置、当前文件内容传给你。核心逻辑写完,集成就完成了。
创业者不用从零建生态
Chrome Web Store 有 3 亿月活用户,VS Code Marketplace 有 6 万扩展。MCP 让你能直接站在这些用户基础上起步。
比如做“网页数据提取 Agent”:
- 用户装 Chrome MCP 插件(官方维护,一次安装,永久可用);
- 你只发布自己的 MCP Server(Docker 镜像 or 一键安装脚本);
- 用户打开插件设置,填入
http://localhost:5000/mcp; - 之后所有网页操作请求,都走你的 Server。
没有应用商店审核,不依赖平台分成,用户数据不出浏览器,你只管优化提取逻辑。
真实场景
代码编辑器里的“隐形协作者”
- AI 实时扫描整个 workspace,发现未使用的 import,触发
remove-import工具; - 你选中一段代码按快捷键,Agent 调用
explain-code工具,结果直接渲染在编辑器注释里; - 提交前自动运行
lint-diff工具,只检查本次修改的行。
所有动作都通过 MCP 调用,编辑器负责 UI、光标、文件系统权限;你只提供语义能力。
浏览器里的“确定性自动化”
不是 Selenium 那种靠 selector 硬拖的自动化。MCP 允许 Agent 直接操作浏览器上下文:
get-page-dom返回结构化 DOM 树(不是 HTML 字符串);fill-form接收字段名和值,由浏览器插件精准填充;download-attachment返回二进制流,Agent 可直接保存或解析。
银行登录、发票下载、竞品价格爬取——规则明确的操作,成功率接近 100%。
一条 Server,多端复用
你写一个基于 Llama 3 的本地知识库 Agent,暴露 query-knowledge-base 工具。
- VS Code 插件调它,查项目文档;
- Chrome 插件调它,查公司内部 Wiki;
- 终端里
curl -X POST http://localhost:5000/mcp -d '{"method":"query-knowledge-base","params":{"query":"如何配置 SSO?"}}'也能查。
Server 逻辑一份,部署一次,所有前端共享。
下一步,现在就能做
- 看懂协议:读 MCP Spec 的
protocol.md,重点看list-tools和call-tool的 JSON 结构; - 跑通最小闭环:用上面那段 Flask 代码,加一个
echo工具,用curl调通; - 连上 VS Code:装 MCP for VS Code 扩展,指向你的 Server;
- 换语言重写一次:用 Rust(
axum)或 Go(net/http)实现同样功能,体会无依赖的轻量; - 加一个真实工具:比如
git-diff-summary,用git diff --staged解析出变更点,返回自然语言摘要。