安全扫描
OpenClaw
安全
high confidence该技能与其声明的用途一致:通过 OpenClaw 使用 BestYou API 密钥和 mcporter CLI 渲染 BestYou 健康数据;包中没有表明存在无法解释或过度的访问请求。
评估建议
安装前需考虑的事项:
- 该技能合理需要 BESTYOU_API_KEY,并使用 mcporter 调用 BestYou MCP 服务(baseUrl: https://mcp.bestyou.ai/mcp)。仅提供您计划用于 BestYou 的密钥,并授予所需的最小范围。
- 系统将要求您将 API 密钥存储在本地配置文件中(~/.openclaw/workspace/config/mcporter.json)。该文件以明文形式包含 Bearer 令牌;请保护该文件(限制权限),如果您停止使用该技能,请删除或轮换密钥。
- 该技能建议通过 npm 全局安装 mcporter。在运行 `npm install -g` 之前,请验证 mcporter 的包名、发布者和版本,或者如果您对全局包有疑虑,请优先选择本地安装(或固定版本)。
- HTML 模板从 cdn.bestyou.ai 和 fonts.googleapis.com 加载图片和字体 — 加载模板将导致向这些 CDN 发出出站请求(这对于渲染图片/字体是正常的,但请注意这会泄露客户端检索了这些资源)。
- 查看包中包含的 re...详细分析 ▾
ℹ 用途与能力
名称/描述、所需环境变量(BESTYOU_API_KEY)和说明完全一致:技能通过 MCP 服务器获取 BestYou 数据并渲染本地 HTML 模板。一个小的不匹配是:注册表元数据没有列出所需的配置路径,但 SKILL.md 和 INSTALL.md 明确指示用户创建并使用 ~/.openclaw/workspace/config/mcporter.json(mcporter 配置)。这是运行所需的,但未反映在声明的元数据中。
✓ 指令范围
SKILL.md 将运行时操作限制为:验证/安装 mcporter、创建包含 BESTYOU API 密钥的 mcporter 配置、通过 mcporter 调用 bestyou.* 工具、从 assets/ 填充本地 HTML 模板、内联 CSS,并通过 canvas 呈现。指令不要求代理读取无关的系统文件或其他凭证。当执行 mcporter 调用时,代理将向 BestYou MCP 端点发出网络请求。
ℹ 安装机制
这是一个纯指令技能(无安装规范)。它告诉用户通过 `npm install -g mcporter` 安装 mcporter。这是一个正常但比使用经过审计的系统包风险更高的建议,因为全局 npm 安装会运行来自 npm 注册表的代码 — 用户应在安装前验证包和版本。
✓ 凭证需求
仅需要一个凭证(BESTYOU_API_KEY)并将其声明为主要凭证,这对于调用 BestYou MCP API 的技能来说是相称的。文档指示将密钥存储在本地 mcporter.json 的 Authorization Bearer 头中 — 这很方便,但意味着密钥将以明文形式出现在指定路径的磁盘上,因此用户应确保适当的文件系统权限和范围。
✓ 持久化与权限
always:false 和 user-invocable:true(默认)。该技能不请求永久或提升的平台权限,除了建议重启网关外,不尝试修改其他技能或系统级设置。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.02026/3/23
BestYou Coach 1.0.0 — BestYou Coach for OpenClaw canvas 首次发布。 - 将健康数据渲染为可视化仪表板:每日简报、行动计划、进度快照、周总结、膳食分析和锻炼计划。 - 提供 mcporter 和 API 密钥配置的设置指南。 - 包含数据到模板的映射和设计系统详细信息,以确保一致的渲染效果。 - 概述了处理缺失或空 API 响应字段的方式。 - 描述了典型用户请求的对话模式。
● 无害
安装命令 点击复制
官方npx clawhub@latest install bestyou-coach
镜像加速npx clawhub@latest install bestyou-coach --registry https://cn.clawhub-mirror.com
技能文档
使用 OpenClaw 的 canvas 将 BestYou MCP 工具响应渲染为丰富的视觉卡片。
首次设置
在调用任何工具之前,请检查 mcporter 是否已安装以及 BestYou 服务器是否已配置:
mcporter --config ~/.openclaw/workspace/config/mcporter.json list
- 如果未找到
mcporter:npm install -g mcporter - 如果未列出
bestyou:请引导用户完成设置。请参阅references/setup.md获取完整指南。
设置摘要:
- 用户在 BestYou iOS 中生成 API 密钥(更多 → 已连接的应用 → OpenClaw)
- 在
config/mcporter.json中创建包含 Authorization Bearer 头中的密钥(请参阅references/setup.md获取确切的 JSON 格式) - 重启 OpenClaw 网关
通过 mcporter 调用工具
所有工具使用以下语法:
mcporter --config config/mcporter.json call bestyou. [param=value ...]
如果需要自定义配置路径(例如从工作区外部调用),请使用完整路径:
mcporter --config ~/.openclaw/workspace/config/mcporter.json call bestyou. [param=value ...]
示例:
mcporter call bestyou.get_account_link_status
mcporter call bestyou.get_daily_briefing date=2026-03-15
mcporter call bestyou.get_todays_action_plan date=2026-03-15
mcporter call bestyou.get_progress_snapshot date=2026-03-15
mcporter call bestyou.get_weekly_summary weekEndDate=2026-03-15
mcporter call bestyou.generate_workout type=strength duration=20 equipment=bodyweight experienceLevel=Intermediate goal="General strength"
mcporter call bestyou.analyze_meal_text description="chicken burrito bowl" timestamp=2026-03-15T12:30:00-06:00
如果需要自定义 mcporter 配置路径,请添加 --config 。
工具到模板映射
| MCP 工具 | 模板 | 描述 |
|---|---|---|
get_account_link_status | assets/account-status.html | 连接状态、范围 |
get_daily_briefing | assets/daily-briefing.html | 准备度、洞察、优先级 |
get_todays_action_plan | assets/action-plan.html | 今日时间块的时间线 |
get_progress_snapshot | assets/progress-snapshot.html | 领域分数、建议 |
get_weekly_summary | assets/weekly-summary.html | 周分数、趋势、目标 |
analyze_meal_text | assets/meal-analysis.html | 宏量营养素分解、成分 |
generate_workout | assets/workout.html | 带图片的练习卡片 |
渲染工作流
- 通过 mcporter 调用 BestYou MCP 工具
- 从
assets/读取匹配的模板 - 用实际 API 响应值替换 HTML 中的示例数据(请参阅下面的数据映射)
- 内联 CSS:将
assets/shared.css的内容复制到 HTML中的标签,使输出完全独立 - 通过
canvas(action="present")或canvas(action="a2ui_push")呈现填充好的 HTML - 在视觉内容旁边提供简短的文本摘要
设计系统
所有模板都使用 BestYou Dark Glass 设计系统(assets/shared.css):
- 背景:
#0a0a0a,卡片:#141414,边框:#1e1e1e - 字体:Inter(Google Fonts)
- 颜色编码:绿色(
#4ade80)= 好,黄色(#facc15)= 中等,橙色(#fb923c)= 警告,红色(#f87171)= 差 - 分数阈值:≥70 绿色,40-69 黄色/橙色,<40 红色
处理缺失数据
API 响应可能包含空值或缺失字段。规则:
- 如果分数字段为空,隐藏仪表/条形图或显示 "—" 而不是数字
- 如果数组为空或缺失,完全省略该部分(不渲染空容器)
- 如果
totalCalories或calorieGoal为空,省略卡路里摘要行 - 不要在渲染的 HTML 中显示 "null" 或 "undefined"
按模板的数据映射
每日简报
API 响应结构(嵌套):
| API 路径 | 模板元素 | 备注 |
|---|---|---|
headline | .headline 文本 | |
readinessScore | .gauge-value + SVG stroke-dashoffset | 公式:314 - (314 * score / 100) |
dayType | .day-type .value | 首字母大写,添加 emoji:recovery=🔄,active=💪,rest=😴 |
yesterday.highlights[] | .insight-card 块 | 正面洞察(图标、标题、描述) |
yesterday.areas[] | .insight-card 块 | 负面/改进洞察,在亮点之后渲染 |
today.priorities[] | .action-item 块 | 编号,带标题和描述 |
today.plans[] | .plan-tag 块 | Emoji、计划名称、周/日信息 |
insightsCards[] | 跨域部分 | 过滤 domain: "multi" 条目,渲染为跨域洞察卡片 |
行动计划
| API 路径 | 模板元素 | 备注 |
|---|---|---|
readiness.score | .readiness-score + 徽章 | |
readiness.dayType | .rm-type | |
blocks[] | .block-card 项 | 按 timePeriod 分组:morning/afternoon/evening |
blockType 的块图标映射:
wakeUp→ 😴(恢复图标背景)breakfast→ 🍳(营养图标背景)lunch→ 🥗(营养图标背景)snack→ 🥤(营养图标背景,或第二个零食用 🥑)dinner→ 🍽️(营养图标背景)workout/cardio/strength→ 🏃(健身图标背景)goToBed→ 🌙(恢复图标背景)
块状态:completed → ✅,upcoming 或 pending → ⬜
进度快照
| API 路径 | 模板元素 | 备注 |
|---|---|---|
domains[] | .domain-card 网格 | 每个:名称、分数、颜色编码的迷你条形图 |
insights[] | .insight-item 卡片 | 带严重程度徽章(high=red,medium=orange,low=blue) |
recommendations[] | .rec-item 卡片 | 带 actionSteps[] 作为列表项 |
crossDomainPatterns[] | .cross-domain 卡片 | 带领域徽章 |
周总结
| API 路径 | 模板元素 | 备注 |
|---|---|---|
overallScore | 仪表 SVG + 标签 | |
domains[] | .domain-section 块 | 每个:趋势徽章(improving/declining/stable)、统计、洞察 |
achievements[] | .achievement 卡片 | Emoji + 标题 + 描述 |
nextWeekFocus[] | .next-week-goal 项 | 带优先级徽章 |
膳食分析
| API 路径 | 模板元素 | 备注 |
|---|---|---|
mealName | .meal-name | |
calories | .meal-cal | |
protein_g、fat_g、carbs_g、fiber_g | 宏量条形段 + 图例 | flex 比例 = 克值 |
components[] | .component 行 | 名称、热量、每成分宏量 |
insights[] | .insight-row 项 | .positive 或 .negative 指示条 |
dailyTotals | .daily-totals 部分 | 热量、蛋白质、脂肪、碳水化合物 |
锻炼
| API 路径 | 模板元素 | 备注 |
|---|---|---|
sessionName | 标题 h1 | |
duration、equipment、level | 标题 .meta 跨度 | |
blocks[] | .block 部分 | 阶段徽章:warmup=green,main=orange,cooldown=blue |
imageUrl→src(CDN:cdn.bestyou.ai)name→h3sets、reps、weight、rpe、rest→.rx-pill跨度notes→.exercise-notestargetMuscle、exerciseType→.exercise-cues
对话模式
早晨签到
用户:"我今天怎么样?" 或 "早晨简报"
get_account_link_status→ 验证连接get_daily_briefing→ 渲染简报小部件get_todays_action_plan→ 渲染行动计划小部件- 总结:准备度分数、日期类型、首要优先级
进度检查
用户:"我做得怎么样?" 或 "显示我的进度"
get_progress_snapshot→ 渲染快照小部件- 突出显示最强和最弱的领域、首要建议
膳食记录
用户:"我刚吃了 [食物描述]"
analyze_meal_text带描述 → 渲染膳食小部件- 记录蛋白质摄入与目标的对比,建议下一餐倾向
锻炼请求
用户:"给我一个锻炼" 或 "[时长] [类型] 锻炼"
generate_workout带参数 → 渲染锻炼小部件- 简要总结:时长、重点、练习数量
周回顾
用户:"周总结" 或 "我这一周怎么样?"
get_weekly_summary→ 渲染周小部件- 突出显示趋势(改善/下降)、首要成就、下周重点
文本摘要风格
在小部件旁边保持文本摘要简短且可操作:
- 以关键数字开头(准备度分数、卡路里、总体分数)
- 一句话说明进展顺利的事项
- 一句话说明首要行动项目
- 无需重复小部件中视觉显示的所有内容
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制
免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制