Install
openclaw skills install @dengkane/acupoint-health-toolopenclaw skills install @dengkane/acupoint-health-toolacupoint-health-tool 是一个连接 AI_Health 经络穴位养生 MCP 服务(https://health.geeyo.com)的 Agent 技能,让任何 MCP 客户端一句话即可获得有古籍依据的中医穴位按摩建议。
核心价值:
适用场景:头痛失眠、颈肩腰腿不适等日常病痛的穴位按摩自助咨询;健康类 Agent 产品快速集成中医穴位能力。
本技能指导三件事:如何连接该服务、如何完成基于本地数字指纹的自动"注册"、如何正确走多轮澄清对话流程。
服务与网站同端口同进程,生产地址为 https://health.geeyo.com(本地开发时替换为 http://localhost:3000)。支持两种传输,优先使用 Streamable HTTP:
| 传输 | 端点 | 说明 |
|---|---|---|
| Streamable HTTP(推荐) | POST/GET/DELETE {BASE_URL}/mcp | 有状态;初始化后从响应头取 mcp-session-id,后续请求携带该头 |
| 旧版 HTTP+SSE(兼容) | GET {BASE_URL}/mcp/sse + POST {BASE_URL}/mcp/messages?sessionId= | 先建 SSE 长连接,从 endpoint 事件获取消息投递地址 |
MCP 客户端配置示例:
{ "mcpServers": { "ai-health": { "url": "https://health.geeyo.com/mcp" } } }
老客户端只支持 SSE 时改用 https://health.geeyo.com/mcp/sse。
握手/请求的原始 JSON-RPC 与 curl 示例见 references/protocol_examples.md(仅在需要手工调试 HTTP 层时加载)。
该服务没有账号注册接口。客户端身份由 Agent 自行生成:根据本机数字指纹派生一个稳定且唯一的客户端 ID,作为业务会话 sessionId 的前缀,使同一台机器的咨询历史可以归属到同一"账号"。
生成规则(必须遵循):
HKLM\SOFTWARE\Microsoft\Cryptography 的 MachineGuid
(reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid)/etc/machine-idioreg -rd1 -c IOPlatformExpertDevice 中的 IOPlatformUUIDSHA-256(machineId + "|" + hostname + "|" + username),取十六进制前 32 位作为 clientId。"{clientId}-{短随机串}" 格式;每个新咨询话题换一个随机串,clientId 部分保持不变。clientId。Node 一行式示例:
node -e "const c=require('crypto'),os=require('os'),{execSync}=require('child_process');const mid=execSync('reg query \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Cryptography\" /v MachineGuid').toString().match(/\{[0-9a-f-]+\}/i)[0];console.log(c.createHash('sha256').update(mid+'|'+os.hostname()+'|'+os.userInfo().username).digest('hex').slice(0,32))"
注意:MCP 传输层自身的会话(mcp-session-id 头 / SSE sessionId)由服务器生成,与上述业务 sessionId 是两回事,不要混用。
入参:message(病痛描述,必填)、sessionId(可选,多轮时必传)。
返回 JSON 字段:reply、isFinal、sessionId,可能有 rejected、followupCount。
多轮流程(必须按此处理):
sessionId 传 "{clientId}-{随机串}";message 尽量一次给全三要素——部位、疼痛性质、诱因/伴随症状(如"前额胀痛,受凉后加重,伴轻微恶心"),可显著减少追问轮数。isFinal=false 且无 rejected:reply 是追问。回答追问内容后携带同一 sessionId 再次调用,直到 isFinal=true。最多追问 3 轮,超限服务端自动强制作答。isFinal=true:reply 为最终 Markdown 回答(推荐穴位/定位/手法/选穴原理/古籍出处/免责声明),直接呈现给用户,不要删减免责声明。rejected=true:问题与中医穴位无关被拒。不要重试同一问题;如确属健康问题,改写为身体不适描述再试。sessionId,不要复用已完结会话。注意:最终回答由 LLM 生成,单次调用可能需要 30–120 秒,设置足够的客户端超时。
share_create:入参 messages([{role: "user"|"assistant", content}],至少 1 条)、title(可选,缺省取首条用户消息前 40 字)。返回 shareId。分享页地址为 {BASE_URL}/?share={shareId}(注意:参数名为 share 而非 id,路径为站点根 / 而非 /share.html;前端 app.js 仅读取 ?share= 参数,用错格式会回退成初始提问页)。share_get:入参 shareId,返回 {title, messages, createdAt};不存在时返回 isError。服务端最多保留 200 条分享,旧的会被淘汰,shareId 不保证永久有效。无入参。返回本服务回答所依据的古籍名列表。用户质疑答案依据时先调用它说明知识边界;古籍未覆盖的病症,回答中会声明"选择最接近的"。
| 现象 | 处理 |
|---|---|
| POST /mcp 返回 400 "无效或缺失的 mcp-session-id" | 传输层会话已失效,重新走 initialize 建会话 |
| SSE 连接断开 | 重连 /mcp/sse,取新 endpoint,重新 initialize |
| 工具返回超时 | acupoint_consult 属长耗时调用,增大超时后重试一次;仍失败则报告用户 |
分享不存在或已过期 | shareId 已被淘汰,告知用户无法恢复 |