从握手到工具:一文彻底吃透 MCP 协议与 stdio 传输机制

目录

为什么要了解 MCP 与 stdio?

MCP 协议全景图

stdio 传输规则速查表

实战:手动握手 + 拉取工具列表

启动服务器

发送 initialize 请求

接收握手响应

发送 initialized 通知

查询工具列表

stdio vs SSE 传输对比

常见问题 FAQ

延伸阅读与工具

结束语


为什么要了解 MCP 与 stdio?

过去一年,大模型从“会聊天”进化到“会动手”:读文件、调 API、跑脚本。然而各家厂商的插件接口五花八门,开发者必须写 N 套适配器。  


Anthropic 在 2024 年 11 月发布的 Model Context Protocol(MCP) 把“插件”抽象成了统一的 资源 / 工具 / 提示 三大概念,并提供 stdio、HTTP+SSE(后来改成了Streamable HTTP) 两种传输机制。  
其中 stdio 传输 最简单——只需启动一个子进程,用标准输入/输出就能完成所有 JSON-RPC 通信,非常适合本地 CLI 工具、脚本或嵌入式 Agent。

MCP 协议全景图

MCP 架构图如下:

- Client:AI Agent、IDE、聊天机器人……  
- Server:暴露文件、数据库、REST API 等能力的轻量进程  
- Transport:本文主角 —— stdio(标准输入/输出)  
- Message:JSON-RPC 2.0 规范,分 Request / Response / Notification 三类

stdio 传输规则速查表

维度约定
编码UTF-8
每条消息单行 JSON,以 \n 结尾
方向Client→Server 走 stdin
错误stderr 可打印日志,但不参与协议
并发支持多请求并行,靠 id 字段匹配响应

传输过程入下图所示:

 

实战:手动握手 + 拉取工具列表

下面用“纯终端”方式演示一次完整会话,不依赖任何 SDK。

启动服务器

我们采用Cangjie Magic所提供的官方示例,有关详情参考:调试基于Cangjie Magic的MCP服务器指南-优快云博客

启动Cangjie Magic的MCP服务器的命令行是:

cjpm run --skip-build --name magic.examples.mcp_server

此时进程阻塞,等待 stdin输入
 

发送 initialize 请求

在终端(或 使用echo)向该进程 stdin 写入:

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"demo-cli","version":"1.0"}}}

注意:必须带换行符 `\n`。

接收握手响应

服务器立即在 stdout 返回:

{"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2024-11-05","capabilities":{"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"Cangjie Magic Agent Server","version":"0.1"}}}

发送 initialized 通知

客户端必须再发一条“我已初始化完毕”的无回复通知:

{"jsonrpc":"2.0","method":"notifications/initialized"}

查询工具列表

接着就可以拉取工具:

{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}

服务器返回(示例):

{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"add","description":"Add two numbers","inputSchema":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"]}},{"name":"multiply","description":"Multiply two numbers","inputSchema":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"]}},{"name":"Calculator","description":"小学算术计算器","inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The input question"}},"required":["question"]}}]}}

至此,stdio 通道已完全可用,后续可继续发送 `tools/call`、`resources/list` 等请求。

stdio vs SSE 传输对比

场景stdioHTTP+SSE
启动方式本地子进程远端 URL
防火墙无要求需开放端口
并发连接单进程单连接可多客户端
适用对象CLI、桌面插件SaaS、云函数
演示难度⭐(简单)⭐⭐⭐(需 CORS、鉴权)

常见问题 FAQ

1. 一定要发 `initialized` 吗?  
   是的,否则服务器不会接受后续业务请求。

2. 可以一次发送多条请求吗?
   可以,只要每条 JSON 独占一行,服务器按 `id` 异步回复。

延伸阅读与工具

- 官方协议文档
- 中文翻译  

结束语

如果本文帮到你,欢迎转发/收藏,也欢迎在评论区贴出你用 MCP 做出的酷炫 Agent!

【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度研究”展开,重点介绍了利用改进秃鹰算法(Bald Eagle Search Algorithm, BES)对微电网群进行经济优化调度的Matlab代码实现方法。该研究旨在解决微电网系统中多能源协调、运行成本最小化供电可靠性之间的平衡问题,通过引入算法改进策略提升寻优能力收敛速度,有效应对微电网中可再生能源出力波动性和负荷不确定性带来的调度挑战。文中详细阐述了微电网群的系统架构、目标函数构建、约束条件设定以及改进算法的应用流程,并通过仿真实验验证了其在降低运行成本、提高能源利用效率方面的优越性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事微电网、智能电网优化调度相关工作的工程技术人员,尤其适合正在开展能源优化、智能算法应用研究的研究者。; 使用场景及目标:①用于微电网群多目标经济调度模型的构建求解;②作为智能优化算法(如秃鹰算法)改进应用的学习案例;③支撑科研论文复现、算法对比实验及实际项目中的能源管理系统开发。; 阅读建议:建议结合提供的Matlab代码进行同步调试仿真,重点关注目标函数设计、约束处理方式算法改进机制,同时可将其其他智能算法(如粒子群、遗传算法)进行对比分析,深化对优化调度问题求解路径的理解。
基于分布式模型预测控制的多智能体点对点轨迹生成研究(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制的多智能体点对点轨迹生成研究”展开,重点介绍利用分布式模型预测控制(DMPC)方法实现多智能体系统(如无人机、无人车等)在点对点转移过程中的协同轨迹规划。文中结合Matlab代码实现,展示了该方法在固定翼无人机一致性控制、异构车辆编队、多无人机协同路径规划等场景中的应用,强调系统间的通信拓扑、状态约束、避障机制优化求解过程。同时,文档还列举了大量相关科研方向代码资源,涵盖智能优化算法、路径规划、电力系统、信号处理等多个领域,旨在为科研人员提供全面的技术支持复现基础。; 适合人群:具备一定自动化、控制理论或计算机编程基础,从事多智能体系统、路径规划、模型预测控制等相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究多智能体系统在复杂环境下的协同轨迹生成避障控制;②深入理解分布式模型预测控制(DMPC)的数学建模优化求解过程;③借助提供的Matlab代码实现算法复现、仿真验证二次开发,推动科研项目进展。; 阅读建议:建议读者结合文中提供的网盘资源下载完整代码案例,按照目录顺序系统学习,并重点关注DMPC的构建流程、约束处理多智能体通信机制,同时可拓展至其他智能优化控制算法的应用实践中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值