← All Resources

Simma Connector Tools

Reference·52 tools, from the server as built on 2026-10-15

Generated from simma-mcp, source tree 1dae2fa. The text under each tool is what the assistant is told.

You just ask for what you want. “Visualise my ride from this morning.” “Why is my form down this week?” “Draft a note to Sam about Saturday’s swim.” The assistant reads the descriptions below, picks the tool the question needs, fills in the arguments from what you said, and works from Simma’s numbers rather than re-deriving them from laps.

This page is that list, laid out for a person: what each tool reaches, whether it only reads or also changes something, and what it takes. Filter by a plain word, or jump to a tool by its title. The connector signs in as you, so a tool reaches exactly what you see in the Simma web app and nothing else. Every assistant is shown the whole list; a coach tool called from an athlete’s account is refused before anything is read, with the athlete tool to use instead.

Read-only tools retrieve or compute and store nothing. Writes create or change a record. Replaces or removes marks a write that overwrites, deletes, unlinks or sends. A blue pill names anything the tool touches beyond Simma’s own records: a Google Doc or Sheet it reads, an email it sends, a public page it updates, a workout it adds to a Garmin watch. A violet pill marks a change inside Simma to someone other than the signed-in person: a coach changing an athlete’s goals or settings, an athlete joining or leaving a coach or writing to them.

The address is https://mcp.getsimma.com/mcp. For setting it up see Claude or ChatGPT; for what to ask once it is connected, see the athlete’s guide or, for coaches, Every Simma Connector Tool, and What to Ask For.

Athlete tools

For an athlete about their own training: sessions, status, progress, physiology, goals, coach, plan and workouts. A coach can use them about their own training too.

Get my physiology

get_my_physiology
Read-only

The athlete's own sleep, HRV, resting heart rate and stress. Daily physiology from the athlete's Garmin watch: nightly HRV, sleep (duration, stages, Garmin's sleep score), resting heart rate and all-day stress, one row per calendar date, plus a summary that compares the last 7 days with the athlete's own window. Read `coverage` first: it says how many nights actually carry a reading, and a watch not worn to bed produces nothing. The readings are measurements against the person's own recent days, not medical findings; report them as such and do not diagnose. Garmin's Health API reaches back about 30 days, so the window is capped there in practice.

Arguments
  • days · integerWindow in days, default 28.

Get my profile

get_my_profile
Read-only

The signed-in athlete's own record: name, preferred units, pool length, self-rated ability by sport, the threshold values (swim/run pace, cycling power or speed) Simma's load model scores against, body mass, whether the thresholds are locked against auto-estimation, and the ids of their coaches. Start here. Everything else on this server is about this person.

Arguments

Takes no arguments.

Read-onlyReads a Google Doc or Sheet

The richest single view of the athlete's own training, and the right starting point for any question about how it is going. Three weeks of activity bucketed by week with per-sport volume, training load with 7-day deltas and trend, per-sport training status, goals with days-to-event, the linked training plan, and pre-computed notable flags. Every number was computed by Simma against this athlete's own history. Treat the flags and figures as established fact: do not re-derive averages, recompute percentages, or second-guess a severity. A flag carries a machine name, a severity, the sentence a coach would say, and the values behind it — and sometimes a context line that changes the reading entirely. Read the context line before characterising a flag. This is the athlete's own view: their coach's private notes are not in it and cannot be requested through this server.

Arguments

Takes no arguments.

Get my training status

get_my_training_status
Read-only

Per-sport training status for the athlete: form score and zone, trend, detected pattern, days since last activity, session count and flags. Simma's own training-load model — prefer it over inferring load from raw activities.

Arguments

Takes no arguments.

Get my progress

get_my_progress
Read-only

Aggregate statistics and training form over a window: fitness, fatigue and form history, distance comparisons, and sport-specific statistics. Use for trends over weeks rather than individual sessions.

Arguments
  • activityType · “swimming” | “running” | “cycling” | “combined”Defaults to combined.
  • weeks · integerWindow in weeks, default 12.
  • system · “metric” | “imperial”

List my activities

list_my_activities
Read-only

The athlete's activities, newest first, trimmed to summary fields. Prefer a date window (weeks/months/days) over paging. Use get_my_activity_detail for the full breakdown of a single session.

Arguments
  • weeks · integerLook back this many weeks.
  • months · integer
  • days · integer
  • activityType · stringFilter, e.g. swimming, running, cycling, poolSwim, openWaterSwim.
  • pageSize · integerDefault 25.
  • page · integer
Read-only

Full detail for one activity, including every lap and the split structure. Large series (GPS traces, heart-rate and pace graphs, elevation profiles, stroke analytics) are summarised rather than inlined. Values are metric. Check preferredUnits from get_my_profile and convert when speaking to someone who uses imperial.

Arguments
  • activityId · string · requiredFrom list_my_activities.

Find my sessions by pacing shape

find_my_sessions_by_shape
Read-only

Every session in a window with its pacing shape, plus a roll-up. Answers "which of my swims faded in the main set this month" or "am I negative-splitting more often" from summaries Simma computed when each activity was saved — no lap data is read or averaged here. Two views per session. `mainSet` is the longest segment and is what a coach means by "did you fade". `session` is every lap including warm-up and cool-down. Prefer mainSet; mention session only when the two disagree and it matters. Shapes: negative_split (back half faster by >2%), even (within -2..+3%), faded (+3..8%), faded_hard (>8%). fadePercent is positive when they slowed. `structure: opening_burst` or `two_paced` means the set had two regimes and the shape was judged on the steady block; do not describe a two-paced set as fading. `lapsExcludedAsDeviceErrors` counts laps faster than physically possible that were set aside: a miscounting watch, not the athlete. Sessions with too few laps to judge are listed with shape null.

Arguments
  • weeks · integerWindow, default 12.
  • activityType · stringFilter, e.g. swimming, running, cycling.
  • shape · “negative_split” | “even” | “faded” | “faded_hard”Only sessions whose main-set shape matches. Default all.

List my goals

list_my_goals
Read-only

The athlete's goals — event name, discipline, date, target time and notes. Use alongside training status to judge whether load suits the time to race.

Arguments
  • status · “active” | “completed” | “archived”

List my coaches

list_my_coaches
Read-only

Who coaches this athlete, with specialty and when they connected. An athlete with no coach of their own is attached to Simma's house coach account, which will appear here; that account can read their training data, and the athlete should know that.

Arguments

Takes no arguments.

WritesReplaces or removesReaches your coach

Join a coach's squad with the invite code they gave the athlete. From then on that coach reads the athlete's training and can message them. If the athlete already has a coach of their own, Simma refuses and returns `switchRequired` with the current coach named and what leaving them means. Entering a second code almost always means changing coach, so put that to the athlete plainly: the current coach loses access, and their notes and any plan they linked go with them. Only with the athlete's explicit yes call again with `replace: true`; the athlete is asked to confirm directly where the client can do that, and the switch joins the new coach before removing the old so nothing can leave them coachless. Joining a coach from the Simma house account needs no confirmation; it simply happens.

Arguments
  • inviteCode · string · requiredThe coach's invite code, e.g. COACH-8X6VRQ.
  • replace · booleanReplace the athlete's current coach. Only after they have said yes.

Leave a coach

leave_coach
WritesReplaces or removesReaches your coach

Disconnect from one of the athlete's coaches. That coach loses access to the athlete's training, and their notes and any plan they linked go with the relationship; the athlete's own activities and goals stay. With no other coach left, the athlete lands on Simma's house coach account automatically. The house coach itself cannot be left. Cannot be undone from here: rejoining needs the coach's invite code. Get the athlete's explicit agreement first; where the client supports it they are also asked directly and the call stops if they decline.

Arguments
  • coachId · string · requiredThe coach's userId, from list_my_coaches.

Get my messages

get_my_messages
Read-only

Messages the athlete has received from their coach, newest first. Useful for what has already been said before replying.

Arguments
  • limit · integerDefault 20.

Update my settings

update_my_profile
WritesReplaces or removes

Set the athlete's own thresholds, ability levels, units, pool length, name, body mass or date of birth. Only the fields you pass change. Thresholds are what every training-load number is scored against, so a wrong one reshapes their whole history: read get_my_profile first, state the old and new value, and confirm with the athlete before calling this. Units are the ones a person speaks in — pace as M:SS, speed in km/h — and are converted to what Simma stores. `ftpLocked` stops Simma's own auto-estimation from overwriting a threshold set deliberately, such as one from a lab test. Birthdate is worth asking for: without it every heart-rate zone is derived from a default age of 40. It changes zones on activities processed from now on, not ones already stored.

Arguments
  • birthdate · stringDate of birth as YYYY-MM-DD. Sets the age that heart-rate zones are derived from; activities processed after the change use the new zones, earlier ones keep the zones they were scored with.
  • firstName · string
  • lastName · string
  • preferredUnits · “metric” | “imperial”
  • lapLength · numberPool length, in lapUnit.
  • lapUnit · “m” | “yd”
  • swimmingLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • runningLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • cyclingLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • swimThresholdPace · string | numberCritical swim speed pace per 100m, as M:SS or seconds (e.g. 1:45).
  • runThresholdPace · string | numberThreshold run pace per km, as M:SS or seconds (e.g. 4:30).
  • cyclingThresholdPowerWatts · number
  • cyclingThresholdSpeedKmh · number
  • bodyMassKg · number
  • ftpLocked · boolean

Create a goal

create_my_goal
Writes

Add a goal for the athlete: an event with a date and one target per discipline. A goal with one target takes that discipline; more than one makes it a multi-discipline goal. Each target needs a distance or a time. Confirm with the athlete before calling this.

Arguments
  • eventName · string · required
  • eventDate · stringYYYY-MM-DD.
  • targets · list of object · required
  • notes · string

Update a goal

update_my_goal
WritesReplaces or removes

Edit one of the athlete's goals: rename it, move the date, change the discipline or targets, add notes, or mark it completed or archived. Only the fields you pass change. Read list_my_goals first for the goalId and the current values, and confirm the change with the athlete before calling this. `targets` replaces the whole list, so include every target you want to keep. Distances are metres as a string; times are H:MM:SS.

Arguments
  • goalId · string · requiredFrom list_my_goals.
  • eventName · string
  • eventDate · stringYYYY-MM-DD.
  • discipline · “swimming” | “running” | “cycling”
  • targets · list of object
  • notes · string
  • status · “active” | “completed” | “archived”

Delete a goal

delete_my_goal
WritesReplaces or removes

Remove a goal permanently. Prefer update_my_goal with status `completed` or `archived` when the goal happened or was abandoned — that keeps the history the context builder reads. Delete only for mistakes, and confirm with the athlete first.

Arguments
  • goalId · string · requiredFrom list_my_goals.
WritesReplaces or removesReaches your coach

Send a message from the athlete to their coach, into the same thread the coach's emails arrive from. This is the one action on this server that makes anything visible to another person: nothing the athlete says to you reaches Simma or their coach except what goes through here. Read the exact text back to the athlete and get their explicit agreement before calling this — pass `confirm: true` only once they have said yes to those words. Where the client supports it, the athlete is also asked directly in a prompt showing the message; if they decline there, nothing is sent. Sending cannot be undone. Pass `coachId` only when the athlete has more than one coach; list_my_coaches gives the ids.

Arguments
  • body · string · requiredThe message, as the athlete agreed it.
  • subject · string
  • coachId · stringRequired only with more than one coach.
  • confirm · boolean · requiredThe athlete has heard the exact text and agreed to send it.

Check a workout

check_my_workout
Read-only

Check a workout written in Simma's workout format against the athlete's own pool and thresholds. Returns each mistake with the path to it, or the workout read back as plain lines with its totals and whether it can be sent to a watch. Changes nothing.

Arguments
  • workout · object · requiredA workout in Simma's workout format, version 1. Call get_workout_format first for the fields, rules and examples.

Send a workout to my watch

send_workout_to_my_watch
WritesSends to a Garmin watch

Send a workout in Simma's workout format to the athlete's own Garmin watch. The workout is added to the athlete's Garmin workout library, where they pick it on the watch; it is not scheduled on a date, and nothing already in Garmin is changed. Check it first and read the outline back to the person in plain words. Where the client supports it they are also asked directly, and the call stops if they decline. If Garmin refuses, its own message is returned.

Arguments
  • workout · object · requiredA workout in Simma's workout format, version 1. Call get_workout_format first for the fields, rules and examples.

Coach tools

For a coach about their squad: each athlete’s context and sessions, goals, messages and drafting, settings, plans and workouts. Listed to everyone; called from an athlete’s account, each is refused with the athlete tool to use instead.

List athletes

list_athletes
Read-only

List the coach's athletes with their current training status, last activity, active goals and unread message count. Start here — it returns the athleteId needed by every other tool. Includes a per-athlete status such as overreaching, monitor, disengaged, quiet, welcome-back or recovering. Quiet means past their own usual gap between sessions with nothing this week — due, not yet disengaged. Paged: returns up to `limit` athletes (default 50) and a `nextCursor` when there are more. Pass it back as `cursor` to continue; a page can be shorter than the limit and still carry a cursor, so keep going until `nextCursor` is absent. Most rosters fit in one page.

Arguments
  • status · “active” | “pending” | “inactive”Filter by relationship status. Defaults to all.
  • limit · integerAthletes per page, 1-200. Defaults to 50.
  • cursor · stringThe `nextCursor` from the previous page. Omit for the first page.

Get athlete coaching context

get_athlete_context
Read-onlyReads a Google Doc or Sheet

The richest single view of an athlete, and the right starting point before writing anything to them. Returns three weeks of activity bucketed by week with per-sport volume, training load with 7-day deltas and trend, per-sport training status, goals with days-to-event, the linked training plan, and pre-computed notable flags. Every number here was computed by Simma against this athlete's own history. Treat the flags and figures as established fact: do not re-derive averages, recompute percentages, or second-guess a severity. A flag carries a machine name, a severity, the sentence a coach would say, and the values behind it — and sometimes a context line that changes the reading entirely, such as a load spike that is a return from a break rather than overreaching. Read the context line before characterising a flag. Prefer this over assembling your own picture from list_athlete_activities.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.

Get training status

get_training_status
Read-only

Per-sport training status for one athlete: form score and zone, trend, detected pattern, days since last activity, session count and flags. This is Simma's own training-load model — prefer it over inferring load from raw activities.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.

Get athlete physiology

get_athlete_physiology
Read-only

Sleep, HRV, resting heart rate and stress for one athlete. Daily physiology from the athlete's Garmin watch: nightly HRV, sleep (duration, stages, Garmin's sleep score), resting heart rate and all-day stress, one row per calendar date, plus a summary that compares the last 7 days with the athlete's own window. Read `coverage` first: it says how many nights actually carry a reading, and a watch not worn to bed produces nothing. The readings are measurements against the person's own recent days, not medical findings; report them as such and do not diagnose. Garmin's Health API reaches back about 30 days, so the window is capped there in practice.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • days · integerWindow in days, default 28.

Get athlete stats

get_athlete_stats
Read-only

Aggregate statistics and training form for one athlete over a window, including fitness/fatigue/form history and active goals. Use for trends over weeks rather than individual sessions.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • activityType · “swimming” | “running” | “cycling” | “combined”Defaults to swimming.
  • weeks · integerWindow in weeks, default 12.
  • system · “metric” | “imperial”

List athlete activities

list_athlete_activities
Read-only

List an athlete's activities, newest first, trimmed to summary fields. Prefer a date window (weeks/months/days) over paging. Use get_activity_detail for the full breakdown of a single session.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • weeks · integerLook back this many weeks.
  • months · integer
  • days · integer
  • activityType · stringFilter, e.g. swimming, running, cycling, poolSwim, openWaterSwim.
  • pageSize · integerDefault 25.
  • page · integer

Find sessions by pacing shape

find_sessions_by_shape
Read-only

Every session in a window with its pacing shape, plus a roll-up. Answers questions like "which swims faded in the main set this month" or "is she negative-splitting more often" from summaries Simma computed when each activity was saved — no lap data is read or averaged here. Two views per session. `mainSet` is the longest segment (a swim's main set, the ride itself) and is what a coach means by "did they fade". `session` is every lap including warm-up and cool-down, so a structured swim often reads faded there while the main set was even or negative. Prefer mainSet; mention session only when the two disagree and it matters. Shapes: negative_split (back half faster by >2%), even (within -2..+3%), faded (+3..8%), faded_hard (>8%). fadePercent is positive when they slowed. paceVariationPercent is lap-to-lap consistency. `lapSource: splits` means the laps were derived from the pace series at the stated distance because no lap button was pressed — say so if you quote a lap number. Sessions with too few laps to judge are listed with shape null so you can see they existed; do not read anything into them. `structure: opening_burst` or `two_paced` means the set had two regimes — sprints then steady, or fast/easy alternating — and the shape was judged on the steady block; `rawShape` is what a naive whole-set split would say. Do not describe a two-paced set as fading. `lapsExcludedAsDeviceErrors` counts laps faster than physically possible that were set aside before judging: a miscounting watch, not an athlete.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • weeks · integerWindow, default 12.
  • activityType · stringFilter, e.g. swimming, running, cycling. Default all.
  • shape · “negative_split” | “even” | “faded” | “faded_hard”Only sessions whose main-set shape matches. Default all.

Get activity detail

get_activity_detail
Read-only

Full detail for one activity, including every lap and the split structure. Large series (GPS traces, heart-rate and pace graphs, elevation profiles, stroke analytics) are summarised rather than inlined. Use this to discuss a specific session. Values are metric. The document carries an imperial copy of each display tile, which is dropped here because it is the same data converted — it was a third of a ride's payload. Check the coach's or athlete's preferredUnits (get_coach_profile, get_athlete_profile) and convert when speaking to someone who uses imperial; do not report kilometres to a coach who works in miles.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • activityId · string · requiredFrom list_athlete_activities.

List athlete goals

list_athlete_goals
Read-only

An athlete's goals — event name, discipline, date, days until event, target time and notes. Use alongside training status to judge whether load suits the time to race.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • status · “active” | “completed” | “archived”
WritesReplaces or removesChanges the athlete’s account

Edit one of the athlete's goals: rename it, move the date, change the discipline or targets, add notes, or mark it completed or archived. Only the fields you pass change. Read list_athlete_goals first for the goalId and the current values, and confirm the change with the coach before calling this — it writes straight to the athlete's record. `targets` replaces the whole list, so include every target you want to keep. Distances are metres as a string; times are H:MM:SS.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • goalId · string · requiredFrom list_athlete_goals.
  • eventName · string
  • eventDate · stringYYYY-MM-DD.
  • discipline · “swimming” | “running” | “cycling”
  • targets · list of object
  • notes · string
  • status · “active” | “completed” | “archived”

Get message thread

get_messages
Read-only

Recent coach/athlete message thread, newest first. Useful for what has already been said before drafting anything new.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • limit · integerDefault 20.

Get athlete profile

get_athlete_profile
Read-only

One athlete's profile and coaching relationship: name, contact, preferred units, pool length, self-rated ability by sport, and threshold values (swim/run pace, cycling power) that Simma's load model scores against. Also returns any linked Google training plan and a summary of the last 12 weeks of activities. Use this for who the athlete is; use get_training_status for how they are going.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.

Get coach inbox

get_coach_inbox
Read-only

Every athlete conversation with at least one message, most recent first, with the last message and unread count for each. Answers "who is waiting on me" across the whole roster in one call, rather than get_messages per athlete.

Arguments

Takes no arguments.

Get my coach profile

get_coach_profile
Read-only

The signed-in coach's own record: name, business name, public slug, invite code, and the voice settings Simma applies when drafting athlete emails (tone of voice, coaching instructions, sign-off). Read these before helping write anything so the wording matches what Simma itself would send.

Arguments

Takes no arguments.

Update my coach profile

update_coach_profile
WritesReplaces or removesUpdates a public page

Edit the signed-in coach's own profile: business name, public slug, and the voice settings Simma applies when drafting athlete emails (tone of voice, coaching instructions, sign-off). Only the fields you pass change; pass at least one. Read get_coach_profile first for the current values and confirm the change with the coach before calling this — the voice settings shape every draft Simma writes for them from then on. `signOff` is rendered verbatim at the end of each email; use a newline to separate the closing phrase from the name. The slug must be unique across coaches — a 409 means it is already taken.

Arguments
  • businessName · string
  • toneOfVoice · string
  • coachingInstructions · string
  • signOff · string
  • slug · string3-30 chars, lowercase letters, digits and hyphens, starting and ending alphanumeric.

Check send confirmation

check_send_safety
Read-only

Report which safety gates are active for send_draft in this client. Run it before relying on send_draft: the strongest gate — asking the coach directly before each send — only exists if the client supports MCP elicitation, and the server cannot know that until a client connects. By default this reads what the client declared, which is a claim rather than proof. Pass `probe: true` to actually raise a throwaway confirmation prompt and find out whether it works. A client can advertise the capability and still fail to show anything, and only a probe catches that.

Arguments
  • probe · booleanActually raise a harmless test prompt to prove the gate works. Sends no email and changes nothing. Answer it either way.

Update an athlete's settings

update_athlete_profile
WritesReplaces or removesChanges the athlete’s account

Set an athlete's thresholds, ability levels, units, pool length, name, body mass or date of birth. Only the fields you pass change. Thresholds are what every training-load number is scored against, so a wrong one reshapes the athlete's whole history: read get_athlete_profile first, state the old and new value to the coach, and confirm before calling this. Units are the ones a coach speaks in — pace as M:SS, speed in km/h — and are converted to what Simma stores. Cycling threshold power comes from a power meter (95% of best 20-minute power is the usual estimate); threshold speed is the fallback for riders without one and is the whole basis of their load, so set it with care. Body mass only affects the climbing term of the speed-based cycling estimate; it is safe to ask the athlete for. `ftpLocked` stops Simma's own auto-estimation from overwriting a threshold the coach has set deliberately. Birthdate is worth asking for: without it every heart-rate zone is derived from a default age of 40. It changes zones on activities processed from now on, not ones already stored.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • birthdate · stringDate of birth as YYYY-MM-DD. Sets the age that heart-rate zones are derived from; activities processed after the change use the new zones, earlier ones keep the zones they were scored with.
  • firstName · string
  • lastName · string
  • preferredUnits · “metric” | “imperial”
  • lapLength · numberPool length, in lapUnit.
  • lapUnit · “m” | “yd”
  • swimmingLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • runningLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • cyclingLevel · integer1 learning, 2 beginner/casual, 3 intermediate, 4 advanced.
  • swimThresholdPace · string | numberCritical swim speed pace per 100m, as M:SS or seconds (e.g. 1:45).
  • runThresholdPace · string | numberThreshold run pace per km, as M:SS or seconds (e.g. 4:30).
  • cyclingThresholdPowerWatts · number
  • cyclingThresholdSpeedKmh · number
  • bodyMassKg · number
  • ftpLocked · boolean
WritesReplaces or removes

Set the coach's private notes on an athlete, or the specialty the coach works with them on. Notes are the coach's own memory of the athlete — training background, constraints, what they respond to — and are included in get_athlete_context, so what you write here shapes future drafts. `notes` replaces the whole text: read get_athlete_profile first and carry forward what should stay.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • notes · string
  • specialty · “general” | “swimming” | “running” | “cycling” | “triathlon”
WritesChanges the athlete’s account

Add a goal for the athlete: an event with a date and one target per discipline. A goal with one target takes that discipline; more than one makes it a multi-discipline goal. Each target needs a distance or a time. Confirm with the coach before calling this.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • eventName · string · required
  • eventDate · stringYYYY-MM-DD.
  • targets · list of object · required
  • notes · string
WritesReplaces or removesChanges the athlete’s account

Remove a goal permanently. Prefer update_goal with status `completed` or `archived` when the goal happened or was abandoned — that keeps the history the context builder reads. Delete only for mistakes, and confirm with the coach first.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • goalId · string · requiredFrom list_athlete_goals.
Writes

Store a message you have written to an athlete as a draft. Nothing is sent — the draft appears in Simma where the coach can read, edit and send it, and it is what send_draft takes. Read get_coach_profile first: the coach's tone of voice, coaching instructions and sign-off are what Simma itself writes with, and a draft that ignores them will not sound like them. Ground the content in get_athlete_context rather than in your own reading of the raw numbers. Returns the stored draft including the `sk` that send_draft needs.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • subject · string · requiredEmail subject line.
  • body · string · requiredPlain text body. Simma renders the HTML email at send time.
WritesReplaces or removesChanges the athlete’s account

End the coaching relationship with an athlete. They keep every activity and goal and land on Simma's house coach account; what goes is this coach's access to their training, the coach's private notes on them, and any training plan linked for them. The message thread stays stored but is no longer reachable from this roster. Cannot be undone from here: the athlete would need to join again with the coach's invite code. Get the coach's explicit agreement naming the athlete first; where the client supports it the coach is also asked directly and the call stops if they decline. Never remove several athletes from one approval.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
WritesReplaces or removes

Delete a draft that was never sent. Use it to clear a draft the coach decided against, or one you created and no longer need — otherwise it stays in the thread indefinitely. Drafts only. A message that has been sent cannot be deleted, and should not be: removing it would not unsend the email, but it would break the routing that delivers the athlete's reply back into the thread and erase the record of what was actually said.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • sk · string · requiredThe draft's sort key, from save_draft or get_messages.
WritesReplaces or removesSends an email

Send a saved draft to the athlete as a real email, immediately. This cannot be undone or recalled, and it arrives under the coach's name — the athlete has no way to tell it was written with an assistant. Show the coach the exact subject and body and get their explicit agreement before calling. Do not send on a vague instruction, and never batch sends across several athletes from a single approval. Where the client supports it, the coach is also asked to confirm directly and the send stops if they decline. `confirmSubject` and `confirmBody` must match the stored draft exactly, so a stale or mistaken `sk` cannot send a different message than the one that was approved. Take all three values from save_draft or get_messages rather than from memory.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • sk · string · requiredThe draft's sort key, from save_draft or get_messages.
  • confirmSubject · string · requiredThe draft's exact subject, as shown to the coach.
  • confirmBody · string · requiredThe draft's exact body, as shown to the coach.

Check a workout for an athlete

check_athlete_workout
Read-only

Check a workout written in Simma's workout format against one athlete's pool and thresholds. Returns each mistake with the path to it, or the workout read back as plain lines with its totals and whether it can be sent to that athlete's watch. Changes nothing.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • workout · object · requiredA workout in Simma's workout format, version 1. Call get_workout_format first for the fields, rules and examples.

Send a workout to an athlete's watch

send_workout_to_athlete_watch
WritesSends to a Garmin watch

Send a workout in Simma's workout format to one athlete's Garmin watch, on the coach's instruction. The workout is added to the athlete's Garmin workout library, where they pick it on the watch; it is not scheduled on a date, and nothing already in Garmin is changed. Check it first and read the outline back to the person in plain words. Where the client supports it they are also asked directly, and the call stops if they decline. If Garmin refuses, its own message is returned.

Arguments
  • athleteId · string · requiredThe athlete's userId, from list_athletes.
  • workout · object · requiredA workout in Simma's workout format, version 1. Call get_workout_format first for the fields, rules and examples.

For both

The same for an athlete and a coach.

How to write a workout

get_workout_format
Read-only

The rules and worked examples for Simma's workout format: a sport, then an ordered list of steps and repeat blocks, each step with an intent, one length and at most one target. Read this before writing a workout to check or send. Use it to turn a session from a training plan, or one you have designed with the person, into a structured workout a watch can run.

Arguments

Takes no arguments.

How to sign out of Simma

get_sign_out_instructions
Read-only

How to sign this assistant out of Simma, or switch to a different Simma account. Nothing is changed by calling this; it returns the steps and a sign-out link. Use it when the person asks to log out, disconnect, or sign in as someone else.

Arguments

Takes no arguments.

Not listed

  • History import tools (registered only where IMPORTS_ENABLED is on)

For what happens to the data a tool returns, see the privacy policy. Want a tool that is not here? Tell us what you want your assistant to be able to do, at coaching@getsimma.com, and we will build it.