尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

McpSkillClient 调远程 MCP Tool,模型通道走 TaoToken 行不行?

McpSkillClient 调远程 MCP Tool,模型通道走 TaoToken 行不行? 1. 当 McpSkillClient 遇上远程 MCP Tool模型通道到底谁来管如果你正在用 Solon AI 的McpSkillClient把远程 MCP Tool 包装成 Skill 接口大概率已经体会过那种“技能语义很清晰、模型通道很模糊”的割裂感。McpSkillClient负责的是技能侧的事感知远程元数据、动态映射isSupported和getInstruction、把标记为hide的管理类工具过滤掉让 LLM 只看到当前该看的业务工具。但到了chatModel.prompt(...).options(o - o.skillAdd(skillClient)).call()这一段模型请求走哪条通道、Key 从哪里来、Base URL 怎么填框架并不会替你决定。这就是本篇要解决的问题McpSkillClient 调远程 MCP Tool 时模型通道走 TaoToken 行不行答案是可以而且分工很干净——TaoToken 只提供 Key 和 Base URL不替代McpSkillClient、isSupported、getInstruction、getToolsName或OrderQueryTool。技能准入、指令注入、工具过滤仍然由你的 Skill 代码闭环处理模型调用则统一接到 TaoToken 通道上。适合正在做 Solon AI MCP Skills 示例、又不想让技能准入和 Token 消耗分散在不同地方的开发者。我试过把订单示例完整跑一遍远程OrderManagerSkillServer暴露OrderQueryTool和OrderCancelTool本地用McpSkillClient代理Prompt 里注入tenant_id1、user_roleadmin模型侧配置 TaoToken 的 Key 和 Base URL。最终看到远程准入通过、工具按权限暴露、chatModel请求成功返回。下面把每一步拆开讲。2. 前置准备TaoToken 只负责模型通道这一段先把边界说清楚避免后面配置时混淆。McpSkillClient是远程技能的本地代理它的职责是跟http://localhost:8081/skill/order这样的 MCP 端点握手把网络调用包装成 Skill 接口。它管的是技能语义这个技能当前支不支持、该给模型注入什么指令、哪些工具该暴露。而模型通道是另一条线——chatModel要把 Prompt 发到哪个大模型服务、用哪个 Key 鉴权这是 TaoToken 要填的坑。所以你需要先去 TaoToken 注册并创建一个 Key。地址是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end注册后在控制台创建 API Key。拿到 Key 之后模型侧的 Base URL 填https://taotoken.net/api。这里有两个容易踩的坑Base URL 不要加/v1也不要填官网带 UTM 的地址。带 UTM 的是活动落地页不是 API 端点加了/v1则可能和 Solon AI 的路径拼接逻辑冲突导致请求 404。注意TaoToken 在这里只供 Key 和 Base URL不替代McpSkillClient、isSupported、getInstruction、getToolsName或OrderQueryTool。技能侧的逻辑一行都不用改。如果你还没创建 Key可以走这个路径模型对话页https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite先验证通道连通性控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite管理额度API Keys 页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite创建和复制 Key。长期做编码或 Agent 的可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。3. 可复制配置McpSkillClient chatModel 双通道这一节是核心把技能侧和模型侧的配置都写全。先看技能侧也就是原文示例里的McpClientProvider和McpSkillClient构建。这部分不需要动照抄即可// 1. 构建 MCP 客户端提供者负责协议通信与 Schema 缓存 McpClientProvider mcpClient McpClientProvider.builder() .channel(McpChannel.STREAMABLE) .url(http://localhost:8081/skill/order) .build(); // 2. 将 MCP 客户端进化为 Skill 代理 McpSkillClient skillClient new McpSkillClient(mcpClient); // 3. 构建带有业务上下文的 Prompt Prompt prompt Prompt.of(这个订单A001请查询订单详情。) .attrPut(tenant_id, 1) // 注入租户上下文 .attrPut(user_role, admin); // 注入角色权限然后是模型侧。Solon AI 的chatModel配置里把 TaoToken 的 Key 和 Base URL 填进去。不同版本的 Solon AI 配置方式略有差异但核心就两个字段apiKey和baseUrl。下面用配置类的方式示意Configuration public class ChatModelConfig { Bean public ChatModel chatModel() { return ChatModel.builder() .apiKey(System.getenv(TAOTOKEN_API_KEY)) // 从环境变量读取别硬编码 .baseUrl(https://taotoken.net/api) // 不要加 /v1 .model(claude-sonnet-4-20250514) // 按需替换模型名 .build(); } }环境变量这样设置避免 Key 进代码库export TAOTOKEN_API_KEYsk-你的Key最后是调用段技能和模型两条线在这里汇合chatModel.prompt(prompt) .options(o - o.skillAdd(skillClient)) .call();这段代码里skillAdd(skillClient)负责把远程技能挂进来触发isSupported准入、getInstruction指令注入、getToolsName工具过滤而chatModel本身走的是 TaoToken 通道。两者互不干扰各管各的。4. 验证请求订单示例跑通的成功信号配置写完之后怎么确认真的接上了跑订单示例观察三个信号。第一个信号是远程准入通过。OrderManagerSkillServer的isSupported会检查 Prompt 内容是否含“订单”、tenant_id是否存在。当 Prompt 是“这个订单A001请查询订单详情。”且tenant_id1时isOrderTask和hasTenant都为 true技能被激活。如果这里返回 false技能根本不会挂载后面模型调用也不会带上工具。第二个信号是工具按权限暴露。getToolsName里OrderQueryTool对所有合规用户可见OrderCancelTool只在user_roleADMIN时加入。当前user_roleadmin所以两个工具都应该出现在模型可见的工具列表里。你可以临时把user_role改成guest再跑一次对比工具列表的变化确认过滤逻辑生效。第三个信号是chatModel请求成功。这一步走 TaoToken 通道如果 Key 和 Base URL 填对了会正常返回模型响应如果填错通常会看到 401 或 404。成功时模型会基于注入的指令和暴露的工具给出订单查询结果。提示验证模型通道是否单独连通可以先用模型对话页发一条简单消息确认 Key 有效再回到代码里跑完整示例。这样能把“通道问题”和“技能问题”分开定位。5. 本篇常见错排查跑这个组合时报错往往集中在几个固定位置。下面按现象列出来。401 UnauthorizedKey 没填对或者环境变量没生效。检查TAOTOKEN_API_KEY是否真的导出到了当前 shellJava 进程能不能读到。另外确认 Key 没有多余空格。404 Not FoundBase URL 填错。最常见的是加了/v1或者填了带 UTM 的官网地址。正确值是https://taotoken.net/api结尾没有斜杠没有/v1。技能没挂载工具列表为空isSupported返回了 false。检查 Prompt 里是否真的含“订单”tenant_id是否通过attrPut注入。注意attr和attrOrDefault的区别取不到值时前者返回 null后者给默认值。OrderCancelTool 不出现user_role不是ADMIN。getToolsName里用的是ADMIN.equals(prompt.attr(user_role))大小写敏感。注入时写admin小写这里就匹配不上。统一成大写或者改成忽略大小写比较。远程 MCP 端点连不上McpClientProvider的 url 写错或者http://localhost:8081/skill/order服务没启动。先确认OrderManagerSkillServer已经在 8081 端口跑起来再用 curl 探一下端点。模型返回但没调用工具技能挂载了但模型没选择调用。这通常是getInstruction注入的指令不够明确或者 Prompt 本身意图不清晰。可以在getInstruction里把行为准则写得更具体比如明确要求“必须调用 OrderQueryTool 查询”。6. 把技能语义和模型通道分开管回到最初的问题McpSkillClient 调远程 MCP Tool模型通道走 TaoToken 行不行跑完这一遍结论是行而且这种分工比把两件事混在一起更清爽。McpSkillClient继续管它的技能准入、指令注入、工具过滤isSupported、getInstruction、getToolsName、OrderQueryTool一个都不用改模型侧只改chatModel的 Key 和 Base URL指向 TaoToken 通道。如果你正在做类似的 Solon AI MCP Skills 示例建议先把模型通道单独验证通再叠加技能逻辑。Key 从 API Keys 页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite创建接入细节看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite。长期跑编码或 Agent 场景的Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite会更省心。Claude Code 相关接入参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite。
返回列表