CalisthenicsCompanion-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CALICOMP_KEY | Yes | AES-256 encryption key in raw base64 (no prefix). Exported from the app alongside the PAT. | |
| CALICOMP_PAT | Yes | Personal Access Token (prefixed calicomp_pat_). Created in the CalisthenicsCompanion app. | |
| CALICOMP_SERVER_URL | No | Override the API base URL. Defaults to https://api.calicompany.de. | https://api.calicompany.de |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_historyA | Return sessions and set-logs within a date range (YYYY-MM-DD), newest-first, for a TARGETED detail lookup — a specific window, a specific exercise. For the athlete's overall standing, call |
| get_statsA | Compute app-consistent training statistics (e1RM, volume, set/session counts, trend) for a specific exercise ( |
| get_profileA | Return the authenticated user's profile: email, displayName, avatarUrl, isPremium, and account createdAt epoch. |
| list_templatesA | Return all non-deleted workout templates with their block and exercise counts. Use |
| get_templateA | Return one workout template with its blocks and template-exercises joined. Pass the UUID from |
| get_exercise_catalogA | Return the full exercise catalog with muscle groups, equipment, and optional localized names. Provide |
| get_planned_workoutsA | Return concrete calendar occurrences and their planned-workout roots for a required date window ( |
| get_training_stateA | The standard entry point for "how is the athlete doing" — a query-time-computed overview, rather than raw session-by-session history. In one call: the current and longest training streak in weeks plus session-frequency counts (consistency); the same radar-chart muscle balance data as the app's Analytics dashboard in all three app windows (muscleBalance); a plan-adherence short form — counts, ratio, and an honesty explanation about what removedOccurrenceCount does and does not mean (adherence); the most recently trained exercises with their direction labels (recentExercises); all-time personal records (personalRecords); and a short, deterministic narrative sentence built from these already-computed numbers, never a second model call. This tool stays narrow on purpose: it carries no point series and no pair lists. For per-exercise or per-format progress series, call get_progress. For the full adherence pair/missed lists, call get_adherence. For raw session history, call get_history. All calendar-day mapping binds to the athlete's own synchronized time zone, never the coach's own clock. |
| propose_plan_updateA | Propose a structural change to an existing workout template for human review. Against a CLASSIC template, pass an |
| propose_new_planA | Propose a brand-new workout plan (blocks + exercises) for human review. Never creates it directly — the proposal is transported to the coach inbox for accept/reject. Inline |
| propose_new_exerciseA | Propose a brand-new custom exercise for human review. Never creates it directly — the proposal is transported to the coach inbox for accept/reject. If the name matches an existing catalog exercise, returns the existing UUID instead of proposing a duplicate. |
| propose_planned_updateA | Propose a change to the calendar for human review — name an intent, never a raw envelope. Four intents: move_occurrence (reschedule one occurrence, identified by rootId + occurrenceDate, to newDate), cancel_occurrence (cancel one occurrence, identified by rootId + occurrenceDate), schedule_workout (create a standalone or recurring root for templateId on date, optionally recurrenceRule), and change_series_rule (replace rootId's recurrence rule at scope whole_series or this_and_following — the latter requires cutoffDate and splits the series there). All root/template ids and dates come from get_planned_workouts. Rejects with a named cause — no network call — for an unknown root or template, an occurrenceDate that is not actually an occurrence of that root, a recurrence rule that fails allowlist validation, a root with no recurrence rule to change, or a recurrenceGroupId group that is not fully intact. Never mutates directly — the proposal is transported to the coach inbox for accept/reject. |
| get_suggestionsA | List the coach's own proposals as cheap summary rows, newest first: id, type, status, created date, a human-readable target label, and a short rationale. No payload included. Call this first; call |
| get_suggestionA | Return one of the coach's own proposals in full, including |
| withdraw_suggestionA | Retract one of your own proposals that is still pending — the single named exception to the propose-only boundary. Sets its status to withdrawn; the proposal is NOT deleted, its audit row survives and stays fully readable through |
| get_coach_parametersA | Report the seven training-state tuning parameters: their default values, allowed ranges, and current values in one call. Call this BEFORE calling set_coach_parameters — it is the right first step to learn what can be set and what it currently is, rather than discovering the ranges by trial and error. |
| set_coach_parametersA | Set one or more of the seven training-state tuning parameters. Call get_coach_parameters first to learn the defaults, allowed ranges, and current values. Rejects an out-of-range value or an invalid uncertainThreshold/matchThreshold combination before any change reaches the server. Returns the resulting overall parameter state. |
| get_adherenceA | Answer "how well does the athlete keep to the plan" over a window and tolerance you choose. Without |
| get_progressA | Two progress views in one tool, selected by |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
The read-path tools (get_training_state, get_stats, get_adherence, get_progress, get_history) share statistical scope, but each has explicit carve-outs for what it does and does not return, which prevents serious misselection. The propose_* and suggestion tools are cleanly distinct from each other and from the reads.
All tool names follow a consistent verb_noun snake_case pattern: get_* for reads, list_* for collections, propose_* for proposals, set_* for parameters, and withdraw_* for the one mutating exception. There is no mixed casing or vague verb usage.
At 19 tools, the server is slightly above the ideal 3-15 band, but the count is justified by the breadth of the coach workflow: reads, analytics, parameters, proposals, and suggestion management. The set feels dense rather than bloated.
The tool surface covers the full coach workflow: raw history, computed training state, adherence, progress, templates, planned workouts, catalog, coach parameters, and proposal-based changes for plans, exercises, and calendar events, plus suggestion lifecycle management. Intentional gaps like accept/reject are external to the MCP boundary and clearly documented.