Shape MCP server

Shape exposes a Model Context Protocol server so any MCP-compatible client (Claude, ChatGPT, Cursor, Raycast) can read and write your training. Authenticate once and the assistant can plan, create, update, and pair your workouts on your behalf.

Raycast users can also install the dedicated Shape Calendar extension.

Prefer raw HTTP? The same data is available over the REST API.

Connect in 3 steps

Pick your assistant. Connecting takes about a minute and needs no token to copy or paste.

  1. 1

    Add Shape as a connector

    In claude.ai → Settings → Connectors, click Add custom connector. Works the same in the Claude desktop and mobile apps.
  2. 2

    Paste the server URL

    Name it Shape and paste the URL below, then click Add.
    https://shapecalendar.com/mcp
  3. 3

    Connect and approve

    Click Connect next to Shape. A Shape consent screen opens in your browser: sign in, approve, and you’re done. Try asking Claude “What did I do this week?”

Endpoint & authentication

https://shapecalendar.com/mcp

The server speaks Streamable HTTP (single endpoint, sessionless) and supports two auth options: OAuth (recommended, discovered automatically by Claude and ChatGPT) or a static bearer token for clients without OAuth support.

Connections grant full read/write access to your activities. Manage and revoke them any time from Settings → API access. Connected clients show up as OAuth: <client name>; static tokens start with shape_, are user-scoped, and use the same format as the REST API. One token works for both transports.

Example prompts

Once connected, ask your assistant things like:

  • What did I do this week?
  • How was my last workout?
  • How much have I biked this month?
  • How has my resting heart rate and HRV trended over the last month?
  • Schedule a 10k run for tomorrow.
  • Create a training plan for next week with a run on Monday, bike on Wednesday, and swim on Friday.
  • Clear all my planned activities for this week.
  • Pair my completed long run with the planned long run on the same day.

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.

READlist_activities

List planned and completed workouts. Filter by date range, sport type, completed, or includePaired.

READget_activity

Fetch a single activity by id.

READget_activity_details

Recorded time-series for one completed activity: heart rate, pace, cadence, power, elevation, GPS and timestamps, plus lap splits and time in each training zone. Narrow the response with channels and points. Only activities recorded by a connected device have this.

READlist_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/to, a single source, or a metrics whitelist. Defaults to the last 90 days.

WRITEcreate_activity

Create a planned or completed workout. Set target=steps and pass a steps array for structured interval workouts.

WRITEupdate_activity

Update any subset of fields on an existing activity.

WRITEdelete_activity

Delete an activity. Any paired counterpart is unlinked.

WRITEbatch_create_activities

Create up to 100 activities in one call.

WRITEbatch_update_activities

Update up to 100 activities in one call. Each entry includes its id.

WRITEbatch_delete_activities

Delete up to 100 activities in one call.

WRITEpair_activities

Link a completed activity with the planned workout it fulfills.

WRITEunpair_activity

Remove the pairing between a planned and completed activity.

Errors

Auth failures use OAuth-style responses. Tool failures return an MCP error result with isError: true and a human-readable message.

  • 401: missing or invalid token. The WWW-Authenticate header points clients at OAuth discovery.
  • 400: malformed request (validation, bad JSON, etc.)
  • 429: rate limit exceeded
  • Tool error: { content: [...], isError: true } with the message in the text content

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.