MCP(Model Context Protocol,模型上下文协议)。MCP其实解决了一个非常实在的问题:怎么让AI大模型像用USB-C接口一样,轻松连接数据库、文件系统、各种API,甚至指挥其他AI干活。
我从最基础的“MCP是什么”讲起,一步步带你理解它的工作原理,亲手造一个MCP服务器,再聊聊当MCP缺功能时怎么办,以及它和Agent、Skill这些热门概念到底什么关系。全文干货,建议先收藏再细看。
一、MCP是什么?——AI世界的“USB-C接口”
先问一个问题:现在的AI大模型(比如GPT-4、Claude)已经很能聊了,但如果你想让它查一下公司内部数据库的订单,或者读取你电脑上的Excel文件并做分析,怎么办?
传统做法是:为每一个需求写一段特定的代码(比如用函数调用、写API接口),然后集成到AI应用里。这就好比你家的电视、冰箱、空调各自需要一个专用的遥控器,换一个设备就得换一个遥控器,非常麻烦。
MCP要做的事,就是给AI造一个“万能遥控器”——或者说“USB-C接口”。
- MCP = 标准化的通信协议,定义了AI(作为客户端)和外部工具/数据源(作为服务器)之间怎么对话。
- MCP服务器:一个轻量级程序,把某个具体功能(比如“读文件”“查天气”“连数据库”)包装成标准接口。
- MCP客户端:内嵌在AI应用(如Claude Desktop、Cursor)里,负责和服务器通信。
这样一来,AI只需要学会一种“语言”,就能调用成千上万个MCP服务器提供的功能。解耦是它的灵魂。
二、MCP是怎么工作的?——一次标准RPC调用
看一张最简单的流程图(脑补一下):
- 用户:在AI聊天框输入“帮我查一下北京今天的天气”。
- AI主机(如Claude Desktop):大模型分析后,决定调用一个叫
get_weather的工具。 - MCP客户端:构造一个JSON-RPC请求,发送给对应的MCP服务器。
{ "method": "tools/call", "params": { "name": "get_weather", "arguments": { "city": "Beijing" } } } - MCP服务器:收到请求,执行真正的天气API调用,拿到数据。
- 服务器返回结果:同样以标准格式返回。
- AI生成回答:“北京今天晴天,25℃,空气质量良。”
核心原语(MCP定义的三种基本操作):
- Resources:暴露数据(只读,比如文件内容)。
- Tools:暴露可执行的函数(可读写,比如发送邮件)。
- Prompts:预定义的模板,引导AI完成特定流程。
通过这三种原语,MCP覆盖了绝大多数“AI需要外部能力”的场景。
三、怎么做一个MCP服务器?——10分钟从零上手
光说不练假把式。我们以Node.js + TypeScript为例,写一个最简单的MCP服务器,功能只有一个:跟人打招呼。顺便附上Python版本,任君挑选。
步骤1:环境准备
mkdir my-mcp-server && cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript
步骤2:配置TypeScript(tsconfig.json)
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./build",
"rootDir": "./src",
"strict": true
}
}
步骤3:写代码(src/index.ts)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "greeting-server",
version: "1.0.0",
});
// 定义一个工具
server.tool("say_hello", { name: z.string() }, async ({ name }) => ({
content: [{ type: "text", text: `Hello ${name}! 欢迎进入MCP世界。` }],
}));
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Greeting server running");
}
main();
步骤4:编译和测试
npx tsc
npx @modelcontextprotocol/inspector node build/index.js
浏览器打开弹出的地址,你就能在可视化界面里调用say_hello工具了。
Python版(更简洁)
from fastmcp import FastMCP
mcp = FastMCP("greeting")
@mcp.tool()
def say_hello(name: str) -> str:
return f"Hello {name}!"
if __name__ == "__main__":
mcp.run()
运行:fastmcp run server.py
集成到Claude Desktop:编辑claude_desktop_config.json,加上你的服务器路径即可。就是这么简单。
四、MCP缺我需要的功能怎么办?——三板斧
你可能会问:“我想要的功能,没有现成的MCP服务器怎么办?” 三种解决方案:
1. 先找现成的
MCP生态发展很快,官方和社区已经有大量服务器:
- GitHub MCP Registry:官方目录。
- MCPZoo / MCPAnvil:社区收录的上千个服务器,分类齐全。
- mcp-recommender:用自然语言搜索,比如输入“postgres数据库”,它给你推荐合适的MCP服务器。
2. 自己动手造
按照上一节的教程,把你需要的功能封装成一个新的MCP服务器。只要是你能写代码实现的功能(调用API、读数据库、执行Shell命令),就能变成MCP工具。
3. 把现有的Web服务/API“包”成MCP
如果你已经有一个REST API或者内部Web服务,不需要重写逻辑。写一个薄薄的MCP适配层,把HTTP请求转换成MCP协议。可以用Higress + Nacos这类方案做到零改造接入。
核心思想:MCP不是封闭的,它是可扩展的。缺什么,补什么。
五、Agent和MCP怎么结合?——大脑指挥手脚
有了MCP这个“万能接口”,AI就能调用工具了。但谁来决定什么时候调用什么工具、以什么顺序调用?这就是Agent的活了。
- Agent = 自主决策的AI:它负责理解用户的高层目标,拆解成子任务,规划调用哪些MCP工具,并根据结果决定下一步。
- MCP = 执行具体动作的“手脚”:每个MCP服务器只干一件简单的事(比如“搜索文件”“发送HTTP请求”)。
一个典型的多步任务
用户:“分析一下当前目录下所有日志文件,找出ERROR最多的前3个,然后生成一份报告发到我邮箱。”
Agent会:
- 调用
filesystemMCP:列出所有.log文件。 - 调用
grepMCP或自己读取文件内容,统计ERROR数量。 - 调用
emailMCP:发送报告。
Agent负责编排,MCP负责执行。
快速上手:用mcp-agent框架
from mcp_agent.app import MCPApp
from mcp_agent.agents.agent import Agent
app = MCPApp(name="my_agent")
async def main():
async with app.run():
agent = Agent(
name="analyst",
instruction="分析日志文件并发送邮件",
server_names=["filesystem", "email"]
)
# ... 调用agent执行任务
你也可以把另一个Agent包装成MCP工具,实现Agent-to-Agent协作——主Agent调用子Agent完成子任务,类似人类团队分工。
六、MCP和Skill有什么区别?——工具箱 vs 说明书
很多人分不清MCP和最近同样很火的Agent Skill(比如Claude的Skill、OpenAI的Custom Instructions进阶版)。我用一个比喻帮你厘清:
| 维度 | MCP | Skill |
|---|---|---|
| 类比 | 工具箱里的扳手、螺丝刀 | 贴在墙上的维修手册 |
| 作用 | 提供原子能力:读文件、发请求、查数据库 | 提供流程指导:当遇到X情况时,先做A,再做B,如果C则D |
| 形式 | 独立运行的服务(需要写代码) | 通常是Markdown文件 + 可选的脚本 |
| 上下文占用 | 所有工具描述一次性加载,容易撑爆上下文 | 渐进式加载,只暴露必要信息,省Token |
| 典型例子 | fetch(抓网页)、postgres(查数据库) | “安全告警调查步骤”“代码审查检查清单” |
| 谁执行 | MCP服务器执行具体操作 | AI按照Skill里的指引去调用各种MCP工具 |
一句话总结:MCP是“能干什么”,Skill是“应该怎么干”。
实际应用中,两者强强联手:一个Skill可以写明“处理客户退款时,先调用order_db MCP查询订单,再调用payment_gateway MCP执行退款,最后调用crm MCP记录工单”。Skill把领域知识固化下来,让AI不再瞎发挥;MCP则提供了可执行的能力。
七、写在最后:MCP的未来
MCP问世不到一年,但已经显露出成为AI基础设施的潜力。它解决的不是一个炫酷的功能,而是一个底层互联问题——就像USB-C统一了外设接口,HTTP统一了Web通信。未来,任何AI应用都可以通过MCP即插即用地获得海量外部能力。
对于开发者来说,学习MCP的门槛并不高(一个周末足够了),但回报可能很大:你可以把自己的服务变成AI生态中的“标准件”,被成千上万个Agent调用。