io.github.matisdsp/fartlek
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FARTLEK_HOME | No | Overrides the data directory (default ~/.fartlek). | |
| GARMINTOKENS | No | Overrides the token location. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| garmin_briefA | Call FIRST for anything about TODAY: readiness, whether to train, current state. Zero arguments. Returns a fused go/modify/rest verdict against personal baselines, active alerts, yesterday's session with its activity_id, and today's planned workout. One session → garmin_activity; browsing → garmin_activities. |
| garmin_activitiesA | Browse the log and get activity IDs. One row per session, each carrying the activity_id garmin_activity accepts. Filter by date range and sport; truncation is disclosed with narrowing advice. |
| garmin_activityA | ONE session in depth: execution vs structure, rep-by-rep fade, decoupling, comparison to the closest past session, planned-vs-executed. Select by activity_id, by date, or omit both for the latest — add sport for the latest of that sport. 'splits' adds the lap table; 'full' adds an HR/pace curve. |
| garmin_athleteA | Reference card: zones, thresholds, PRs, goal and phase, baselines, injury notes, device data coverage. Call once when athlete context is unknown; it changes rarely. To change it, garmin_set_profile. |
| garmin_set_profileA | Athlete context the watch cannot know: goal race (date; a distance, or a fixed-time event like 24h with a target distance), phase, weekly availability, intensity preference, LT1 override. Local only; only provided fields change. Injuries and illness go to garmin_log. |
| garmin_logA | Subjective data the watch cannot capture: session RPE (1-10), Hooper wellness (fatigue, soreness, stress, mood, sleep quality, each 1-7), and notes — especially illness or injury (set flag; resolve when healed). Feeds sRPE load and caps the readiness verdict. Ask for RPE after discussing a session if missing. |
| garmin_syncA | Force a refresh and report freshness, or start a resumable historical backfill (backfill_days > 0, deepens sleep/HRV history). Use only if data looks stale — every other tool auto-refreshes. |
| garmin_fitnessA | Is training working: VO2max and efficiency trends, HR at a fixed pace, long-run durability, a race projection against the stored goal, and form projected to race day with taper guidance. Call for 'am I getting fitter', race planning, taper timing, goal feasibility. Set the goal with garmin_set_profile. |
| garmin_recoveryA | Sleep, HRV, resting HR and load structure vs personal baselines, plus the multi-marker overtraining audit. Call for tiredness, sleep, 'am I overtraining or getting sick', or when another tool flags recovery. OWNS overtraining questions. Single-day go/no-go is garmin_brief. |
| garmin_loadA | Multi-week dose: fitness/fatigue/form (CTL/ATL/TSB), ramp rate, ACWR, monotony/strain, and intensity drift vs this athlete's own norm. Call for 'am I training too much', ramp/taper dosing, periodization. Not single-day readiness (garmin_brief); overtraining physiology is garmin_recovery. |
| garmin_weekA | One week in session-level detail: load vs recent weeks, intensity distribution, a per-day session table with activity_ids, recovery summary, and plan compliance where a plan exists. Call for 'how was my week' or a specific week. Multi-week trajectory is garmin_load. |
| garmin_whats_changedA | Call for 'anything I should know?', 'what's new?', 'catch me up', or after days away. Scans every tracked metric and returns ONLY statistically significant changes, ranked safety-first; says 'nothing notable' when nothing tripped. Today's readiness is garmin_brief. |
| garmin_referenceA | How a number was computed and whether to trust it: formula, inputs, whether each threshold is a population default or personally derived, and the caveats. No arguments for the index; metric='acwr' for one in depth. |
| garmin_rawA | Bounded escape hatch to one named Garmin source, compacted and hard-capped. Use ONLY when a synthesis tool cannot answer and the user explicitly asks for raw values. Never a starting point. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| morning_briefing | Today's readiness, read in coaching order |
| weekly_review | Review the past training week |
| post_activity_debrief | Debrief one session by activity_id |
| race_readiness | Goal-race fitness, projection and taper |
| plan_next_week | Plan next week within load guardrails |
| injury_risk_check | Multi-marker overtraining / injury check |
| setup_athlete | Guided athlete-profile setup |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| athlete_snapshot | Mirror of garmin_athlete: zones, PRs, goal/phase, baselines, data coverage. |
| metrics_glossary | Mirror of garmin_reference: every formula, threshold provenance, and honesty notes. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/matisdsp/fartlek'
If you have feedback or need assistance with the MCP directory API, please join our Discord server