Skip to content

传输层

stdio、Streamable HTTP、传输选型。

Updated View as Markdown
For humans

传输层

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

面试追问

  1. 两种传输? stdio(本地子进程管道)和 Streamable HTTP(远程网络 + SSE)。选型看部署边界
  2. stdio 怎么通信? stdin 发 stdout 收,JSON-RPC 消息。进程隔离,零认证
  3. Streamable HTTP 的特点? POST + SSE 双向,支持会话和无状态,远程多客户端
  4. 什么时候用 HTTP? 服务器不在本机:SaaS、共享服务、内网多应用。要认证
  5. 怎么快速开发服务器? FastMCP/SDK:装饰器定义工具,自动协议处理
Navigation

Type to search…

↑↓ navigate↵ selectEsc close