MCP stdio 传输的 stderr 阻塞:服务端写满标准错误缓冲区为何让工具调用挂起
本地 MCP Server 用 stdout 传 JSON-RPC、用 stderr 写日志时,客户端若不读取 stderr,管道缓冲区写满后服务端会阻塞在写日志调用上,工具调用随之无响应。本文从管道缓冲机制出发,解释阻塞的形成过程、日志级别与异步写入的缓解效果,并给出可观测指标和部署边界。
聊技术,也聊那些值得认真琢磨的生活小事。
本地 MCP Server 用 stdout 传 JSON-RPC、用 stderr 写日志时,客户端若不读取 stderr,管道缓冲区写满后服务端会阻塞在写日志调用上,工具调用随之无响应。本文从管道缓冲机制出发,解释阻塞的形成过程、日志级别与异步写入的缓解效果,并给出可观测指标和部署边界。
从硬水地区烧水结垢的现象出发,解释软水机中离子交换树脂如何用钠离子置换钙镁离子,饱和后如何用盐水恢复交换能力,并说明软水机与净水器、纯水机的区别,以及软化水为什么不适合直接饮用。
远程 MCP Server 暴露带必填参数的提示模板时,客户端常因参数名大小写、缺失或类型不符收到 -32602 错误。本文沿 prompts/list 的 arguments 声明到 prompts/get 校验链路,解释服务端如何判定参数合法,对比客户端预校验与服务端宽松解析的取舍,并给出可观测指标与部署边界。
热泵干衣机摸起来外壳不烫,耗电却比电加热干衣机低。本文从滚筒内空气的循环过程入手,解释蒸发器如何降温析水、冷凝器如何再热空气,说明压缩机搬运热量与电热丝直接产热的区别,并指出低温环境和绒毛堵塞两器时效率下降的边界。
远程 MCP Server 暴露带枚举参数的提示模板时,客户端常常只能让模型猜参数值。本文拆解 completion/complete 的 ref、argument 与 context 结构,说明服务端能力声明、客户端发起时机与结果渲染之间的断点,并给出校验点与可观测指标。
洗涤中途按开门键没反应、排水后才听到解锁声,是滚筒洗衣机常见现象。本文从门锁联锁、水位开关、排水泵与转速检测的联动讲起,说明哪些条件同时满足才允许开门,以及断电后应急开门的边界和风险。
从远程 MCP Server 返回图片与资源引用的工具调用结果出发,解释 CallToolResult 的 content 数组如何按类型分块,客户端只走 text 分支时为何丢弃正文或抛错,并给出校验点、可观测指标与纯文本封装方案的取舍。
面包屑落在加热管附近,反复受热会变黑、冒烟,甚至被引燃。这篇文章解释积屑碳化的过程,给出断电冷却后清理碎屑盘和内部残屑的具体步骤与频率,并说明哪些做法会损坏机器、出现什么信号必须停用。
电磁炉空烧时面板不热,放上铁锅才开始工作,拿开又立刻停。文章从这一现象出发,说明线圈电流与谐振频率如何随锅具变化,检锅逻辑怎样判断有没有合适的铁磁性锅具,以及小锅、铝锅、锅底不平为何触发保护。
远程 MCP 服务器接入 OAuth 2.1 时,客户端常通过 RFC 7591 动态注册获取 client_id。本文解释注册端点未鉴权、凭据未持久化与重装重复注册如何叠加成孤儿记录和配额耗尽,并给出清理策略、可观测指标及与静态预注册的取舍。