ARTICLE · 1173095
基于openclaw实现自定义mcp/skill(终结篇)
先不经过 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
给 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-riskopenclaw mcp reload
两个命令检测一下:欧了
再试试:
成了!!
让openclaw进行封禁操作后数据库的结果不符合预期,很明显就剩下操作数据库的代码问题了,解决如下:(这些其实都不用管让ai写就行了)
mcp/RechargeMcpServer.java— tools/list补全 schema:
banUser声明 user_id(必填)+ reason,restrictBonus / getAccountStatus声明user_id(必填),detectRisk等无参工具保持空。这样模型不会再空参调用。tools/call加校验: user_id为空直接抛requires user_id错误返回,不再写入空 user 的脏数据。dao/AccountStatusDao.java— 封禁逻辑补齐:
UPSERT 改为写入 ban_until + updated_at,banned时ban_until = 现在+7天,其他状态置 NULL。之前ban_until永远 NULL,7 天封禁没落地。
恢复数据库:
又成了!!!

数据库中也完美修改:
















































































