Skip to main content
Glama

Show a P.R.O. widget

show_widget
Idempotent

Render one of the user's P.R.O. widgets inline in the chat and return the same data as JSON. key is one of: today, steps, sleep, heart, stats, compare, workouts, workout, streak, goals, plan, load, proposal. today = rings and tiles for the latest synced day; steps/heart = one metric over the last week; sleep = last night's stage timeline plus the week as stage-coloured bars; stats = bar chart with the period and metric switchable inside the widget; compare = last 30 days against the 30 before; workouts = recent sessions; workout = the last session in detail; streak = active-day heatmap; goals = progress bars; plan = training plan progress and next sessions; load = training load and readiness. The card uses synced P.R.O. data and identifies missing data. workouts/workout accept an optional custom window (days) and a sport filter; other widgets have fixed windows sized to their layout. With key=workout and load_route=true, it may queue an iPhone upload of route and workout details; otherwise it reads already-synced data.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "key": "<key>"
    },
    "name": "show_widget"
  }
}

Input Schema

NameRequiredDescriptionDefault
keyYesWhich widget to show.
dateNoFor `workout`: show the session from this day (YYYY-MM-DD); with several that day, the longest one.
daysNoLook-back window in days. Applies to `workouts` (history, default 30) and `workout` (how far back to look for the most recent session, default 180). Ignored by other keys.
sinceNoFor `workouts`/`workout`: start of an exact period, YYYY-MM-DD — e.g. 'my runs in 2024' -> since 2024-01-01, until 2024-12-31.
sportNoSport filter for `workouts`/`workout`, e.g. 'running' or 'cycling' — `workout` then shows the latest session of that sport. Ignored by other keys.
untilNoFor `workouts`/`workout`: end of the period, YYYY-MM-DD.
load_routeNoFor `workout`: fetch the session's GPS route from the phone. Set it only when the user asks to see the route; the card's own button sets it too. Showing a workout without it never contacts the phone.
workout_idNoFor `workout`: show this session (the `id` from get_workouts) instead of the latest one.
proposal_idNoFor `proposal`: which proposed plan change to show (default: the latest).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=false and idempotent=true, and the description explains the reason — with key=workout and load_route=true it may queue an iPhone upload of route and workout details, while every other path only reads already-synced data. It also discloses that the card identifies missing data and that non-workout widgets have fixed windows. Remaining gaps are operational: no mention of latency, what happens while a phone upload is queued, or how render failures surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key glossary are front-loaded in a single dense paragraph with almost no filler; each widget entry earns its place by disambiguating a key the agent could otherwise confuse (stats vs compare, workouts vs workout). The run-on enumeration of thirteen keys in one block would be easier to scan as a list, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description covers this only by saying it returns the same data as JSON plus that the card flags missing data — enough to know the shape is chart-specific rather than tabular. For a nine-parameter tool with a phone-upload side path, the description is broadly adequate but thin on how the returned JSON is structured per key and on error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including date, days, since/until, sport, workout_id and proposal_id is already documented in the schema, and the schema already notes that days/sport are ignored by other keys. The description reinforces the cross-parameter rule ('workouts/workout accept an optional custom window and a sport filter; other widgets have fixed windows') but adds little beyond what the schema already carries; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — render a P.R.O. widget inline in chat and return the same data as JSON — and enumerates every accepted key with a one-line meaning, so an agent knows exactly what each invocation produces. This clearly separates it from data-fetching siblings like get_daily_metrics or get_workouts, which return raw data rather than a rendered card.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-key glossary effectively tells the agent which widget to pick for which user question (e.g. 'compare = last 30 days against the 30 before'), and load_route carries an explicit 'set it only when the user asks to see the route' rule. What is missing is an explicit statement of when to prefer this rendering tool over the sibling data tools (fetch_health_data, get_week_summary) for the same information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources