stdio vs 远程 SSE 部署
在单机开发时,stdio 传输非常方便;但在团队协作或企业生产环境中,每个成员都要在本地配置数据库驱动与凭证显然不现实。
将 MCP Server 部署在中央服务器或 Docker 容器中,并通过 HTTP + SSE (Server-Sent Events) 提供服务,是团队共享 AI 工具链的推荐架构。
1. 编写支持 SSE 的 MCP Server
以 Node.js SDK 为例,利用 Express 构建 SSE 服务端:
import express from "express";
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
const app = express();
const server = new Server({ name: "cloud-tools", version: "1.0.0" }, { capabilities: { tools: {} } });
let transport: SSEServerTransport;
app.get("/sse", async (req, res) => {
transport = new SSEServerTransport("/message", res);
await server.connect(transport);
});
app.post("/message", async (req, res) => {
if (!transport) return res.sendStatus(400);
await transport.handlePostMessage(req, res);
});
app.listen(3001, () => {
console.log("MCP SSE Server listening on port 3001");
});
2. 编写 Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json tsconfig.json ./
RUN npm ci
COPY src ./src
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3001
ENV NODE_ENV=production
CMD ["node", "dist/index.js"]
3. 构建与运行容器
docker build -t company-mcp-service:latest .
docker run -d -p 3001:3001 --name mcp-service company-mcp-service:latest
在客户端(如支持 SSE 的 Cursor 或接入代理)配置 http://mcp.internal.company.com/sse,团队即可统一使用受管控的后端工具集群!