Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

STAS Running Coach for Claude

REMOTE · STAS.RUN · SCANNED AUG 3

Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.

Available components

+9 this week 82 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security97
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
  • The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 4522 tokens (~161/item across 28 items; 20 tools + 8 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · stas.run

# add to Claude Code
claude mcp add --transport http run-stas-stas https://stas.run/api/mcp
# ~/.codex/config.toml
[mcp_servers.run-stas-stas]
url = "https://stas.run/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "run-stas-stas": {
      "type": "remote",
      "url": "https://stas.run/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add run-stas-stas --url https://stas.run/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  run-stas-stas:
    url: "https://stas.run/api/mcp"
// mcp.json
{
  "mcpServers": {
    "run-stas-stas": {
      "type": "http",
      "url": "https://stas.run/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +6
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 72

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://stas.run/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=stas.run CN=YE1,O=Let's Encrypt,C=US 6 Jul 2026 4 Oct 2026 ECDSA 256 ECDSA-SHA384 570c6ba73eac69d77374e3215031eb01c09
SANs: stas.run
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC secure

Validation of stas.run. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
run. present 37315 8 Verified
stas.run. present 2371 13 Verified
stas.run. Verified address RRset verified with the apex keys
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://stas.run/.well-known/oauth-protected-resource/mcp"

Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://stas.run/.well-known/oauth-protected-resource/mcp"
Header Value
strict-transport-security max-age=31536000; includeSubDomains
content-security-policy default-src 'self'; script-src 'self' 'unsafe-inline' telegram.org mc.yandex.ru www.googletagmanager.com www.google-analytics.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: telegram.org storage.ko-fi.com mc.yandex.ru www.googletagmanager.com; connect-src 'self' mc.yandex.ru www.google-analytics.com www.googletagmanager.com errors.stas.run; font-src 'self'; frame-src oauth.telegram.org; object-src 'none'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

Protected resource metadata

Document https://stas.run/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://stas.run/api/mcp
Authorisation server https://intervals.stas.run
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://stas.run/api/mcp Verified 200
http (plaintext) http://stas.run/api/mcp HTTPS enforced 308 https://stas.run/api/mcp
MCP tools — 20 exposed · ~3,963 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
commit_goal_result_change ~80

Commit one previewed goal, start, activity-link, or result change. Call only after the user explicitly confirms the exact preview from preview_goal_result_change. The server rejects stale data and returns the new authoritative editing state.

NameTypeReqDescription
changeIdintegeryesPreview id returned by preview_goal_result_change. Commit only after the user confirms that exact preview.

No output schema declared.

No examples provided.

commit_profile_section_change ~98

Commit a previously previewed rules or profile memory change. Call this only after the user explicitly confirms the exact full text shown for that preview. If preview returned noChange=true, do not call commit. The server updates the profile only if the section hash still matches the preview.

NameTypeReqDescription
changeIdintegeryesPreview change id returned by preview_profile_section_change. Call only after the user explicitly confirms the exact full text shown for this preview.

No output schema declared.

No examples provided.

create_note_event ~159

Create or update NOTE events in Intervals. dry_run is required: false writes the note, true previews only. Send category=NOTE and external_id=note:YYYY-MM-DD:<slug>. Use all-day local times for normal notes, keep description short, and omit type, moving_time, icu_training_load, and workout_doc. For weekly review notes or other notes that apply to the whole week, send for_week=true; omit it or use false for ordinary notes. Do not create a seven-day date range for weekly notes; keep one all-day anchor date and use for_week=true.

NameTypeReqDescription
dry_runbooleanyesRequired. false writes to Intervals.icu; true only previews without writing.
eventsarrayyes

No output schema declared.

No examples provided.

create_plan_event ~1,162

Create or update planned WORKOUT events in Intervals. For changes to an existing STAS workout, keep the same external_id and call this tool again; do not delete the day/window just to edit time, name, note, load, color, or workout_builder. This tool is self-contained; do not look for SKILL.md or examples in the athlete's calendar. dry_run is required: false writes the event, true previews only. Send activity_type as Run/Ride/Swim/Workout/WeightTraining/Yoga/Pilates/Stretching/Walk/Hike/Elliptical/NordicSki/HighIntensityIntervalTraining/Other, stas_note for the human workout note, and external_id=plan:YYYY-MM-DD:<slug>. Do not send low-level Intervals fields category, type, sport, workoutType, target, description, workout_doc, icu_workout, filename, or file_contents. The server maps activity_type to Intervals type and category=WORKOUT and infers Intervals target=HR/PACE/POWER from Run/Ride workout_builder only. Use local datetimes without a timezone suffix, e.g. 2026-05-13T08:00:00, not 2026-05-13T08:00:00+03:00. workout_builder is mandatory for any interval/key workout save, mainly Run/Ride intervals; never save intervals as prose-only. Omit workout_builder only for easy/simple workouts without structured steps. If validation fails, inspect error.data.issues[].path, fix that exact event field, and retry only after changing the invalid field. If you use workout_builder, do not include ## STAS or ## Workout; the server adds wrappers. Builder headers and repeat headers are plain lines without '-', e.g. 'Warmup', 'Main Set 5x', 'Cooldown'. Actual step lines start flush-left with '- ' and contain duration/distance plus a target, e.g. '- 1km 4:25/km-4:35/km Pace', '- 10m 75%', or '- Recovery 90s Z1 HR'. For swim workouts, distance-led steps such as '- 400m easy' and '- 6 x 50m build' are allowed. For HR-only workouts, every structured step target should use HR syntax like '- 10m Z2 HR' or '- 3m Z4 HR'. Do not write '- Warmup' followed by indented child bullets. Use '1km'…

NameTypeReqDescription
dry_runbooleanyesRequired. false writes to Intervals.icu; true only previews without writing.
eventsarrayyesExample real interval write arguments. Replace the date/time and paces, but keep this exact JSON shape. Use activity_type, stas_note, and mandatory workout_builder for interval/key workout saves. wor…

No output schema declared.

No examples provided.

delete_note_events ~209

Delete STAS note events. For one specific note, pass external_ids with the exact note:YYYY-MM-DD:<slug> id; external_id as one string is accepted as a compatibility alias. Use oldest/newest window deletion only when replacing a whole note set in that date window. Do not delete user-created notes without a note: external_id. dry_run is required: false deletes, true previews only.

NameTypeReqDescription
dry_runbooleanyesRequired. false writes to Intervals.icu; true only previews without writing.
external_idCompatibility alias for deleting one exact STAS event id. Prefer external_ids for multiple ids.
external_idsarrayExact STAS event ids to delete. Use this for deleting specific workouts or notes without clearing the whole day/window.
neweststringEnd date for full-window replacement deletes. Required unless external_ids is provided.
oldeststringStart date for full-window replacement deletes. Required unless external_ids is provided.

No output schema declared.

No examples provided.

delete_plan_events ~221

Delete STAS plan events. For one specific workout, pass external_ids with the exact plan:YYYY-MM-DD:<slug> id; external_id as one string is accepted as a compatibility alias. Use oldest/newest window deletion only when the user is replacing the whole STAS plan in that date window. Do not use window deletion for simple edits; update with create_plan_event using the same external_id instead. dry_run is required: false deletes, true previews only.

NameTypeReqDescription
dry_runbooleanyesRequired. false writes to Intervals.icu; true only previews without writing.
external_idCompatibility alias for deleting one exact STAS event id. Prefer external_ids for multiple ids.
external_idsarrayExact STAS event ids to delete. Use this for deleting specific workouts or notes without clearing the whole day/window.
neweststringEnd date for full-window replacement deletes. Required unless external_ids is provided.
oldeststringStart date for full-window replacement deletes. Required unless external_ids is provided.

No output schema declared.

No examples provided.

get_activity_detail ~100

Load a compact read-only passport for one completed workout after identifying its training_id with get_trainings. Use for detailed one completed workout questions about intervals, laps, splits, terrain, weather, efforts, segments, and data quality. The response omits source payloads, route coordinates, latlng, and raw stream arrays.

NameTypeReqDescription
training_idstringyesTraining id returned by get_trainings. Load get_trainings first to identify the exact workout.

No output schema declared.

No examples provided.

get_editable_goals_results ~56

Read the complete bounded editing state for general goals, calendar-linked starts, race results, standalone results, and legacy results. Stable public IDs and dataVersion are required for every later preview. This tool does not change anything.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_goal_activity_candidates ~70

Read safe nearby activity candidates for one exact start. Use the returned opaque selectionId when previewing result_link_activity. This tool does not change the start, activity, or result.

NameTypeReqDescription
goalPublicIdstringyesStable public ID of one event goal returned by get_editable_goals_results.

No output schema declared.

No examples provided.

get_planned_events ~49

Read planned events from the Intervals calendar in a date window. Use this before rewriting or replacing an existing STAS plan.

NameTypeReqDescription
neweststringyes
oldeststringyes

No output schema declared.

No examples provided.

get_trainings ~227

Load one bounded, size-safe list of completed workouts. Default mode is a rich index for chronology, load, reports, compact summaries, and choosing training_id. Set full=true only for analysis-rich comparison across multiple workouts; it adds a bounded compact interval projection. For one selected workout, use get_activity_detail instead of full=true.

NameTypeReqDescription
fullbooleanOptional analysis-rich list mode for comparing multiple completed workouts in a bounded date window. It adds a size-safe compact interval projection, but is not raw data and is not the detailed view…
limitintegerMax trainings per page. Server cap is 50.
neweststringEnd boundary date in YYYY-MM-DD, exclusive. To load one date, set newest to the next calendar date, for example oldest=2026-06-21 and newest=2026-06-22.
oldeststringStart boundary date in YYYY-MM-DD, inclusive.

No output schema declared.

No examples provided.

get_user_summary ~57

Start here for most conversations. Load the athlete's profile, goals, rules, recent load, current fitness context, performance evidence, optional bounded historical signals, planning guidance, and persistent STAS memory opportunities.

NameTypeReqDescription
sectionstring

No output schema declared.

No examples provided.

preview_goal_result_change ~130

Preview one exact change to a general goal, calendar-linked start, activity pairing, race result, standalone result, or legacy result. Always load get_editable_goals_results first and send its exact dataVersion. This never saves. Show the user the exact preview, including calendar/activity effects, and ask for explicit confirmation before commit_goal_result_change.

NameTypeReqDescription
commandyesOne exact goal, start, activity-link, or result change. Broad replace-all writes are not supported.
expectedDataVersionstringyesExact dataVersion returned by get_editable_goals_results. A stale version is rejected.

No output schema declared.

No examples provided.

preview_profile_section_change ~191

Create a controlled preview for rules or profile memory. Goals, starts, activities, and results must use preview_goal_result_change so stable IDs and calendar links are preserved. This does not update the athlete profile. Before commit, show the user the exact full text from the preview and ask for explicit confirmation of that exact text.

NameTypeReqDescription
diffSummarystringShort internal summary of the factual change. Do not include raw chat transcript.
newTextstringLegacy fallback full section text for rules or profile only.
previousHashstringyesHash returned by read_profile_sections for the same section. Used to prevent overwriting newer profile data.
sectionstringyesProfile memory section to update. Supports rules and profile when enabled by the server. Goals and results use preview_goal_result_change.
structuredobjectPreferred input. For rules/profile, send only the matching object.

No output schema declared.

No examples provided.

read_profile_change_detail ~62

Load the exact full text and hashes for one profile-memory record selected from read_profile_change_history. This is read-only and should be used only for details or before considering a restore.

NameTypeReqDescription
changeIdintegeryesChange id returned by read_profile_change_history.

No output schema declared.

No examples provided.

read_profile_change_history ~96

Read a compact paginated index of goals, rules, or profile memory changes. Text bodies and hashes are omitted. Use nextCursor for another page and read_profile_change_detail for one exact record.

NameTypeReqDescription
cursorintegernextCursor from the previous history page.
limitintegerCompact records per page. Default 10, maximum 20.
sectionstring
statusstring

No output schema declared.

No examples provided.

read_profile_sections ~48

Read controlled rules and profile memory with their hashes. Goals and results are available only through get_editable_goals_results. Use the returned hash as previousHash before previewing a rules/profile change.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

restore_profile_change ~114

Restore a committed profile, goals, or rules profile memory change back to its previous text. First load the exact record with read_profile_change_detail. For goals, restoring old-format labels is blocked; rebuild a canonical goals preview instead. Call this only after the user explicitly confirms the exact full text that will be restored.

NameTypeReqDescription
changeIdintegeryesCommitted change id to restore. Call only after the user explicitly confirms the exact full text that will be restored. Restore only succeeds when the current section still matches that change.

No output schema declared.

No examples provided.

save_strategy ~809

Save the athlete's long-term STAS strategy only after explicit user confirmation. Strategy is a compact long-term roadmap, not a calendar, not a weekly plan, and not a full coaching analysis. Target length is about 2500-4500 characters; hard maximum is 5000 characters. Required markdown sections: Goal chain, Current point, Weekly decision contract, Roadmap, Resources / risks, Review triggers / unknowns. Build the strategy from current goals, rules, profile, condition, training history, evidence, and calendar first; do not copy or paraphrase the previous saved strategy's wording, race labels, priorities, phase names, or workout examples unless current facts independently support them. For strategy-level work, use at least 8 weeks of weekly/load history when available and 12-26 weeks for season direction; combine it with exact bounded-list windows and selected detailed workout passports instead of using only 2-4 weeks. Treat every dated goal as a real planning input by default. Do not infer a single main goal from distance, later date, target result, profile order, or old strategy wording; use priority only when it is explicit in the current profile, goal comment, athlete message, or current coaching decision. B/C/training-race/no-full-taper wording changes peak depth and risk; it does not mean the race should be ignored unless the athlete explicitly says the result does not matter. The roadmap must be the main content and say what each block prepares directly, keeps ready in the background, and leaves out for now with a reason. Do not hide a block-driving goal behind vague background wording. Keep Weekly decision contract short; it is guardrails for the blocks, not the center of the strategy. Do not write day-by-day or 8-week calendar progression inside strategy; that belongs in block planning or calendar tools. Use for meaningful changes to goals, constraints, current position, roadmap, or long-term training logic, not for one-off weekly edits. Before calling this…

NameTypeReqDescription
strategy_mdstringyesCompact long-term STAS roadmap markdown, not a calendar, not a weekly plan, and not a full coaching analysis. Target length is about 2500-4500 characters; hard maximum is 5000 characters. Required se…

No output schema declared.

No examples provided.

whoami ~25

Check which STAS user is currently authenticated. Use only for diagnostics or reconnect troubleshooting.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.