七月第一周。章节换了。过去半年谈的是 可能性,这半年谈的是 动手的顺序。第一周出了两篇。
本周 Signal
从地基重新铺。「第一个 MCP 服务端」是这一章的第一级台阶。几十行代码把四条笔记做成工具,再在 Claude Desktop 配置里登记一行路径。就这些——没有商店、没有部署、没有审核。在聊天里写「存到笔记里」,跑起来的就是我笔记本上的代码。dart test 会把服务端作为独立进程拉起来,自己检查往返与持久化。
旁边立着 45 行。「45 行」是一个原本用聊天群和记事本管理社区会费的人,在周末下午做出来的工具。这次数的不是时间而是 行数——画面定义几行,服务端几行。花的时间因人而异,行数不会变。
工具与包的备忘
在 mcp_server 的 stdio 模式下,stdout 是 JSON-RPC 专用的通道。 用 print 漏出一行诊断信息,那一行就会把协议流打断。这次服务端的错误输出全都只走 stderr,原因就在这里。嵌入式里「为什么有时候解析会失败」,相当一部分出自同一个地方。
一点想法
把第一个服务端跑起来之后,多数人会得出同一个错误结论——接下来该去学协议了。恰恰相反。initialize 握手、tools/list、stdio 分帧,全被包挡住了。剩下的活儿,只是写清楚一个工具意味着什么。 把那句话写好比写代码更要紧,因为模型正是靠它来挑工具的。
下周
转到从服务端取回画面再绘制那一侧。接着是一篇把「谁可以按这个按钮」拦在工具边界上的文章。
makemind.dev 「动态」— 每周一次,这一周上了什么,做的时候又卡在哪儿。