19_MCP_Server_把N×M变成N+M
19 · MCP Server把 N×M 变成 NM第四周我做了个 MCP Server把我那套 API 文档检索包成了两个 tool。做完之后我最想讲的不是它怎么用而是它解决的那个连接问题以及我在 Windows 上被一个 print 语句坑了半小时的事。一、MCP 到底解决什么一句话把 N×M 的连接问题变成 NM。没有 MCP 的时候有 N 个 AI 应用Claude Desktop、Cursor、你自己写的壳有 M 个数据源 / 工具数据库、文档库、内部 API每个应用要接每个数据源得写 N×M 个适配器。有了 MCP大家都说同一套协议应用只需要实现一次clientN 次数据源只需要暴露一次serverM 次总共 NM。这不是什么新思想——USB、LSP语言服务器协议都是同一个套路。标准化接口的价值不在接口本身在它把组合爆炸变成了线性增长。二、三个角色很多人搞混MCP 有三个角色搞清楚它们一半的困惑就没了角色是什么我这儿的对应Host面向用户的应用内嵌 client 做编排没有Claude Desktop / Cursor 才是Client跑在 Host 内部连 server 的那层scripts/mcp_smoke.py验证用Server暴露 tool / resource 的进程mcp_server/常见误解以为自己写了个 Agent 就是 Host。不是——我的app/里那个 Agent 是另一条链路工具是硬编码的根本没走 MCP。所以严格说我本地只有 Server 和一个用来验证的 Client没有 Host。Host 是「谁拉起我的 server谁就是」。我用官方 SDK 写的验证客户端长这样frommcpimportClientSession,StdioServerParametersfrommcp.client.stdioimportstdio_clientasyncwithstdio_client(params)as(read,write):asyncwithClientSession(read,write)assession:awaitsession.initialize()awaitsession.list_tools()awaitsession.call_tool(search_api_docs,{...})这跟 Claude Desktop 内部那个 client 用的是同一套 API。所以它能跑通就证明我的 server 能被真实 Host 装上——不需要我真的去装一个 Claude Desktop。三、stdio 下stdout 是协议独占通道这是我踩的最实在的一个坑。MCP 的 stdio 传输client 起一个子进程通过stdin/stdout说 JSON-RPC。所以 server 的 stdout 不能再干别的事。而我的检索链路里有print()调试输出。在 WindowsGBK 编码下这些输出混进 JSON-RPC 流client 直接解析失败。我盯着「server 起不来」查了半天最后发现是自己的 print 污染了协议流。修法是加一个shield_stdout()把sys.stdout重定向到 stderr让所有 print 走错误流。defshield_stdout():sys.stdoutsys.stderr# 协议流独占print 一律走 stderr这个坑的本质当你选了 stdio 作为传输层你就放弃了 stdout 的使用权。这不是 bug是协议设计的约束——只是文档不会用大字提醒你。四、Tools 和 Resources 的区别在「谁发起」这是我读完规范后觉得最值得记的一条Tools模型决定要不要调模型发起Resources应用决定要不要读应用发起比如用户选中了一段文本区分它们的意义在于权限模型不一样。Tools 是「让模型干活」风险更高所以要标readOnlyHint让 Host 知道它安不安全。我这两个 tool 都是只读检索所以都标了readOnlyHintTrue。这不是装饰—— Host 可以据此决定要不要弹确认。五、发布时发现的真问题准备把 server 发到 GitHub 的时候我发现一件事# mcp_server/server.pyfromapp.ragimportAskPipelinefromapp.retrieval.pipelineimportRetrievalPipeline它依赖主项目的检索链路。这意味着我不能只把mcp_server/单独发成一个仓库——别人 clone 下来装完依赖照样跑不起来缺app/和向量库数据。这个发现让我改了发布方案整仓发布而不是单独发 server 目录。顺带说一句我对工具数量的取舍只暴露2 个 tool 1 个 resource。不是能力不够是刻意收窄。工具越多模型越容易选错第 17 篇里「工具选择错误」那类失败。在 MCP 这种「别人来装」的场景里宁可少而准不要多而全。六、一句话MCP 的技术门槛不高——它就是一个 JSON-RPC 加一层约定。它的价值在生态位你把自己的能力包成一个标准 server就等于让所有支持 MCP 的 Host 都能直接装。一次实现到处可用。而它的坑也都在工程细节里stdout 归协议、Python SDK 是 snake_caseserver_info不是serverInfo、入口不能依赖工作目录Host 拉起子进程时 cwd 不由你控制。这些细节只有真正跑一遍才会遇到。上一篇18 · 四道闸门怎么让 Agent 别乱来下一篇20 · trace 是 Agent 时代的迭代曲线

相关新闻

LoopBack 4 CLI 版权声明生成器(lb4 copyright)完全指南:自动化管理 JS/TS 文件版权与许可证头

LoopBack 4 CLI 版权声明生成器(lb4 copyright)完全指南:自动化管理 JS/TS 文件版权与许可证头

后端微服务 【免费下载链接】loopback-next LoopBack makes it easy to build modern API applications that require complex integrations. 项目地址: https://gitcode.com/gh_mirrors/lo/loopback-next 点击查看 免费下载 导读 lb4 copyright 是 LoopBack 4 CL…

2026/10/13 9:47:53 阅读更多 →
CentOS 8 上部署 K8s 集群实战:kubeadm + containerd + Calico 避坑指南

CentOS 8 上部署 K8s 集群实战:kubeadm + containerd + Calico 避坑指南

1. 为什么现在还有人用 CentOS 8 搭 K8s先把话说在前头:CentOS 8 官方维护早就停了,生产环境我强烈建议你换 Rocky Linux 或者 Ubuntu LTS。但现实是,很多公司内网、离线机房、教学实验环境里,还躺着一大批 CentOS 8 的机器&#…

2026/10/13 9:47:53 阅读更多 →
QT与Ogre深度集成:跨框架3D渲染窗口实现方案

QT与Ogre深度集成:跨框架3D渲染窗口实现方案

1. 项目概述:这不是一个“Hello World”,而是一次图形引擎与GUI框架的深度握手QT 和Ogre Demo——看到这个标题,我第一反应不是“又一个教学示例”,而是立刻在脑子里拉出一张系统级交互图:左边是QT那套成熟、稳定、跨平…

2026/10/13 9:46:51 阅读更多 →

最新新闻

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

搞微服务的同学,不管在哪个团队,迟早会在Nacos配置中心里碰上一次乱码。我这两年接到过不少工单,报的都是同一个毛病:本地启动一切正常,一到测试或生产环境,前端拿到的中文全变成问号,或者日志里…

2026/10/13 10:38:24 阅读更多 →
用Python从零构建抓包工具:实时抓包、离线分析与代理调试

用Python从零构建抓包工具:实时抓包、离线分析与代理调试

做小程序后端联调时,我经常遇到这种局面:客户端明明发了某个请求,服务端日志里却什么都没有;真机测试一切正常,一上体验版就超时;前端说参数格式没问题,后端说根本不是自己定义的字段。两边都拿…

2026/10/13 10:38:24 阅读更多 →
DDoS攻击原理与防御实战指南:从攻击流程到应急响应

DDoS攻击原理与防御实战指南:从攻击流程到应急响应

做运维这些年,被半夜电话吵醒的次数已经数不清了——不是服务器宕机,就是有人在打你的站。DDoS 这三个字母,圈子里早就讲烂了,但真正能把它讲透、讲得让零基础的人看懂并知道怎么应对的内容,反而没多少。大部分文章都停…

2026/10/13 10:38:24 阅读更多 →
CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

简介:CGAssistant是一款面向CrossGate游戏玩家的C开发的自动化辅助工具,聚焦于cg_item_6000功能模块,适用于希望提升游戏操作效率与脚本化交互能力的进阶玩家及逆向/外挂开发学习者。资源包共2088个文件,主体为1158个JavaScript逻…

2026/10/13 10:38:24 阅读更多 →
Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

简介:本资源为Windows Server 2012 R2专用64位网卡驱动程序合集,面向企业IT运维人员、系统管理员及虚拟化平台部署工程师,专用于解决该版本服务器在新硬件(如Intel X710、Broadcom NetXtreme等主流网卡)上因驱动缺失或…

2026/10/13 10:38:23 阅读更多 →
VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →