MCP-工作流程
MCP基础可以参考我的文章:MCP-最基础的 MCP 该怎么写
MCP工作时的流程
MCP包括三组件+五阶段
三组件
- Host:运行环境,ai应用的宿主进程;
- Client:通信中介,Host内部会为每个Server创建一个Client;
- Server:暴露工具能力的组件,查数据库、调api。
Host包含Client,Client连接Server Client数量 = Server数量 一个Host可同时连接多个Server
类比
用户 = 👩👦顾客,发出需求,不直接接触后端,不用知道厨房怎么运作,只需要和服务员打交道。
MCP = 🏪餐厅
Host = 👨💼餐厅经理,提供场所、接待顾客、整合服务
Client =🤵服务员,传递数据
Server = 🧑🍳厨师,执行操作,产出结果
协作流程:
👩👦顾客<点餐>(用户发请求)→🤵服务员<下单>(传送数据)→🧑🍳厨师<做菜>(执行操作)→🤵服务员<上菜>(返回响应)→👩👦顾客<用餐>(获得结果)
五阶段
准备期
- 意图识别阶段:用户发指令,LLM要判断这个任务需不需要调、调什么外部工具。比如帮我查北京天气。
- 工具发现阶段:LLM确定要调工具后,Server把自己暴露的工具列表发给Client,Client再传给Host。LLM拿到工具描述后,从中选一个合适的。
执行期
- 构造请求阶段:LLM选好工具后,构造JSON-RPC 2.0格式的调用请求,包含调用的工具名称、所需参数。该请求依次从LLM传递到Host、Client,最终送达Server。
- 工具执行阶段:Server收到合法的调用请求后,实际执行对应操作,比如查询数据库、调用外部API、读取本地文件等,完成指定的工具任务。
- 结果整合阶段:Server将工具执行得到的原始结果原路返回,经Client、Host传递回LLM,LLM对结果进行整理、润色,生成面向用户的最终自然语言回复。
时序图
MCP与Function Calling的关系
- MCP是一套标准化的Function Calling框架。此前各大平台的函数调用规范均为自定义体系,
- Function Calling不同平台之间的工具调用体系互不兼容,OpenAI有独立的规范,Anthropic也有自身的规范。
- MCP的核心作用就是统一这套跨平台的调用规范,一次适配,多平台通用。类比消费电子领域的充电接口:早年不同品牌手机采用各自独立的接口标准,如今USB-C完成了全行业的接口统一,MCP就是AI领域的基础版USB-C标准。
- 核心定位:打破AI的能力边界,让AI从“会说话的聊天机器人”变成“能干活的工程伙伴”
应用场景
常见场景
- 数据库查询:无MCP时,AI分析销售数据需人工完成数据导出、清洗后再输入AI;接入MCP后,AI可直接连接数据库,支持通过自然语言完成数据查询分析。
- 实时信息获取:受训练数据截止日期限制,原生AI无法获取当日热搜等实时信息;接入MCP后,AI可调用搜索工具获取最新动态数据。
- 文件操作:接入MCP后,AI可直接完成文件夹整理、代码库读取等本地文件相关操作。
- 第三方API集成:接入MCP后,AI可对接地图、日历等第三方服务,实现路线查询、会议安排等自动化功能。
前端链路场景
5大核心工程应用场景落地:
数据库MCP:AI直接查询业务数据库,生成数据报表、SQL优化建议、数据校验逻辑;
GitHub MCP:AI直接管理PR、Issue、分支,自动创建PR、合并代码、处理Code Review意见;
内部API MCP:打通公司内部业务系统,AI直接调用接口实现业务需求全流程自动化;
Figma MCP:AI直接读取设计稿,提取设计令牌、生成UI代码、自动对齐设计规范;
- 文档知识库MCP:对接团队内部Wiki,AI基于团队规范回答问题,避免生成不符合要求的内容。
搭建了团队MCP服务矩阵,在.claude/settings.json中完成完整配置,给AI打通了研发全链路的能力:
MCP服务矩阵完整配置代码:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/saas_db"
}
},
"github": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-filesystem", "./docs"]
},
"figma": {
"command": "npx",
"args": ["-y", "@mcp/figma-server"],
"env": {
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
}
},
"internal-api": {
"command": "npx",
"args": ["tsx", "./mcp-servers/internal-api-server.ts"]
}
}
}- 基于MCP标准SDK,自主开发了定制化的业务MCP Server,封装了团队专属的业务工具与数据接口,实现了AI能力与业务场景的深度结合。
自定义MCP Server最小落地代码:
// mcp-servers/internal-api-server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import axios from "axios";
// 初始化MCP服务
const server = new McpServer({
name: "saas-internal-api",
version: "1.0.0",
});
// 注册工具1:查询用户信息
server.tool(
"query_user_info",
"根据用户ID查询SaaS系统用户详细信息",
{
userId: z.string().describe("用户唯一ID"),
},
async ({ userId }) => {
const res = await axios.get(`https://internal-api.xxx.com/v1/users/${userId}`, {
headers: { Authorization: `Bearer ${process.env.INTERNAL_API_TOKEN}` }
});
return {
content: [{ type: "text", text: JSON.stringify(res.data, null, 2) }],
};
}
);
// 注册工具2:查询订单统计数据
server.tool(
"query_order_stats",
"查询指定时间范围内的订单统计数据,支持按用户、地区筛选",
{
startTime: z.string().describe("开始时间,格式YYYY-MM-DD"),
endTime: z.string().describe("结束时间,格式YYYY-MM-DD"),
region: z.string().optional().describe("地区筛选,可选值:cn/us/eu"),
},
async ({ startTime, endTime, region }) => {
const res = await axios.post(`https://internal-api.xxx.com/v1/orders/stats`, {
startTime, endTime, region
});
return {
content: [{ type: "text", text: JSON.stringify(res.data, null, 2) }],
};
}
);
// 启动MCP服务
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("SaaS Internal API MCP Server 启动成功");提效价值:AI的能力边界从“编码”扩展到了整个研发全链路,跨系统操作的工作量降低90%,原本需要跨多个平台、多个步骤完成的工作,AI可以一步完成。