Install
openclaw skills install bestyou-coachRender BestYou health data as visual Dark Glass dashboards via OpenClaw canvas. Daily briefings, action plans, progress snapshots, weekly summaries, meal analysis, and workout plans. Companion to the bestyou core skill.
openclaw skills install bestyou-coachRender BestYou MCP tool responses as rich visual cards using OpenClaw's canvas.
Before calling any tools, check that mcporter is installed and the BestYou server is configured:
mcporter --config ~/.openclaw/workspace/config/mcporter.json list
mcporter is not found: npm install -g mcporterbestyou is not listed: walk the user through setup. See references/setup.md for the full guide.Setup summary:
config/mcporter.json with the key in the Authorization Bearer header (see references/setup.md for the exact JSON format)All tools use this syntax:
mcporter --config config/mcporter.json call bestyou.<tool_name> [param=value ...]
If a custom config path is needed (e.g. calling from outside the workspace), use the full path:
mcporter --config ~/.openclaw/workspace/config/mcporter.json call bestyou.<tool_name> [param=value ...]
Examples:
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
If a custom mcporter config path is needed, add --config <path>.
| MCP Tool | Template | Description |
|---|---|---|
get_account_link_status | assets/account-status.html | Connection status, scopes |
get_daily_briefing | assets/daily-briefing.html | Readiness, insights, priorities |
get_todays_action_plan | assets/action-plan.html | Timeline of today's blocks |
get_progress_snapshot | assets/progress-snapshot.html | Domain scores, recommendations |
get_weekly_summary | assets/weekly-summary.html | Weekly scores, trends, goals |
analyze_meal_text | assets/meal-analysis.html | Macro breakdown, components |
generate_workout | assets/workout.html | Exercise cards with images |
assets/assets/shared.css into a <style> tag in the HTML <head> so the output is self-containedcanvas(action="present") or canvas(action="a2ui_push")All templates use the BestYou Dark Glass design system (assets/shared.css):
#0a0a0a, cards: #141414, borders: #1e1e1e#4ade80) = good, yellow (#facc15) = moderate, orange (#fb923c) = warning, red (#f87171) = poorAPI responses may contain null or missing fields. Rules:
totalCalories or calorieGoal is null, omit the calorie summary rowAPI response structure (nested):
| API Path | Template Element | Notes |
|---|---|---|
headline | .headline text | |
readinessScore | .gauge-value + SVG stroke-dashoffset | Formula: 314 - (314 * score / 100) |
dayType | .day-type .value | Capitalize, add emoji: recovery=🔄, active=💪, rest=😴 |
yesterday.highlights[] | .insight-card blocks | Positive insights (icon, title, description) |
yesterday.areas[] | .insight-card blocks | Negative/improvement insights, render after highlights |
today.priorities[] | .action-item blocks | Numbered, with title and description |
today.plans[] | .plan-tag blocks | Emoji, plan name, week/day info |
insightCards[] | Cross-domain section | Filter for domain: "multi" entries, render as cross-domain insight cards |
| API Path | Template Element | Notes |
|---|---|---|
readiness.score | .readiness-score + badge | |
readiness.dayType | .rm-type | |
blocks[] | .block-card items | Group by timePeriod: morning/afternoon/evening |
Block icon mapping by blockType:
wakeUp → 😴 (recovery icon bg)breakfast → 🍳 (nutrition icon bg)lunch → 🥗 (nutrition icon bg)snack → 🥤 (nutrition icon bg, or 🥑 for second snack)dinner → 🍽️ (nutrition icon bg)workout / cardio / strength → 🏃 (fitness icon bg)goToBed → 🌙 (recovery icon bg)Block status: completed → ✅, upcoming or pending → ⬜
| API Path | Template Element | Notes |
|---|---|---|
domains[] | .domain-card grid | Each: name, score, color-coded mini bar |
insights[] | .insight-item cards | With severity badge (high=red, medium=orange, low=blue) |
recommendations[] | .rec-item cards | With actionSteps[] as list items |
crossDomainPatterns[] | .cross-domain cards | With domain badges |
| API Path | Template Element | Notes |
|---|---|---|
overallScore | Gauge SVG + label | |
domains[] | .domain-section blocks | Each: trend badge (improving/declining/stable), stats, insight |
achievements[] | .achievement cards | Emoji + title + description |
nextWeekFocus[] | .next-week-goal items | With priority badge |
| API Path | Template Element | Notes |
|---|---|---|
mealName | .meal-name | |
calories | .meal-cal | |
protein_g, fat_g, carbs_g, fiber_g | Macro bar segments + legend | Flex ratios = gram values |
components[] | .component rows | Name, amount, calories, per-component macros |
insights[] | .insight-row items | .positive or .negative indicator bar |
dailyTotals | .daily-totals section | Calories, protein, fat, carbs |
| API Path | Template Element | Notes |
|---|---|---|
sessionName | Header h1 | |
duration, equipment, level | Header .meta spans | |
blocks[] | .block sections | Phase badge: warmup=green, main=orange, cooldown=blue |
Each exercise within a block:
imageUrl → <img> src (CDN: cdn.bestyou.ai)name → h3sets, reps, weight, rpe, rest → .rx-pill spansnotes → .exercise-notestargetMuscle, exerciseType → .exercise-cuesUser: "What's my day look like?" or "Morning briefing"
get_account_link_status → verify connectedget_daily_briefing → render briefing widgetget_todays_action_plan → render action plan widgetUser: "How am I doing?" or "Show my progress"
get_progress_snapshot → render snapshot widgetUser: "I just had [food description]"
analyze_meal_text with the description → render meal widgetUser: "Give me a workout" or "[duration] [type] workout"
generate_workout with parameters → render workout widgetUser: "Weekly summary" or "How was my week?"
get_weekly_summary → render weekly widgetKeep text summaries alongside widgets brief and actionable: