MCP协议是怎么工作的?
你有没有想过,AI 不光能聊天、写代码,还能自己读日志、连GitHub找Bug,甚至自动发Slack告诉你结果?现在听起来有点像“科幻片”,但实际上,MCP 协议就正在把这事一步步变成现实。
它不仅仅是一个聊天协议,而是一个“AI动手干活”的标准框架,让大模型(比如Claude、Cursor里的AI Agent)拥有像人一样“自己找资料、判断行动、执行任务”的能力。
我来带你看看,这个神奇的 MCP 是怎么工作的。
MCP的整体工作机制
MCP的架构分成五个部分,我们可以简单理解成这样:
- Host:AI应用本体,像 Claude Desktop、Cursor 等,就是模型运行的地方
- Client:通道维护者,负责保持与 Server 的稳定通信连接
- Server:能力提供者,告诉 AI 它能做哪些事,比如“我会查GitHub”“我会发Slack消息”等
- 本地数据源:本地文件、数据库、API,Server可以调用它们
- 远程服务:像 GitHub、Slack 这样的互联网服务,同样被 Server 接入使用
最核心的,就是 MCP Server。它就像是模型和“现实世界”之间的中间桥梁,让AI知道这个世界上能做什么,并怎么做。
举个例子
你现在希望AI自动完成这么一件事:
“查一下本地日志里有没有错误,如果有,就去 GitHub 上看看是不是已知的问题,然后把结果发到 Slack。”
这事听起来步骤不少,但你不用写全流程代码。你只需要把它们“拆”成几个 MCP Server:
- 一个 Local Log Server,用来查日志
- 一个 GitHub Server,用来查 Issue
- 一个 Slack Server,用来发通知
AI Agent 收到这句话后,会:
- 向 Local Log Server 发送请求
- 拿到结果后,判断是否要调用 GitHub Server 查Issue
- 如果发现没有现成的Issue,还能自动调用 GitHub API 发起新Issue
- 最后把结果打包发给 Slack Server
全程不需要人类复制粘贴、不需要你告诉它一步一步怎么做,它自己就能“做决策 + 调工具”。
那 MCP Server 到底是怎么设计的?
来看个实打实的例子,这个例子里我们做了一个 MCP Server,它可以帮 AI 实现三件事:
- 搜 GitHub 仓库
- 查 GitHub Issue
- 发起新的 GitHub Issue
只需要写几段代码,就能“告诉”AI:
ts
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "search_repositories",
description: "Search for GitHub repositories",
inputSchema: zodToJsonSchema(repository.SearchRepositoriesSchema),
},
{
name: "create_issue",
description: "Create a new issue in a GitHub repository",
inputSchema: zodToJsonSchema(issues.CreateIssueSchema),
},
{
name: "search_issues",
description: "Search for issues and pull requests across GitHub repositories",
inputSchema: zodToJsonSchema(search.SearchIssuesSchema),
}
],
};
});
是不是很清楚?AI看到这些“工具清单”,就知道它可以干哪些事、每个“工具”要什么参数。
接下来是调用逻辑:
ts
server.setRequestHandler(CallToolRequestSchema, async (request) => {
switch (request.params.name) {
case "search_repositories":
// 调GitHub API搜索仓库
case "create_issue":
// 发起一个新的Issue
case "search_issues":
// 查已有的Issue
}
});
这些API其实背后还是调用 GitHub 的官方 API,但对AI来说,它只知道 MCP Server 给了它一套“能调用的工具”,并不用关心背后的实现细节。
那些参数和Schema是干嘛的?
MCP不只是告诉AI“我能干啥”,还得告诉它“怎么干”和“要输入啥”。
比如:
ts
export const SearchRepositoriesSchema = z.object({
query: z.string().describe("Search query (see GitHub search syntax)"),
page: z.number().optional().describe("Page number for pagination"),
perPage: z.number().optional().describe("Number of results per page"),
});
这段代码就是让AI知道,调用 search_repositories
工具时,你得给我一个 query
,要查啥。
它不仅有字段名,还有描述,AI可以基于这些自动构建正确的调用格式。
所以 MCP 是一个规范、一个共识
说白了,MCP Server 就是告诉AI:“我有这些工具,它们能做这些事,需要这些参数,用的时候叫我一声。”
和你平时做API开发没啥两样,但它最大不同在于:
- 不用你告诉AI“先做什么再做什么”,它自己看完可用工具后就能规划
- 参数结构清晰、标准,AI直接能懂、能生成调用请求
- 多个Server之间可以组合串联,形成强大的任务链路
最后
以前我做AI集成开发的时候,最痛苦的不是模型答得不好,而是“模型明明知道答案,但不会动手干事”。
现在有了 MCP Server,一切都变得可编排、可扩展了。你不再是写死每个操作,而是通过 MCP 把服务变成“能力组件”,AI就像拥有了一整套“万能工具包”,说干就干,不求人。
未来我打算每搞一个AI项目,就从“把能力封装成 MCP Server”开始做,然后AI自己来调用。这样更通用、也更灵活,扩展起来几乎没有上限。
所以如果你想让AI不只是“说得对”,还“做得好”,那MCP真的是你值得认真研究的下一站。