☰
基于openclaw实现自定义mcp/skill(终结篇)
2026/10/14 10:42:30 网站建设 项目流程

先不经过 OpenClaw 裸测一下 STDIO 是否正常:

cmd执行:

echo {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}} | java -jar target\recharge-risk-demo-1.0.0.jar

通了。6 个工具都出来了(妫€娴嬫伓鎰忓厖鍊�这种乱码只是cmd的 GBK 编码显示问题,OpenClaw 走 STDIO 是 UTF-8,不影响)。

恢复脏数据(把之前封号处理的用户状态恢复至正常,看看openclaw会不会再把他封了)

恢复前状态:

数据恢复至:

正式使用openclaw

由于本次测试使用的模型质量一般,所以对话给出的指令需要详细一下,正常情况只需简单给出指令即可

空转循环:

这个现象很典型:MCP 没连上,qwen2.5:7b在空转瞎调tool_search,7 次全失败。不是你口令的问题。

模型太小了读不到skill,要么先把skill喂给它要么换好模型,或者关掉 lean 模式(后续有机会了试试)

换模型:openai的gpt4o:

还报错:

你切到gpt-4o后,Gateway 给这个模型默认分配了codex这个 Runtime,但你根本没装这个插件,所以连 Agent 都起不来,更没机会调detectRisk。

修法:给 gpt-4o 指定用openclaw这个 Runtime

  1. 给gpt-4o加agentRuntime: openclaw,顺手把localModelLean关了,不然 4o 也会被 lean 坑

再次重启gateway

网关又异常了,自己跟着ai重新清了一遍重新打开后,检查mcp是否通:

注意科学上网不然大模型跑不通,毕竟用了gpt
还是llm超时,原因是本机浏览器访问外网和openclaw请求外网逻辑不一样

改用其他模型吧

找一个兼容某公司的接口即可不必严格某公司,比如我这种就可以,模型已经正常了:

但是模型还是读不到那六个工具

发现代码有问题:

做了什么(RechargeMcpServer.java):

  • 修了initialize:以前错回成tools/call格式的content,现在正确返回protocolVersion + capabilities.tools + serverInfo,这就是probe报的那三个invalid_type缺的字段。
  • 加了notifications/initialized:直接回空对象,不再报unknown method。
  • 补了每个 tool 的inputSchema.properties:避免严格客户端拒掉空 schema。
openclaw mcp probe recharge-risk openclaw mcp reload
两个命令检测一下:欧了

再试试:

成了!!

让openclaw进行封禁操作后数据库的结果不符合预期,很明显就剩下操作数据库的代码问题了,解决如下:(这些其实都不用管让ai写就行了)

  1. mcp/RechargeMcpServer.java—tools/list补全 schema:
    • banUser声明user_id(必填)+ reason,restrictBonus / getAccountStatus声明user_id(必填),detectRisk等无参工具保持空。这样模型不会再空参调用。
    • tools/call加校验:user_id为空直接抛requires user_id错误返回,不再写入空 user 的脏数据。
  2. dao/AccountStatusDao.java— 封禁逻辑补齐:
    • UPSERT 改为写入ban_until + updated_at,banned时ban_until = 现在+7天,其他状态置 NULL。之前ban_until永远 NULL,7 天封禁没落地。

恢复数据库:

又成了!!!

数据库中也完美修改:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询