第三章:Transport Mechanisms
Chapter 3: Transport Mechanisms
🌟 从上一章到本章
在第二章:MCP服务器分类中,我们学会了如何根据需求选择不同类别的服务器(如文件系统、数据库等)。现在想象这样一个场景:你有一个本地文件服务器和一个云端数据库服务器,但它们的通信方式完全不同!这时候问题来了——如何让LLM灵活地与这些服务器“对话”?
本章将揭秘传输机制,它就像“翻译官”的沟通方式,决定服务器与LLM如何高效传递信息。我们将通过一个具体案例,学习如何选择和配置通信协议!
🎯 中心用例:让LLM同时操作本地文件和云端数据
假设你要开发一个AI助手,需要同时完成以下任务:
- 读取本地PDF文件(通过文件系统服务器)
- 查询云端数据库中的用户信息(通过Third-Party服务器)
- 挑战:本地服务器可能使用STDIO协议,而云端服务器可能使用Server-Sent Events(SSE)。如何让LLM同时兼容这两种通信方式?
🔍 两种核心传输机制
MCP定义了两种主要通信协议,像“普通话”和“方言”一样解决不同场景的通信需求:
1. STDIO(标准输入输出)
- 类比:打电话时直接对话,一问一答
- 适用场景:简单快速的单次请求(如文件读写)
- 特点:
- 代码示例:启动STDIO文件服务器
# 使用npx直接运行服务器命令 npx -y @modelcontextprotocol/server-filesystem /my/data/folder
- 代码示例:启动STDIO文件服务器
2. Server-Sent Events(SSE)
- 类比:观看直播,持续接收更新
- 适用场景:需要实时推送数据(如监控日志、股票行情)
- 特点:
- 代码示例:配置SSE数据库服务器
{"mcpServers": {"数据库": {"command": "npx","args": ["@thirdparty/server-postgres"],"transport": "sse" // 明确指定协议}} }
- 代码示例:配置SSE数据库服务器
🛠️ 如何用传输机制解决用例?
步骤1:配置双协议服务器
在客户端配置文件中同时注册两种服务器:
{"mcpServers": {"本地文件": { // STDIO协议"command": "npx","args": ["@modelcontextprotocol/server-filesystem", "/data"]},"云端数据库": { // SSE协议"command": "npx","args": ["@aws/server-postgres"],"transport": "sse"}}
}
步骤2:让LLM同时操作
用户:请读取合同.pdf并查询张三的订单记录
LLM内部操作:
1. 调用本地文件服务器(STDIO)读取PDF
2. 调用云端数据库服务器(SSE)实时获取订单数据
🕵️ 内部实现揭秘
时序图:两种协议对比
关键代码片段(简化版)
STDIO服务器启动逻辑(文件系统)
// server-filesystem.ts
class FilesystemServer {async handleSTDIO() {const stdin = process.stdin; // 监听标准输入const request = await readRequest(stdin);if (request.action === "read") {const fileContent = readFile(request.path);process.stdout.write(fileContent); // 通过标准输出返回}}
}
SSE服务器响应逻辑(数据库)
// server-postgres.js
const http = require('http');server.on('request', (req, res) => {res.writeHead(200, {'Content-Type': 'text/event-stream','Cache-Control': 'no-cache','Connection': 'keep-alive'});// 每隔5秒推送新数据setInterval(() => {const data = getRealtimeData();res.write(`data: ${JSON.stringify(data)}\n\n`);}, 5000);
});
💡 总结与展望
本章我们学到:
- 两种协议的“方言”差异:STDIO适合单次问答,SSE适合实时流
- 如何配置混合服务器环境:在同一个项目中同时使用不同协议
- 选择标准:根据需求场景决定使用STDIO还是SSE
接下来,我们将深入探索MCP服务集成抽象,学习如何将多个服务器整合成“超级工具”——例如让文件服务器和数据库服务器协同完成复杂任务!
🚀 尝试在你的项目中混合使用STDIO和SSE协议,比如同时操作本地文件和实时监控云端数据!