传输层
MCP 的传输层决定连接形态:本地用 stdio,远程用 Streamable HTTP。面试主线:两种传输的机制与选型。
两种传输
| 维度 | stdio | Streamable HTTP |
|---|---|---|
| 形态 | 子进程标准输入/输出 | HTTP 请求/响应 + SSE |
| 场景 | 本地服务器(本机工具) | 远程服务器(跨机器) |
| 部署 | 随应用启动子进程 | 独立服务 |
| 认证 | 不需要(本地) | 需要(OAuth/API Key) |
| 数据流 | 双向(stdin/stdout) | 请求响应 + 服务端推送 |
stdio:
- 客户端启动服务器子进程,通过 stdin 发消息、stdout 收消息(JSON-RPC 按行)
- 典型:Claude Desktop 配置本地 MCP 服务器(npx 启动、Python 脚本)
- 优点:零网络、零认证、进程隔离;缺点:只能本机
Streamable HTTP(2025 规范,取代早期 HTTP+SSE):
- 客户端 POST JSON-RPC 到服务器端点,服务器可返回 SSE 流(服务端推送)
- 支持无状态请求(每请求独立)和有状态会话(session id)
- 远程部署、多客户端共享一个服务器
选型规则
| 场景 | 传输 |
|---|---|
| 本机工具(文件、shell、本地服务) | stdio |
| 远程服务(SaaS、共享工具) | Streamable HTTP |
| 内网多个应用共享 | Streamable HTTP |
| 安全敏感(认证/审计) | Streamable HTTP(有认证) |
面试话术:stdio 是“本地进程通信”,HTTP 是“网络服务”。选型看部署边界:服务器跑在哪、谁能访问。
实现要点
- SDK:官方提供 Python/TypeScript SDK(服务器/客户端双端),Java/Go/Rust 等社区实现
- 服务器框架:FastMCP(Python 快速开发),装饰器定义工具
- 开发调试:stdio 服务器可用 MCP Inspector 调试
# FastMCP 示例: 三行定义一个工具
from fastmcp import FastMCP
mcp = FastMCP("demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""两个数相加"""
return a + b面试追问
- 两种传输? stdio(本地子进程管道)和 Streamable HTTP(远程网络 + SSE)。选型看部署边界
- stdio 怎么通信? stdin 发 stdout 收,JSON-RPC 消息。进程隔离,零认证
- Streamable HTTP 的特点? POST + SSE 双向,支持会话和无状态,远程多客户端
- 什么时候用 HTTP? 服务器不在本机:SaaS、共享服务、内网多应用。要认证
- 怎么快速开发服务器? FastMCP/SDK:装饰器定义工具,自动协议处理