catence
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CATENCE_DATA_DIR | No | Path to the Catence data directory. The --data-dir command-line option takes precedence over this variable. If neither is supplied, the legacy default remains .catence/ under the process working directory. | .catence/ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_athletesA | List athlete IDs and labels available to this shared Catence agent. No personal metrics are returned. |
| catence_statusA | Read sync state, data coverage, entity counts, stream availability, unresolved errors, and retrieval-index freshness. Read-only. Requires athleteId from list_athletes. |
| catence_sync_progressA | Read live progress heartbeats for active sync runs, plus the most recent completed or interrupted runs. Read-only. Requires athleteId from list_athletes. |
| start_detached_syncA | Write-only sync trigger, named like the other explicit lock-guarded write tools. Spawns one detached catence-data sync process for this athlete and returns immediately with the run handle and log file; it refuses while another sync run is active. Track the run with catence_sync_progress; this tool never waits for completion. Requires athleteId from list_athletes. |
| review_daily_recovery_loadA | Return source-cited daily health, training, and nutrition facts for a recovery/load review. It does not prescribe a training plan. Requires athleteId from list_athletes. |
| review_weekly_trainingA | Return source-cited health, training, and nutrition facts for the seven-day period ending on an optional date. It does not prescribe a training plan. Requires athleteId from list_athletes. |
| review_activity_deep_diveA | Return canonical activity identity, source summaries, and structured intervals. Call read_series separately only when a specific sampled metric is required. Requires athleteId from list_athletes. |
| describe_dataA | List cataloged datasets, fields, units, permitted filters/groupings, providers, and time coverage. Read-only. Requires athleteId from list_athletes. |
| describe_datasetA | Read a compact schema, permitted filters/groupings, provenance fields, and coverage for one cataloged dataset. Read-only. Requires athleteId from list_athletes. |
| read_seriesA | Read cataloged numeric series with deterministic cursor pagination and automatic stream downsampling. metrics must be numeric catalog columns; place identifiers and other strings in filters. Call describe_dataset first if the fields are uncertain. Requires athleteId from list_athletes. |
| aggregate_dataA | Declarative aggregation over one cataloged dataset. A timeBucket adds a time_bucket field, which can be used in orderBy. No joins, arbitrary expressions, or file paths. Requires athleteId from list_athletes. |
| analyze_seriesC | Run deterministic rolling statistics, baselines, correlations, seasonal comparisons, or trends on a cataloged series. Requires athleteId from list_athletes. |
| fit_series_modelB | Fit a bounded OLS, Theil–Sen, quadratic, or cubic descriptive model. Not a sport-performance model. Requires athleteId from list_athletes. |
| activity_decouplingA | Derive aerobic decoupling (Pa:Hr for running using speed/HR, Pw:Hr for cycling using power/HR — drift across steady first/second halves) and grade-adjusted pace (GAP, Minetti 2002 cost model) from stored activity_samples for one activity. Returns null with explanatory caveats when samples are insufficient, walk-heavy, or stop-heavy. Derived values are descriptive only and never overwrite provider-supplied decoupling/GAP. Read-only. Requires athleteId from list_athletes. |
| wellness_correlateA | Calculate a compact daily Pearson or Spearman correlation between curated wellness and training metrics, with an optional -7 through +7 day lag scan. Descriptive only. Requires athleteId from list_athletes. |
| wellness_baselinesA | Return trailing means, standard-deviation bands, latest values, and latest z-scores for common recovery and training metrics. Missing values remain missing. Requires athleteId from list_athletes. |
| wellness_anomaliesB | Find daily recovery and wellness outliers by z-score and group dates with anomalies across multiple signals. This does not diagnose or prescribe. Requires athleteId from list_athletes. |
| wellness_coverageA | Report present and missing dates for curated wellness/training metrics, plus unresolved extraction errors. Missing data is never interpreted as rest or a health outcome. Requires athleteId from list_athletes. |
| get_ftp_historyB | Return normalized cycling FTP settings and activity-summary observations with source-aware preferred daily values. Read-only. Requires athleteId from list_athletes. |
| readiness_baselineA | Combine the full performance-indicator set — running lactate threshold (pace/power/HR), VO₂max, race predictions, fitness trend, endurance score, and FIT-derived power bests/coverage — as trends in one call. Use this before any single-activity comparison for race-readiness or fitness-target questions. Requires athleteId from list_athletes. |
| resolve_event_courseA | Given a Garmin/Intervals eventId, return the courseId it references and whether that course geometry has been synced. When geometry is absent, the result carries an explicit caveat so a prior course profile is never reused. Optionally pass pastActivityId to diff the event course against that activity's course. Requires athleteId from list_athletes. |
| get_vo2max_historyA | Return normalized Garmin VO₂max observations for exactly one sport. For running, pass sport: running (or run): Garmin supplies that series with raw sport generic, which is preserved in each row. Cycling remains separate. Omit sport only to inspect available source labels. Read-only. Requires athleteId from list_athletes. |
| find_activitiesA | Find canonical activities by sport, distance, name, and date. Results are paginated and transparently flag likely-race signals without claiming provider-confirmed race metadata. Read-only. Requires athleteId from list_athletes. |
| get_swim_lapsA | Return source-aware swim lengths when a provider actually supplied them, plus Garmin detected and Intervals.icu auto-detected sets. A missing length list is reported as unavailable; laps are never reconstructed from samples. Requires athleteId from list_athletes. |
| swim_progress_reportA | Compare Garmin swimming summaries and data completeness over a date range, optionally within one pool length. It does not derive pace trends from moving time divided by distance. Requires athleteId from list_athletes. |
| get_activity_segmentsA | For a selected activity’s segments, climbs, KOM/PRs, or per-segment analysis: automatically hydrate the matching Strava activity before returning its persisted segment efforts. Use this before saying segment data is unavailable. Requires athleteId from list_athletes. |
| power_curve_trendA | Return monthly bests for selected power durations from an explicit sport or sport family, including the supporting activity and source type. Read-only. Requires athleteId from list_athletes. |
| power_coverage_reportA | Report powered activities and the complete duration-best inventory for an explicit sport or sport family. Uses Garmin FIT-derived power, not sparse activity summaries. Read-only. Requires athleteId from list_athletes. |
| latest_cycling_activitiesA | List Garmin cycling source records without duplicate Intervals summaries, optionally flagging multisport parent records. Read-only. Requires athleteId from list_athletes. |
| cycling_progress_reportA | Combine source-aware FTP and VO₂max histories with monthly canonical volume/load and labelled power-curve trends. Read-only and descriptive. Requires athleteId from list_athletes. |
| query_read_only_dataA | Advanced fallback after describe_data/describe_dataset: one parameterized SELECT or WITH … SELECT over cataloged views only. Do not query information_schema, DuckDB system tables, or uncataloged physical relations. Results use deterministic cursor pagination and always report whether they are incomplete. Filesystem access, extensions, DDL, and mutation are rejected. Requires athleteId from list_athletes. |
| search_contextA | Search compact generated activity, plan, nutrition, and message context. Results identify authoritative follow-up tools rather than making numerical claims. Requires athleteId from list_athletes. |
| hydrate_strava_activityA | Write-only targeted enrichment. Safely matches exactly one Catence activity/source to Strava, then archives and persists its activity detail, gear assignment, and segment efforts. For a segment/climb request, prefer get_activity_segments, which invokes this prerequisite automatically. Requires athleteId from list_athletes. |
| hydrate_recent_strava_activitiesA | Write-only targeted batch enrichment. Select an explicit list or a bounded date/sport window; Catence hydrates one activity at a time and reports every outcome. Requires athleteId from list_athletes. |
| hydrate_strava_segment_historyA | Write-only targeted enrichment. Fetches a persisted Strava segment and the authenticated athlete’s paged historic efforts; interrupted or throttled work is resumable. Requires athleteId from list_athletes. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| daily_recovery_load_review | Ask for a source-cited recovery and training-load review for one date. |
| weekly_training_review | Ask for a source-cited seven-day training review ending on an optional date. |
| activity_deep_dive | Ask for an evidence-first deep dive into one canonical Catence activity. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| athletes | |
| tools |
TDQS
Scored across 35 tools
Most tools map cleanly to distinct resource/action pairs (e.g., describe_data vs describe_dataset, read_series vs aggregate_data). A few pairs like readiness_baseline/wellness_baselines and catence_status/catence_sync_progress could be confused, but their descriptions generally clarify the boundary.
The vast majority of tools follow a consistent snake_case verb_noun pattern like review_*, get_*, describe_*, and hydrate_*. Minor deviations such as activity_decoupling, wellness_correlate, and catence_status keep it from a perfect 5, but the overall naming is predictable.
At 35 tools, the surface is large and exceeds the 'too many' threshold for most agent-facing servers. Even for a broad athlete analytics domain, the selection burden is significant, and several related reporting tools could plausibly be consolidated.
The set covers the apparent athlete-analytics domain well: activity retrieval, series querying, statistical analysis, wellness metrics, cycling/swimming/running reports, sync control, and Strava enrichment. Minor gaps exist, such as no direct plan or nutrition detail tool despite search_context indexing those concepts, but core workflows generally resolve without dead ends.