Shape MCP server
Updated November 1, 2026
Shape runs a Model Context Protocol server, so assistants can look at what you’ve done, then plan, create and edit workouts for you.
https://shapecalendar.com/mcpConnect
Setup for Claude, ChatGPT, or any other MCP client.
Server URL and access
https://shapecalendar.com/mcp
Most clients handle sign-in for you. Paste the URL, a Shape screen opens in your browser, you approve, and that’s it. Clients that can’t do that use a token, which you create in Settings → API access.
Either way, a connection can read and change your activities. Every connected assistant is listed in Settings → API access, where you can disconnect it. What a connected AI can reach.
Available tools
Every tool is scoped to the authenticated user. Inputs and outputs mirror the REST API, so the same activity object and structured steps schemas apply.
Read
| Tool | What it does |
|---|---|
| list_activities | List planned and completed workouts. Filter by date range, sport type, completed, or includePaired. A fulfilled plan is returned as the completed workout; fetch plannedActivityId for the plan's description and steps. Imported workouts carry what the device recorded (calories, elapsed time, maxima, cadence, running dynamics, the device's own scores), left out when the source reported none. |
| get_activity | Fetch a single activity by id. If plannedActivityId is set, fetch that id for the plan's description and steps. |
| get_activity_details | Recorded time-series for one completed activity: heart rate, pace, cadence, power, elevation, GPS and timestamps, running dynamics and pedal balance when the device recorded them, plus lap splits, time in each training zone (Shape's model and the zones set on the device), and a pool swim's lengths. Narrow the response with channels and points. Only activities recorded by a connected device have this. |
| list_health_metrics | List daily health metrics (sleep, HRV, resting heart rate, body battery, VO2max, body composition, blood pressure, steps), merged across your connected sources into one record per day. Filter by from and to, a single source, or a metrics whitelist. Defaults to the last 90 days. |
| get_training_status | How you're doing right now: readiness with the drivers behind it, fitness/fatigue/form and your acute:chronic ratio, and the next week of planned load. Call after planning with no dates. Pass from and to together only for history. The snapshot includes training already done today; a ranged series is morning readiness and never does, so the two can differ for the same date. |
| get_profile | Your numbers that score training load and set zones: max, resting and threshold heart rate, FTP, threshold pace and swim threshold, each with where it came from (you, your device, Apple Health, your daily readings) and since when. Nothing on file means sessions that need it get no load. Also your gender, birth year, distance unit, first day of the week and pool length. |
Write
| Tool | What it does |
|---|---|
| create_activity | Create a planned or completed workout. Always set load on planned workouts. Set target=steps and pass a steps array for structured interval workouts. |
| update_activity | Update any subset of fields on an existing activity. |
| delete_activity | Delete an activity. Any paired counterpart is unlinked. |
| batch_create_activities | Create up to 100 activities in one call. |
| batch_update_activities | Update up to 100 activities in one call. Each entry includes its id. |
| batch_delete_activities | Delete up to 100 activities in one call. |
| pair_activities | Link a completed activity with the planned workout it fulfills. |
| unpair_activity | Remove the pairing between a planned and completed activity. |
| update_profile | Save numbers you give: max, resting or threshold heart rate, FTP, threshold pace (seconds per km) or swim threshold (seconds per 100 m). Saved as your own value from today, as typing it in settings does. A first value scores the sessions that had no load; a changed one applies from today. Also saves gender, birth year, distance unit, first day of the week and pool length. |
| connect_device | Connect a device from the chat. Returns, per device, whether it is already connected and otherwise a link to open: a one-time sign-in link for Garmin or Wahoo that works in any browser for 15 minutes, or the iPhone app for Apple Health. Pass provider when the athlete named their device, or omit it to get every option. Works before the account has a plan. |
| send_feedback | Send a message to the Shape team when you ask it to: a bug, a missing feature, or something that didn't work as expected. Replies go to the email on your account. Your account and the app you're using are attached. |
Errors
Auth failures use OAuth-style responses. Tool failures return an MCP error result with isError: true and a readable message.
401: missing or invalid token. TheWWW-Authenticateheader points clients at OAuth discovery.400: malformed request (validation, bad JSON, etc.)429: rate limit exceeded
Rate limits
30 tool calls per minute and 200 per hour, per user, shared with the REST API. Use the batch tools when you have many activities to create, update or delete.
REST API
Prefer raw HTTP? The same data is on the REST API.