MCP协议到底是什么?为什么2026年所有AI工具都在用它

如果你最近半年用过任何AI编程工具,你大概率已经跟MCP打过交道了——虽然你可能没注意到。

Cursor在你写代码的时候,背后调用文件系统、数据库、Git,走的就是MCP。Claude Code连你的终端、浏览器、项目目录,用的也是MCP。甚至连Dify、Coze这些低代码平台,最近几个月也在疯狂接入MCP server。

这个协议是Anthropic在2024年底提出的,当时没多少人当回事。到了2026年中,它已经变成了AI工具调用的事实标准。我花了两周时间研究它的设计、实现和生态,今天把理解写出来。

MCP解决了什么问题

先说背景。AI大模型本身只会"说话"——你给它文字,它回你文字。但实际使用中,我们希望AI能做事情:读文件、查数据库、调API、操作浏览器。

在MCP之前,每个AI工具都有自己的"工具调用"方式。OpenAI定义了function calling,Google有自己的tool use格式,LangChain搞了一套tool抽象,CrewAI又搞了一套。结果就是:你写了一个能让AI查天气的工具,想在Cursor里用?得适配一次。想在Claude里用?再适配一次。想在自己的Agent框架里用?又得适配一次。

这就好比每个手机厂商都用不同的充电接口。你的充电器能用,但换个手机就得买新的。

MCP做的事情就是定义一个统一的接口。工具提供方按照MCP标准把自己的能力暴露出来(叫"MCP server"),AI应用按照MCP标准去调用(叫"MCP client")。这样,一个工具写一次,所有支持MCP的AI应用都能直接用。

MCP的技术架构

MCP的架构不复杂。它定义了三种能力:

Resources:数据源。比如文件内容、数据库记录、API返回的数据。AI可以读取这些资源作为上下文。

Tools:操作。比如发送邮件、创建文件、执行SQL。AI可以调用这些工具执行动作。

Prompts:预定义的提示词模板。这个用得相对少一些,主要用于标准化某些常见任务的交互方式。

通信方式有两种:stdio(标准输入输出)和HTTP SSE(Server-Sent Events)。stdio适合本地工具,比如让AI读你电脑上的文件。HTTP适合远程服务,比如让AI调用云端的数据库。

# 一个最简单的MCP server示例(Python)
from mcp.server import Server
import mcp.types as types

server = Server("weather-server")

@server.list_tools()
async def list_tools():
    return [
        types.Tool(
            name="get_weather",
            description="查询指定城市的天气",
            inputSchema={
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"}
                },
                "required": ["city"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name, arguments):
    if name == "get_weather":
        city = arguments["city"]
        # 这里调真实的天气API
        return [types.TextContent(
            type="text",
            text=f"{city}今天晴,25°C,东南风3级"
        )]

这段代码定义了一个天气查询工具。任何支持MCP的AI应用——Cursor、Claude Code、Claude Desktop——都能直接调用它。你不需要为每个应用写适配代码。

为什么是MCP赢了

说实话,MCP在技术上并没有什么革命性突破。OpenAI的function calling也能做类似的事。那为什么MCP成了事实标准?

我觉得有三个原因。

第一,开放性。MCP从一开始就是开源的,规范文档公开,任何人都可以实现自己的MCP server和client。OpenAI的function calling虽然也好用,但它绑定在OpenAI的API上。你想用Claude的模型?对不起,格式不一样。MCP跟模型无关,你底层用什么模型都行。

第二,Anthropic自己先用起来了。Claude Code在2025年初就全面支持MCP,而且Anthropic官方维护了一批高质量的MCP server(文件系统、Git、数据库、浏览器等)。这些server不是demo,是真的能用在生产环境里的。有了"官方参考实现",社区跟进就快了。

第三,时机对了。2025年下半年到2026年上半年,正好是AI Agent从概念落地到实际产品的窗口期。大家都在找一个标准的工具调用方案,MCP刚好在对的时间提供了对的东西。

MCP生态现在什么样

截至2026年6月,MCP的生态已经相当丰富了。几个数字:

GitHub上搜索"MCP server",有超过8000个仓库。官方的modelcontextprotocol/servers仓库收录了约100个高质量server,涵盖数据库(PostgreSQL、MySQL、SQLite)、版本控制(Git、GitHub、GitLab)、文件系统、浏览器自动化、云服务(AWS、GCP、Azure)等。

社区贡献的server更多。有人做了微信MCP server,让AI能读微信聊天记录。有人做了Spotify MCP server,让AI能控制音乐播放。有人做了Home Assistant MCP server,让AI能控制智能家居。甚至有人做了魔兽世界的MCP server——虽然我不确定这有什么实际用途。

在客户端侧,支持MCP的AI应用已经遍地开花:

应用 MCP支持情况
Claude Code 全面支持,原生集成
Cursor 支持,通过.mcp.json配置
VS Code + Copilot 2026年3月起支持
Windsurf 支持
Dify 支持,可视化配置
Coze 支持
OpenAI Agents SDK 2026年4月起支持

连OpenAI都开始支持MCP了,这基本说明大局已定。

怎么自己写一个MCP server

如果你有自己的数据源或工具,想让AI能调用,写一个MCP server其实很简单。以Python为例,装一个mcp包就够了。

# 安装
pip install mcp

# 一个实际的例子:让AI能查你的待办事项
import json
from mcp.server import Server
from mcp.server.stdio import stdio_server
import mcp.types as types

server = Server("todo-server")

# 读取待办事项数据文件
TODO_FILE = "/path/to/todos.json"

def load_todos():
    try:
        with open(TODO_FILE, 'r') as f:
            return json.load(f)
    except FileNotFoundError:
        return []

@server.list_tools()
async def list_tools():
    return [
        types.Tool(
            name="list_todos",
            description="列出所有待办事项",
            inputSchema={"type": "object", "properties": {}}
        ),
        types.Tool(
            name="add_todo",
            description="添加一条待办事项",
            inputSchema={
                "type": "object",
                "properties": {
                    "content": {"type": "string", "description": "待办内容"},
                    "priority": {"type": "string", "enum": ["high", "medium", "low"]}
                },
                "required": ["content"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name, arguments):
    if name == "list_todos":
        todos = load_todos()
        return [types.TextContent(type="text", text=json.dumps(todos, ensure_ascii=False))]
    elif name == "add_todo":
        todos = load_todos()
        todos.append({
            "content": arguments["content"],
            "priority": arguments.get("priority", "medium"),
            "done": False
        })
        with open(TODO_FILE, 'w') as f:
            json.dump(todos, f, ensure_ascii=False, indent=2)
        return [types.TextContent(type="text", text="已添加")]

async def main():
    async with stdio_server() as (read, write):
        await server.run(read, write, server.create_initialization_options())

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

然后在Cursor的.cursor/mcp.json或者Claude Desktop的配置文件里加上这个server的路径,AI就能直接调用了。

整个过程不超过30分钟。如果你有内部系统(CRM、ERP、工单系统),写一个MCP server让AI能直接查询和操作,比自己从零搭一个Agent系统快得多。

MCP的局限

MCP不是万能的。几个实际问题:

安全问题。MCP server如果暴露了敏感操作(比如删除数据、转账),AI可能会在不恰当的时候调用。目前MCP规范里的权限控制还比较粗糙,主要靠客户端侧的确认机制。在生产环境用,你得自己加鉴权和审计。

性能问题。每个MCP server是一个独立进程(stdio模式)或独立服务(HTTP模式)。如果你同时挂了20个MCP server,启动时间和内存占用都不小。我在一个项目里同时用了15个server,Claude Code的启动时间从2秒变成了15秒。

质量参差不齐。社区贡献的MCP server质量差距很大。有些写得很规范,错误处理完善,文档清楚。有些基本就是个demo,跑起来各种bug。用之前最好看看star数和最近更新时间。

对开发者意味着什么

如果你是开发者,MCP的影响是这样的:

第一,你写的工具能被更多AI应用调用了。以前你写了一个数据库查询工具,只能在自己框架里用。现在你把它封装成MCP server,Cursor、Claude Code、VS Code的用户都能直接用。分发渠道一下子打开了。

第二,"AI能调用什么"这件事正在标准化。以前每个AI应用的工具调用方式都不一样,开发者要适配很多种格式。现在有了MCP,你只需要适配一种格式。这降低了AI工具生态的碎片化。

第三,AI应用的"能力边界"在快速扩展。有了MCP,AI能做的事情不再局限于文本生成。它能读你的代码库、查你的数据库、操作你的浏览器、控制你的智能家居。这个边界还在不断扩大。

如果你想快速体验不同模型在MCP场景下的表现,可以用SevenFa的操练场,支持GPT-4o、Claude、DeepSeek等多个模型切换,测试不同模型在工具调用场景下的差异。

接下来会发生什么

MCP规范目前是0.6版本,还在快速迭代。几个值得关注的方向:

远程MCP server的标准化。现在stdio模式用得最多,但远程HTTP模式的规范还不够完善。Anthropic在推"Streamable HTTP"传输方式,想让MCP server能像普通HTTP API一样部署和调用。这会大幅降低MCP server的部署门槛。

MCP server的发现和分发。现在找MCP server基本靠GitHub搜索和社区推荐。未来可能会有类似npm或MCP Marketplace的东西,让你能一键安装和管理MCP server。

安全性增强。MCP规范在讨论加入更细粒度的权限控制,比如只允许AI读数据不允许写,或者限制某些操作需要人工确认。这对企业级应用很关键。

总的来说,MCP正在把"AI能调用外部工具"这件事从每个应用自己搞一套,变成整个行业共享一套标准。这个方向是对的,而且进展比预期快。

动手试试:想在自己的项目里接入MCP?可以从官方GitHub仓库开始,里面有Python和TypeScript的SDK,以及一批现成的server实现。如果你想统一调用各种AI模型来测试MCP工具调用效果,SevenFa AI Hub提供了统一的API接口。