MCP 协议深度解析:让 AI 真正成为你的"同事"
title: "MCP 协议深度解析:让 AI 真正成为你的"同事"" description: "Model Context Protocol 不只是 API 封装,它是 AI 与世界对话的新方式" tags: [agent, 技能, 开发] canonical_url: null date: "2026-03-16"
MCP 协议深度解析:让 AI 真正成为你的"同事"
如果你还在用传统的 Function Calling,这篇文章可能会改变你的想法。
什么是 MCP?
Model Context Protocol(MCP)是 Anthropic 提出的一个开放标准,用于连接 AI 模型与外部工具。
听起来和 Function Calling 差不多?别急,往下看。
为什么我们需要 MCP?
传统 Function Calling 的痛点
// 你可能是这样写的
const tools = [
{
name: "search",
description: "搜索网页",
parameters: {
query: { type: "string", description: "搜索关键词" }
}
}
];
// 然后调用
const response = await openai.chat.completions.create({
model: "gpt-4",
messages: messages,
tools: tools
});
问题来了: 1. 每个模型有自己的工具格式 - OpenAI、Anthropic、Google 各搞各的 2. 工具定义分散 - 你的 AI 要用 10 个工具,就要维护 10 份定义 3. 没有标准化的资源访问 - 文件、数据库、API...每个都要单独写
MCP 的解决方案
MCP 把这些问题抽象成了三个核心概念:
| 概念 | 说明 | 类比 |
|---|---|---|
| Resources | 可读取的数据 | 文件、数据库记录 |
| Prompts | 预定义的模板 | 系统提示词 |
| Tools | 可执行的操作 | API 调用、文件操作 |
实战:搭建一个 MCP Server
让我们来搭建一个简单的 MCP Server,连接你的本地文件系统。
Step 1: 安装依赖
# 使用 Node.js
npm install @modelcontextprotocol/sdk
# 或者 Python
pip install mcp
Step 2: 创建 Server
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Resource, Tool
# 创建一个简单的文件读取 MCP Server
server = Server("my-file-server")
@server.resource("file://{path}")
async def read_file(path: str) -> str:
"""读取文件内容"""
with open(path, 'r') as f:
return f.read()
@server.tool()
async def list_files(directory: str) -> list:
"""列出目录下的所有文件"""
import os
return os.listdir(directory)
# 启动 Server
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream)
Step 3: 连接到 AI Client
现在你可以在 Claude Desktop 或其他支持 MCP 的客户端中使用这个 Server 了。
MCP vs Function Calling:对比总结
| 维度 | Function Calling | MCP |
|---|---|---|
| 标准化 | 每个模型不同 | 统一标准 |
| 工具复用 | 需要重新定义 | 一次编写,到处使用 |
| 资源访问 | 需要自己实现 | 内置支持 |
| 调试 | 困难 | 标准化的调试工具 |
| 生态系统 | 各自为战 | 共享工具库 |
真实案例:Notion MCP Challenge
最近 DEV 社区举办了 Notion MCP Challenge,奖金 $1,500。
参赛者用 MCP 连接 Notion API,让 AI 能够: - 读取和创建 Notion 页面 - 搜索数据库 - 自动整理笔记
这就是 MCP 的真正威力:让 AI 成为 Notion 的"原生用户",而不是通过 API 调用的"外来者"。
进阶:MCP 的最佳实践
1. 工具命名要清晰
# 不好
@server.tool()
async def get(id: str) -> dict:
pass
# 好
@server.tool()
async def get_user_by_id(user_id: str) -> dict:
"""根据用户 ID 获取用户信息"""
pass
2. 提供有意义的描述
@server.tool()
async def search(query: str, limit: int = 10) -> list:
"""
搜索知识库中的文档
Args:
query: 搜索关键词,支持模糊匹配
limit: 返回结果数量,默认10条
Returns:
匹配的文档列表,每个文档包含标题、内容和相关性分数
"""
pass
3. 合理使用 Resources
# 对于静态或低频变化的数据,用 Resources
@server.resource("config://{name}")
async def get_config(name: str) -> dict:
"""读取配置文件"""
return load_config(name)
# 对于需要执行操作的场景,用 Tools
@server.tool()
async def update_config(name: str, value: dict) -> bool:
"""更新配置文件"""
return save_config(name, value)
生态现状
目前支持 MCP 的项目正在快速增长:
| 项目 | 类型 | 说明 |
|---|---|---|
| Claude Desktop | Client | Anthropic 官方客户端 |
| Zed | IDE | 内置 MCP 支持 |
| OpenAI | Provider | 正在评估支持 |
| mcp.so | Directory | MCP Server 目录 |
总结
MCP 不是又一个"API 封装层",它是 AI 与工具交互的标准化协议。
如果你的 AI 应用需要: - 连接多种数据源 - 执行复杂操作 - 在不同模型间切换
那么 MCP 值得一试。
延伸阅读
- MCP 官方文档
- Anthropic MCP 介绍
- 妙趣AI - AI工具导航 - 发现更多 AI 工具和教程
如果你觉得这篇文章有帮助,欢迎在 DEV 上点赞和关注!