Tally MCP server reference

For people who build agents and MCP clients. Agents can read the same facts as plain text in llms.txt.

Endpoint
https://mcp.tallyworkout.app/api/mcp
Transport

Streamable HTTP. No SSE-only mode.

Auth: sign-in

OAuth 2.1, authorization code + PKCE (S256), public client, dynamic client registration (RFC 7591). Scope: workouts. The user signs in on the consent page with their Tally account (email, Google, or Apple). They must use the same sign-in method as in the Tally app, or the assistant sees an empty account.

Auth: API key
Authorization: Bearer tally_ct_…

The user creates it in the Tally app under Settings → API keys and gives it to the client. A key is Read only, Read and plan, or Full access. A read-only key lists only the read tools. Keys do not expire; the user revokes them in Settings → API keys.

Register a client
POST https://mcp.tallyworkout.app/api/oauth/register{"redirect_uris": [...], "client_name": "..."}

Redirect URIs must be https, or literal 127.0.0.1 / [::1] / localhost loopback.

Discovery
https://mcp.tallyworkout.app/.well-known/oauth-authorization-serverhttps://mcp.tallyworkout.app/.well-known/oauth-protected-resourcehttps://mcp.tallyworkout.app/.well-known/mcp-server
Agent brief
https://mcp.tallyworkout.app/llms.txt

CLIENT CONFIG WITH A KEY

{
  "mcpServers": {
    "tally": {
      "url": "https://mcp.tallyworkout.app/api/mcp",
      "headers": {
        "Authorization": "Bearer tally_ct_…"
      }
    }
  }
}

Put the user's key in place of tally_ct_…. Field names differ by client.

Tools

A read-only key lists only the read tools.

TOOLACCESSWHAT IT DOES
get_training_contextReadReturns planned days from today, the weight unit and, with historyWeeks, recent workouts.
get_workout_historyReadReturns logged workouts, newest first, set by set.
get_exercise_progressReadReturns progress for up to 10 exercises over the last 365 days, with top sets and estimated 1RM.
get_planned_workoutReadReturns one planned day in full, with its version.
search_exercisesReadMatches exercise names to the user's recent exercises and the Tally library.
get_workoutReadReturns one completed workout by its id, set by set.
get_workout_versionsReadList the restorable versions of one finished workout, also a deleted one.
get_training_summaryReadReturns weekly totals for 1 to 12 weeks: workouts, sets, volume, sets per muscle, and missed or skipped planned days.
get_saved_workoutsReadReturns the user's saved and favorite workouts from the app, with their exercises.
get_exerciseReadReturns one exercise in full: the library details and instructions, or a custom exercise as last used.
plan_workout_dayWriteCreates or replaces one planned day.
plan_workout_rangeWriteCreates or replaces up to 31 planned days in one call.
update_planned_workoutWriteChanges part of one planned day: add, remove or change exercises.
move_planned_workoutWriteMoves a planned day to an empty date.
skip_planned_workoutWriteMarks a planned day as skipped, or restores it. Only the status changes.
delete_planned_workoutWriteRemoves a planned day and returns it, so you can undo.
log_workoutWriteLog a finished workout to the user's history (Full access).
update_workoutWriteChange one finished workout at its current version: fields, exercises or sets; the earlier content stays restorable for 7 days (Full access).
delete_workoutWriteDelete one finished workout at its current version; restorable for 7 days (Full access).
restore_workoutWriteMake an earlier version of a finished workout current again, within 7 days, also after a delete (Full access).
send_feedbackWriteSends a message from the user to the Tally team, at most 5 a day. Tally stores it with the account.

Rules your client should know

Finished workouts change only when the user asks

Four tools log, change, delete and restore finished workouts. They need a Full access key or an OAuth connection, the workout's version from get_workout, and a phone on the current Tally app (restore excepted). Each change can be undone for 7 days. The app shows one finished workout per date; a change that leaves two on a date returns sameDate.

Some days are protected

A day is protected when the user built or saved it in the app (source is not "mcp") or edited it (userModified is true). The plan, update, move and delete tools skip a protected day. Send overrideUserModified only when the user asks; plan_workout_range has no override.

Edits check the version

Read the day with get_planned_workout first. Send its version as expectedVersion with the edit. If the day changed after your read, nothing is written and the result reports a conflict.

Show the openInTally link

Results can include openInTally, a link that opens the day in the Tally app. Give it to the user.

Tally WorkoutFree · No ads
View in App Store