RooCode 挂上 SumMCP.py 的 add / listdir,模型接口改填 TaoToken

发布时间:2026/9/18 10:36:56

RooCode 挂上 SumMCP.py 的 add / listdir,模型接口改填 TaoToken SumMCP.py 的 add 和 listdir 已经挂进 RooCode图标绿了可让模型算 9998 时它还要花 token 判断该用哪个 tool。这篇只换模型侧接口TaoTokenhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endMCP 侧配置一字不动。MCP 有意思的地方在于插件本身办不到的事可以自己写个 tool 补上。求和、列目录这种活儿写成 SumMCP.py 也就十来行RooCode 挂上就能用。真正麻烦的不是写 tool而是「模型怎么知道该调哪个 tool」。RooCode 会把 MCP 工具的 schema 一并塞进上下文模型每轮都得判断这句话要不要调工具、调 add 还是 listdir、参数怎么填。这一步全压在模型侧通道上通道一换、Key 一过期、模型 ID 一填错判断就在半路断掉——表现是绿点还亮着对话框里却始终弹不出工具调用。所以这篇按原始那篇《RooCode结合本地MCP实践》的路径重走一遍先在~/workspace/python/demo/mcp写 SumMCP.pyconda 建 py_3.12 装 fastmcp再进 RooCode 的 mcp_setting.json 把 demo server 挂上靠绿色图标确认唯一新增的一步是在 RooCode 面板里把模型供应商的 Base URL 填成https://taotoken.net/apiKey 从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建。配完按原文的测试流程复跑算 99 与 98 的和、列出 /home/xx/Documents。如果 MCP 那半边你已经配好只是卡在「工具列得出来却叫不动」可以直接跳到第 3 节。1. SumMCP.pyadd 与 listdir 的最小可跑实现1.1 在 ~/workspace/python/demo/mcp 下把文件建出来目录结构沿用原文别自己另起一套不然后面 mcp_setting.json 里的路径对不上cd ~/workspace/python/demo mkdir -p mcp cd mcp touch SumMCP.py为什么要单开一个 mcp 目录、单独一个 SumMCP.py因为 MCP Server 在 RooCode 眼里是一个独立进程RooCode 只是负责把它拉起来并通过标准输入输出对话。文件放哪儿、叫什么名字本身不影响功能但一旦多写几个 server命名和目录会决定你后面排查路径问题时是不是一头雾水。1.2 SumMCP.py 里两个 tool 的写法SumMCP.py一个只暴露 add / listdir 两个 tool 的本地 MCP Server from fastmcp import FastMCP import os mcp FastMCP(Demo, log_levelERROR) mcp.tool() def add(a: int, b: int) - int: Add two numbers返回 a 与 b 的和 print(add, a, b) return a b mcp.tool() def listdir(path: str) - list[str]: 列出给定目录下的条目名 return os.listdir(path) if __name__ __main__: # stdio 模式由 RooCode 拉起进程通过标准输入输出通信 mcp.run(transportstdio)几个细节值得说明。add(a: int, b: int) - int里的类型标注不是装饰FastMCP 会把它转成 JSON Schema模型就是靠这份 schema 决定怎么填参数标注写没了模型可能把 99 传成字符串。listdir返回list[str]结果会被序列化回对话流路径不对时返回的是异常信息这些都会进模型上下文。print(add, a, b)那行是给自己看的方便在 RooCode 的输出面板里确认 tool 真的被调用了、参数是什么。真要上线跑把它换成标准库的 logging 更合适print 在 stdio 模式下混进协议流有时候会干扰解析。1.3 transport 为什么选 stdio 而不是 sse原文注释里也留了transportsse那一行。简单说stdio 模式不需要端口RooCode 直接把进程拉起来通过管道说话本地小工具用这个最省心sse 模式适合把 server 放到另一台机器上、或者多个客户端共享一个 server 的场景代价是你得自己管端口占用和进程存活。这篇的场景是单机单插件就老实走 stdio。1.4 py_3.12 环境与 fastmcp 依赖conda create -n py_3.12 python3.12 source /opt/anaconda/bin/activate py_3.12 pip install fastmcp装完先手动验一次别急着去改插件~/.conda/envs/py_3.12/bin/fastmcp run ~/workspace/python/demo/mcp/SumMCP.pystdio 模式下它不会打印什么交互提示安静等着标准输入就是起来了CtrlC 退出。这一步不做等 RooCode 那边图标不亮时你会分不清是脚本本身有问题还是插件配置写错了。另外~/.conda/envs/py_3.12/bin/fastmcp这个路径是后面要原样填进 mcp_setting.json 的先ls一下确认它真的存在。2. mcp_setting.json 里把 demo server 指到 SumMCP.py2.1 command 与 args 的对应关系{ mcpServers: { demo: { command: ~/.conda/envs/py_3.12/bin/fastmcp, args: [ run, ~/workspace/python/demo/mcp/SumMCP.py ], disabled: false, alwaysAllow: [] } } }这段配置里只有四个字段在起作用。command指向 conda 环境里的 fastmcp 可执行文件不是python也不是python SumMCP.py。args是命令后面的参数数组第一个run是 fastmcp 的子命令第二个是脚本的完整路径。disabled设成 falseserver 才会被拉起来。alwaysAllow留空表示每次调用都要你确认一次调试阶段建议保持空数组等你确认这个 tool 完全可控了再考虑往里加白名单自动放行。如果路径里带空格或者 tilde 展开在某些系统上不生效就把command和args里的路径全写成绝对路径比如/home/xx/.conda/envs/py_3.12/bin/fastmcp。这类问题在 macOS 和 Linux 上表现不一样写死绝对路径最省事。2.2 绿色图标代表什么又不代表什么配置保存后回到 MCP Servers 面板demo 这一项前面会亮起绿色图标。它代表 RooCode 成功按command拉起了进程、完成了一次协议握手、并且拿到了 SumMCP.py 里声明的 tool 列表——在你这个例子里就是 add 和 listdir 两个。它不代表模型一定会调用这两个 tool。图标绿只是「管道通了」调用与否是模型侧的事这也是本篇后面要换模型通道的原因。2.3 加了第三个 tool 之后必须回面板刷新原文特意点了一句在 SumMCP.py 里新加函数一定要回 MCP 面板刷新新的 tool 才会出现插件用的时候才读得到。原因很直接——RooCode 持有的 tool 列表是握手那一刻的快照。你在脚本里加了echo进程还是那个老进程插件手里还是老清单。正确顺序是改 SumMCP.py → 保存 → 回 MCP Servers 面板点刷新重启 server→ 确认新 tool 出现在列表里 → 再回对话框提问。跳过刷新这一步你会看到「明明写了函数模型却说没有这个工具」这种假故障。3. RooCode 面板里换模型通道Provider 填 https://taotoken.net/api3.1 先在官网注册并创建 API Key原文里没有注册这一节因为原文跑的是插件自带的模型通道。这里补上打开 TaoToken注册登录后进控制台创建一把 API Key。这一步有两条硬性要求。第一Key 只创建一次、只复制一次粘到 RooCode 里就完事别顺手写进任何会被提交的文件。第二本篇后面所有出现 Key 的地方都写成占位符YOUR_API_KEY你实际填的是自己刚创建的那串。3.2 Base URL 写 https://taotoken.net/api结尾不要 /v1回到 RooCode 的模型配置面板找到 API Provider 那一栏选 OpenAI Compatible 这类选项然后Base URL填https://taotoken.net/apiAPI Key填YOUR_API_KEYModel填你从模型广场复制到的 ID三个容易踩的点。第一Base URL 结尾不要加/v1工具或 SDK 有可能自己再拼一层多写一次就是 404。第二不要把官网落地页填进 Base URL那是给人点的不是给程序请求的。第三不要在 Base URL 上挂任何查询参数通道地址就是干净的https://taotoken.net/api。这两个地址的分工记住一句话就行https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 用来注册、创建 Key、看模型广场、看用量https://taotoken.net/api用来填进工具里。3.3 模型 ID 以模型广场当时列表为准不要凭记忆写模型名也不要照搬任何博客里的 ID。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end在模型广场里复制当前可用的那个 ID原样粘到 RooCode 的 Model 字段。为什么强调这一点因为 MCP 场景对模型的判断力要求比普通对话高它要在同一轮里读懂用户意图、从工具清单里挑一个、再按 schema 把参数填对。模型 ID 填错或填了个不存在的名字请求会直接失败模型能跑但工具调用能力弱表现就是「它宁可自己硬算也不调你的 tool」。这两类问题长得完全不一样先确认 ID 正确再谈别的。3.4 MCP 侧一个字都不用改换模型通道不等于换 MCP 配置。mcp_setting.json 里的command、args还是指向 py_3.12 的 fastmcp 和 SumMCP.pytransport还是 stdio。MCP Server 是跑在本机上的独立进程它跟模型走哪条通道没有耦合关系。常见误解是「换了模型供应商要重配 MCP」其实要重连的只是 RooCode 到模型那一侧。4. 复跑原文测试9998 与 /home/xx/Documents4.1 让 demo 的 add 算 99 与 98在 RooCode 对话框里输入使用 demo 工具计算 99 和 98 的和预期行为是这样的RooCode 弹出一个工具调用确认显示工具名add、参数a99、b98你点确认后返回197。如果模型直接回了 197 却没弹确认框说明它自己心算完了MCP 工具根本没进这轮决策。对照第 5 节排查。原文也提到过当前阶段经常需要明确告诉插件「用哪个 tool」所以提示词里点名demo和add不丢人是正常用法。4.2 用 listdir 列出 /home/xx/Documents使用 demo 的 listdir 工具列出 /home/xx/Documents 下的文件列表把/home/xx/Documents换成你机器上真实存在的目录。返回的是一串文件名os.listdir只列一层不递归。这一步能顺带验证两件事一是参数传递正确模型知道listdir需要一个path字符串二是本地进程确实被拉起来了、真的去读了文件系统。如果这里报路径不存在先确认目录拼写再确认跑 fastmcp 的进程有没有那个目录的读权限。4.3 加第三个 tool 再刷新验证整条链路想确认自己完全掌握了刷新机制可以往 SumMCP.py 里加一个最小的mcp.tool() def echo(text: str) - str: 原样返回传入的文本 return text保存文件回 MCP Servers 面板点刷新确认echo出现在工具列表里再在对话里让它 echo 一段字符串。这套流程跑顺说明「写 tool → 刷新 → 调用」的闭环是通的。4.4 这次测试跟原文的差别在哪原文的测试是纯 MCP 侧验证绿点亮、tool 列出、调用成功。本篇多了一层验证——同一轮对话里模型的意图判断和工具选择都要经过 TaoToken 这条通道完成。两次测试的提示词、期望返回值都一样唯一变化的是模型侧接口地址和 Key。这样你才好判断问题出在 MCP 配置还是模型通道。5. 绿点亮着但调用断在半路对照这几处5.1 模型不主动选 tool表现是绿点在、tool 列表也全但回答直接给结果不弹确认框。根因在上下文模型每轮都要读 tool schema 再做判断通道切换、模型 ID 不对、或者提示太模糊都会让它跳过这个动作。处理办法很实际先在提示里明确点名 tool 名确认链路是通的再逐步把提示写短观察模型从什么时候开始不再主动挑 tool。这个边界跟你选的模型强相关没有统一答案。5.2 换通道后报 401 或 404这两个错误码对应两处完全不同的配置。401基本是 Key 问题填的时候没替换成真 Key、粘的时候多带了空格、或者贴的还是仓库里的YOUR_API_KEY占位符。404基本是地址问题Base URL 结尾多写了/v1或者把官网落地页错填进了 Base URL。回去检查这一栏是不是干净的https://taotoken.net/api。对照一下https://taotoken.net/api/v1和https://taotoken.net/api是两个不同的地址前者会失败。5.3 绿点根本不亮这跟模型通道无关问题在 mcp_setting.json。逐项核对command的 fastmcp 路径是否存在、conda 环境名是不是py_3.12、args里 SumMCP.py 的路径对不对、disabled是不是 false。最快的定位方式还是在终端手动跑一次fastmcp run SumMCP.py终端能跑起来问题就在配置文件终端也跑不起来问题在脚本或环境。5.4 Key 和用量去哪里对换完通道、跑通测试之后如果发现某次调用没反应或者想确认这次工具调用有没有算进额度回 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看调用记录和用量。这一步别省它能帮你区分「请求根本没发出去」和「发出去了但模型没调 tool」这两种截然不同的故障。6. 跑通之后回控制台对一下这次调用配置保存、9998 和列目录都试过之后先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填串——工具调用失败时这一步能立刻告诉你是通道的问题还是 MCP 的问题。如果准备长期用 RooCode 加自写 tool 写代码可以打开 Coding Plan 看套餐是否够用Key 在 控制台 API Keys 创建一个项目一把别混用。我自己跑下来最深的体会是MCP 的坑九成不在 Python 脚本里而在「谁来决定用哪个 tool」这件事上。绿点只是把管道接好了剩下那半程靠模型通道撑着。把 Base URL 和 Key 一次性配对比事后在对话里反复强调「请使用 demo 工具」要省事得多。等哪天模型能稳定自己挑 tool 了这套东西才算真正顺手。
延伸阅读

更多相关文章

2026/9/18 10:31:56

DeepSeek V2到V3升级:兼容性排查与适配指南

简介:面向 DeepSeek 模型开发者与算法工程师的版本升级参考手册,聚焦从 V2 迁移到 V3 时的兼容性难题。内容按升级流程组织,先对比两代版本在技术架构、数据处理和模型输出上的差异,再依次说明硬件与软件环境准备、模型加载、分词…

2026/9/18 10:31:56

Qt创建项目全流程:环境、Kit、qmake/CMake、信号槽与打包发布

Qt创建项目这件事,说它是点点鼠标的活,其实第一次上手能卡住人的地方比想象中多。我见过太多人在新建向导里选了 Kit 却编译不过,也在各种群里回答过无数次「unknown module(s) in qt: serialport」到底怎么解。这篇东西就是把 Qt 创建项目从…

2026/9/18 10:31:56

ever-gauzy 开源业务管理平台:Nx Monorepo 多租户部署实践

做企业内部系统的朋友大概都遇到过这样的场景:时间跟踪一个工具、发票一个工具、CRM 再开一个、HR 又得单独买一套,最后每个月在几套系统之间来回切账号,数据还互不相通。我最早接触ever-gauzy就是因为这个痛点——它是一个把时间跟踪、发票管…

2026/9/18 12:02:05

基于S7-200的立体仓库堆垛机PLC定位控制系统设计解析

简介:这份毕业论文围绕基于PLC的立体仓库控制系统设计展开,系统梳理了自动化立体仓库的概念、发展历程与国内外现状,并从硬件组成、系统工艺流程、功能分析等角度完成总体方案设计。论文面向自动化、电气工程及物流工程等相关专业学生&#x…

2026/9/18 12:02:05

Smith预估补偿消除纯滞后:Simulink仿真与工程实现

简介:一份面向自动化、控制工程与MATLAB仿真学习者的专业参考文献,围绕史密斯预估补偿控制方法展开,系统讲解纯滞后系统的补偿原理、闭环特征方程分析、预估补偿器结构设计,以及使用Simulink搭建仿真模型的完整思路,适…

2026/9/18 12:02:05

TEC半导体制冷高精度温控系统设计

简介:本资源是一份面向电子工程、自动化及仪器仪表领域高校师生与研发工程师的高精度温控系统设计技术文档,聚焦半导体热电制冷(TEC)在较大热负载场景下的工程化应用难题。文档详细阐述TEC选型方法、基于单片机的硬件驱动电路设计…

2026/9/18 12:02:05

电子制造业MES系统整体界面截图解析:从看板到实时数据集成与验收

简介:这是一份面向电子制造企业信息化规划与系统设计人员的MES系统界面参考文档,聚焦通用型电子制造业场景,可用于了解制造执行系统的模块划分、看板展示、基础配置及编码管理思路,为系统选型、方案编写或二次开发提供直观对照。资…

2026/9/18 11:57:03

Storybook入门指南:构建现代化UI组件开发环境

Storybook入门指南:构建现代化UI组件开发环境 Storybook是一个革命性的前端开发工具,为现代UI组件开发提供了全新的工作范式。它作为独立的开发环境,让开发者能够在隔离的环境中构建、测试和文档化UI组件,彻底改变了传统的前端开发…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码