MCP Host 实战:工具发现、Schema 映射与调用循环
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
上一节,咱们已经把售后 MCP Server 做出来了。
这个 Server 里面包含两个 Tools、一个 Resource 和一个 Prompt。
最后还通过验证 Client 和 MCP Inspector
但是,大家仔细看上一节的 verify-client.js,会发现这个工具调用是咱们手动指定的:
const refundResult = await client.callTool({
name: 'check_refund_eligibility',
arguments: {
orderId: 'A1024'
}
})
也就是说,程序在运行以前就已经知道要调用 check_refund_eligibility。
整个过程根本没有大模型参与。
所以,上一节的代码只能说明:Client 可以发现并调用 MCP Server 的能力。
但是,很明显,这还不是咱们真正想要的 Agent。
真正的 Agent 应该接收一句自然语言:
订单 A1024 是否满足退款条件?如果可以退款,是否需要人工审核?
然后由模型判断需要哪个工具、生成调用参数。Host 再把这次调用交给 MCP Client,最后把执行结果重新送回模型。
这一节,咱们就把这块功能完成。
从验证 Client 到真正的 Host
先回忆一下第三节讲过的角色关系。
MCP Client 负责和 MCP Server 通信。
它可以建立连接、查询能力列表、调用 Tool、读取 Resource,也可以获取 Prompt。
但是 Client 不负责调用大模型,也不会根据用户问题决定该使用哪个工具。
这些事情是 Host 负责的。
整个流程就长成下面这样:
这里最容易混淆的是:模型接口和 MCP Server 之间并不会直接通信。
模型本身并不认识 client.callTool(),MCP Server 也不知道什么是模型的 tool_calls。
是 Host 站在中间,把两边的数据结构转换并串联起来。
实现一个可以调用 MCP Tool 的最小 Host
课程源码:
https://github.com/lgd8981289/Agent--Code本小节完整代码位于:
Code/Node/第三章/05-mcp-client-host
这个项目继续使用上一节的售后 MCP Server。
目录结构如下:
after-sales-mcp-server.js、order-system.js 和 refund-policy.js 都已经在上一节讲过了,代码直接复制过来就可以了。
这一节真正新增的是两个文件:
deepseek-client.js:负责调用 DeepSeekhost.js:负责连接模型和 MCP Server,运行完整调用链
项目继续使用 MCP 官方 SDK 的 V1 版本:
npm install @modelcontextprotocol/sdk@1.29.0 zod
然后是 .env 文件:
DEEPSEEK_API_KEY=你的 DeepSeek API Key
DEEPSEEK_MODEL=deepseek-v4-flash
创建 MCP Client 并连接 Server
先来看 host.js ,这里面代码有点多,大家最好是下载下来源码之后,然后跟着课程的代码一点点看
这里给大家录了一个视频,大家可以看下:
「插入视频 ---- 05-连接 mcpserver 和 client」
第一
本节试读已结束
继续学习,解锁完整课程
购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。
