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 值得一试。


延伸阅读


如果你觉得这篇文章有帮助,欢迎在 DEV 上点赞和关注!

MCP #AI #LLM #Protocol