mcp-registry/run.stas/stas · v1.0.2
As of 2026-10-15 10:22 UTC, the Stas MCP server is unknown with a Glimind reliability score of 69/100 (grade C). It is reachable and asks for credentials (normal for servers that need an account or API key). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 60 outages in 90 days, with a median recovery of 2 minutes.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Claude Code
claude mcp add --transport http stas-mcp-server https://stas.run/api/mcp
Claude Desktop · Windsurf · Cline (mcpServers JSON)
{
"mcpServers": {
"stas-mcp-server": {
"type": "http",
"url": "https://stas.run/api/mcp"
}
}
}
Third-party server, listed as discovered. Review its source before installing.
3 tool definition(s) exceed ~1,200 tokens each (largest: preview_goal_result_change, ~3,648).
Move long reference material out of descriptions (link a doc or expose a resource), drop repeated examples, and collapse large enums. Trimming these to ~600 tokens saves ~4,536 tokens every session.
21 of 21 tool(s) carry no readOnlyHint/destructiveHint annotations.
Annotate read-only tools with {"readOnlyHint": true}. Agents and gateways can then run them without a confirmation prompt, and route around destructive ones.
6 parameter(s) across 4 tool(s) have no description.
Add a "description" to each parameter with its format and an example ("ISO 8601 date, e.g. 2026-10-17"). This is the commonest cause of wrong arguments on the first call.
4 tool(s) look like they change state (create/send/delete/pay…) but declare no destructiveHint.
Set annotations {"readOnlyHint": false, "destructiveHint": true|false, "idempotentHint": …}. Clients use these to ask the user before a side effect and to auto-approve safe reads.
No tool declares an outputSchema.
Declare outputSchema and return structuredContent (MCP 2025-06-18+). Agents can then parse results without guessing, and chain tools reliably.
Requires authentication (Bearer); tool definitions could not be read anonymously.
If discovery should be public, allow initialize + tools/list without credentials and gate only tools/call. Directories and routers can then list your tools.
Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. 4 tool(s) still need parameter descriptions written by someone who knows the API. All of them as JSON: /v1/readiness/mcp-registry%2Frun.stas%2Fstas/fixes
{
"name": "create_note_event",
"description": "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 an",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"events",
"dry_run"
],
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"category",
"name",
"start_date_local",
"end_date_local",
"description",
"external_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Short note title."
},
"color": {
"enum": [
"green",
"blue",
"orange"
],
"type": "string",
"description": "Optional. Usually omit for notes."
},
"category": {
"type": "string",
"const": "NOTE",
"description": "Must be NOTE for calendar notes."
},
"for_week": {
"type": "boolean",
"description": "Optional. Set true only for notes that apply to the whole week, such as weekly review notes. Do not stretch start/end over seven days; keep the note as a single all-day anchor date."
},
"description": {
"type": "string",
"minLength": 1,
"description": "Short note text. Ordinary notes are normally 1-4 lines; weekly review notes use the 6-field coaching-memory format."
},
"external_id": {
"type": "string",
"pattern": "^note:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Stable STAS id in the form note:YYYY-MM-DD:<slug>."
},
"end_date_local": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?$",
"description": "All-day notes end at the next day YYYY-MM-DDT00:00:00."
},
"start_date_local": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?$",
"description": "All-day notes use YYYY-MM-DDT00:00:00."
}
},
"additionalProperties": false
},
"minItems": 1
},
"dry_run": {
"type": "boolean",
"description": "Required. false writes to Intervals.icu; true only previews without writing."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false
}
}{
"name": "create_plan_event",
"description": "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/Elliptica",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"events",
"dry_run"
],
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"activity_type",
"name",
"start_date_local",
"end_date_local",
"stas_note",
"external_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Short, specific workout name."
},
"color": {
"enum": [
"green",
"blue",
"orange"
],
"type": "string",
"description": "Optional. Defaults to green for Run/Walk/Hike/Elliptical/NordicSki/HighIntensityIntervalTraining, blue for Ride/Swim, orange for Workout/WeightTraining/Yoga/Pilates/Stretching/Other."
},
"stas_note": {
"type": "string",
"minLength": 1,
"description": "Required human-readable workout note. Use this for goal, adjustment rule, and simple workouts. Do not include a ## Workout block here."
},
"external_id": {
"type": "string",
"pattern": "^plan:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Stable STAS id in the form plan:YYYY-MM-DD:<slug>."
},
"moving_time": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Optional duration in seconds when it is known.",
"exclusiveMinimum": 0
},
"activity_type": {
"enum": [
"Run",
"Ride",
"Swim",
"Workout",
"WeightTraining",
"Yoga",
"Pilates",
"Stretching",
"Walk",
"Hike",
"Elliptical",
"NordicSki",
"HighIntensityIntervalTraining",
"Other"
],
"type": "string",
"description": "Required activity type for the planned workout. Use exactly one of Run, Ride, Swim, Workout, WeightTraining, Yoga, Pilates, Stretching, Walk, Hike, Elliptical, NordicSki, HighIntensityIntervalTraining, Other. Do not send category, type, sport, or workoutType."
},
"end_date_local": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?$",
"description": "Local end time, for example 2026-04-28T08:45:00."
},
"workout_builder": {
"type": "string",
"minLength": 1,
"description": "Native Intervals.icu Workout Builder text. Mandatory for interval/key workout saves; optional only for simple/easy workouts without structured steps. Use mainly for Run/Ride interval workouts with real steps. Do not include ## STAS or ## Workout; the server adds those wrappers."
},
"start_date_local": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?$",
"description": "Local start time, for example 2026-04-28T08:00:00."
},
"icu_training_load": {
"type": "number",
"minimum": 0,
"description": "Optional estimated training load when it is known. Intervals.icu may store the load but exclude or partially weight non-cardio types such as WeightTraining, Yoga, Pilates, Stretching, Workout, or Other in Fitness/Fatigue depending on the athlete settings."
}
},
"additionalProperties": false
},
"minItems": 1,
"description": "Example 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. workout_builder contains only native Intervals.icu Workout Builder text: repeat headers do not start with \"-\", step lines are flush-left, and nested Markdown bullets are forbidden. {\"dry_run\":false,\"events\":[{\"activity_type\":\"Run\",\"name\":\"Intervals: 5x1000m\",\"start_date_local\":\"2026-05-13T08:00:00\",\"end_date_local\":\"2026-05-13T08:55:00\",\"stas_note\":\"Goal: controlled interval work without overreaching.\\nRule: if HR rises too fast or form breaks, stop after 4 reps.\",\"workout_builder\":\"Warmup\\n- 15m Z2 HR\\n\\nMain Set 5x\\n- 1km 4:25/km-4:35/km Pace\\n- Recovery 90s Z1 HR\\n\\nCooldown\\n- 10m Z1 HR\",\"external_id\":\"plan:2026-05-13:intervals-5x1000m\",\"color\":\"green\",\"moving_time\":3300}]}"
},
"dry_run": {
"type": "boolean",
"description": "Required. false writes to Intervals.icu; true only previews without writing."
}
},
"description": "Example 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. workout_builder contains only native Intervals.icu Workout Builder text: repeat headers do not start with \"-\", step lines are flush-left, and nested Markdown bullets are forbidden. {\"dry_run\":false,\"events\":[{\"activity_type\":\"Run\",\"name\":\"Intervals: 5x1000m\",\"start_date_local\":\"2026-05-13T08:00:00\",\"end_date_local\":\"2026-05-13T08:55:00\",\"stas_note\":\"Goal: controlled interval work without overreaching.\\nRule: if HR rises too fast or form breaks, stop after 4 reps.\",\"workout_builder\":\"Warmup\\n- 15m Z2 HR\\n\\nMain Set 5x\\n- 1km 4:25/km-4:35/km Pace\\n- Recovery 90s Z1 HR\\n\\nCooldown\\n- 10m Z1 HR\",\"external_id\":\"plan:2026-05-13:intervals-5x1000m\",\"color\":\"green\",\"moving_time\":3300}]}",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false
}
}{
"name": "delete_note_events",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"dry_run"
],
"properties": {
"newest": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date for full-window replacement deletes. Required unless external_ids is provided."
},
"oldest": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date for full-window replacement deletes. Required unless external_ids is provided."
},
"dry_run": {
"type": "boolean",
"description": "Required. false writes to Intervals.icu; true only previews without writing."
},
"external_id": {
"anyOf": [
{
"type": "string",
"pattern": "^plan:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$"
},
{
"type": "string",
"pattern": "^note:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$"
}
],
"description": "Compatibility alias for deleting one exact STAS event id. Prefer external_ids for multiple ids."
},
"external_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"pattern": "^plan:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$"
},
{
"type": "string",
"pattern": "^note:\\d{4}-\\d{2}-\\d{2}:[a-z0-9]+(?:-[a-z0-9]+)*$"
}
]
},
"maxItems": 20,
"minItems": 1,
"description": "Exact STAS event ids to delete. Use this for deleting specific workouts or notes without clearing the whole day/window."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true
}
}Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:
curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/run.stas/stas"],"email":"[email protected]"}'Agents: watch_tool({"toolId": "mcp-registry/run.stas/stas"}) over MCP.
preview_goal_result_change ~3,648 tokenscreate_plan_event ~1,459 tokenspreview_profile_section_change ~1,229 tokenssave_strategy ~1,052 tokenscreate_note_event ~612 tokensStatic checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).
Operator? Fix these, then re-check live. Embed the readiness badge:
[](https://glimind.com/server/mcp-registry%2Frun.stas%2Fstas?ref=badge)
<a href="https://glimind.com/server/mcp-registry%2Frun.stas%2Fstas?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Frun.stas%2Fstas.svg" alt="MCP agent-readiness"></a>
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Frun.stas%2Fstas.svg :target: https://glimind.com/server/mcp-registry%2Frun.stas%2Fstas?ref=badge :alt: MCP agent-readiness
Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:14f814e3cb7d5c77…, first seen 2026-10-17, included at leaf 2242 of 18,264. Version history · verify what your client received.
Compare: most reliable productivity servers · most reliable knowledge servers · most reliable files servers · most reliable data servers · most reliable calendar servers
Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.
Claude Code
claude mcp add --transport http glimind https://glimind.com/mcp
Claude Desktop · Windsurf · Cline (mcpServers JSON)
{
"mcpServers": {
"glimind": {
"type": "http",
"url": "https://glimind.com/mcp"
}
}
}
As of 2026-10-15 10:22 UTC, the Stas MCP server is unknown with a Glimind reliability score of 69/100 (grade C). It is reachable and asks for credentials (normal for servers that need an account or API key). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 60 outages in 90 days, with a median recovery of 2 minutes.
Stas MCP server advertises 21 tools, including commit_goal_result_change, commit_profile_section_change, create_note_event, create_plan_event, delete_note_events.
Point your MCP client at this streamable-http endpoint: https://stas.run/api/mcp
Glimind scanned all 21 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.
Status page: 90-day uptime, every outage and how long it lasted.
Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.
Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.