MCP 连接方式:stdio、Streamable HTTP 与远程调用
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
上一节,咱们实现了一个最小 Host。
Host 先创建 MCP Client,再通过下面这段代码连接售后 MCP Server:
const transport = new StdioClientTransport({
command: process.execPath,
args: [serverPath]
})
await client.connect(transport)
运行代码以后,StdioClientTransport 会在当前电脑上执行:
node after-sales-mcp-server.js
也就是说:
Host 和 MCP Server 虽然运行在两个不同的进程中
**但是:**它们都位于当前这一台电脑上。
MCP Client 则由 Host 创建,负责通过
stdio与这个本地 MCP Server 通信。
这在本地开发的时候是没有问题的。
但是!
如果把这种方式放到真实的企业项目里面,就不太行了。
跟大家举个例子:
假设企业有 1000 位员工都要使用售后 Agent,上面这种方式就意味着每位员工都得安装并运行
node after-sales-mcp-server.js如果知识库、代码仓库、订单系统分别对应不同的 MCP Server,那么每位员工的电脑上可能还要安装和维护多套 MCP Server
这会带来一系列问题,比如:
- MCP Server 代码更新以后,每个人都得同步代码
- 本地程序需要配置企业接口地址、身份凭证和访问权限
- 某些 MCP Server 还可能依赖数据库、向量数据库或内部运行环境
毕竟,不是每个人都是程序员的,对不对。
所以说在真实企业项目里面,更常见的调用情况应该是这样的 通过网络连接企业 MCP Server:
所以,在这种企业共享场景中,MCP Server 还需要提供 远程连接方式。
那么想要做到这一点,首先要解决的问题就是 Client 和 Server 到底应该怎样通信。
Client 和 Server 到底应该怎样通信
无论 MCP Server 运行在本地还是远程,Client 和 Server 之间都需要传递 MCP 消息。
但是,这些消息总得通过某种方式,从 Client 发送到 Server,再把执行结果传回来,对不对。
这个负责传输 MCP 消息的部分,就叫做 Transport,也就是 传输层。
目前,M
本节试读已结束
继续学习,解锁完整课程
购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。
