OTTTA MCP
Let's you talk to your OTTTA logged data & habit trackers.
Hosted MCP Server
npx add-mcp 'https://ottta.com/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Connect OTTTA to your AI assistant. Then just ask "How did my 5 km time change this month?" or say "Log 28 kg for seated row", and the assistant reads or logs it in OTTTA for you.
Server URL https://ottta.com/mcp · Works with ChatGPT, Claude, Cursor, VS Code and more · Also see the API
Getting started
MCP (Model Context Protocol) is an open standard that lets AI assistants use tools and data from other apps. The OTTTA MCP server gives your assistant access to your trackers, with your permission.
There are two ways to connect, depending on your app:
Either way, you choose whether the assistant may only read your data or also log values. Then just ask: the assistant decides when to use OTTTA, and most apps ask you before it makes a change.
Connecting your assistant
ChatGPT
- In ChatGPT, open Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
- Under Apps & Connectors, choose Create. Name it OTTTA, enter the MCP server URL
https://ottta.com/mcpand choose OAuth as authentication. - ChatGPT opens OTTTA: log in (or sign up), choose what ChatGPT may do and tap Allow.
- In a chat, turn on OTTTA under the + menu and ask your question.
Developer mode and its menu names depend on your ChatGPT plan and can change; see OpenAI's help on connectors if your screens look different.
Claude (claude.ai, desktop and mobile apps)
- On claude.ai or in the Claude desktop app, open Settings → Connectors and choose Add custom connector.
- Name it OTTTA, enter the URL
https://ottta.com/mcpand choose Add. - Choose Connect: Claude opens OTTTA. Log in (or sign up), choose what Claude may do and tap Allow.
- In a chat, make sure OTTTA is turned on under the tools menu, and ask away. The connector also works in the Claude mobile apps.
Custom connectors depend on your Claude plan; on a team or enterprise plan, an owner may need to add OTTTA first.
Disconnecting
Apps you connected by signing in are listed under Account → Connected apps, with when they were last used. Tap Disconnect and the app loses access straight away. Removing the connector in the app itself doesn't always end the connection in OTTTA, so disconnect it here too.
Connecting with a token
Developer tools connect with a token instead of signing in. In every example below, replace ottta_… with your token.
Claude Code
Run this in your terminal:
claude mcp add --transport http ottta https://ottta.com/mcp \
--header "Authorization: Bearer ottta_…"
Cursor
Add this to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json in a project:
{
"mcpServers": {
"ottta": {
"url": "https://ottta.com/mcp",
"headers": { "Authorization": "Bearer ottta_…" }
}
}
}
VS Code
Add this to .vscode/mcp.json in your project, or run MCP: Open User Configuration from the command palette:
{
"servers": {
"ottta": {
"type": "http",
"url": "https://ottta.com/mcp",
"headers": { "Authorization": "Bearer ottta_…" }
}
}
}
Other apps
Any MCP client that supports remote servers over Streamable HTTP works with the URL https://ottta.com/mcp: either by signing in (OAuth), or with the header Authorization: Bearer ottta_….
What you can ask
- "Log 28 kg for seated row."
- "I ran 5 km in 24:35 yesterday, put it in OTTTA."
- "Log 81.2 kg for body weight, with the note: after the holiday."
- "Add the note 'sore knee' to yesterday's 5 km time."
- "How did my body weight change over the last 30 days?"
- "Which of my gym exercises improved the most this month?"
- "Create a Running group with trackers for 5 km and 10 km times."
- "Rename my Gym group to Basic-Fit and make it violet."
- "Move Plank to the Core group."
- "Make a group to compare my body weight with my 5 km time."
- "I logged 82 instead of 28 for seated row just now. Delete that one."
- "Make a link to my body weight for my coach that works for 7 days."
- "Which of my trackers are shared? Turn off the link for 5 km."
The assistant knows your time zone, so "yesterday" is your yesterday. It knows for each tracker whether higher or lower is better, so it can tell you whether you improved.
Tools
These are the tools the assistant can use. With read-only access, it only gets the tools that read.
| Tool | What it does | Access |
|---|---|---|
get_account | The user's email address, time zone and today's date in that time zone. Use it to turn "today" or "yesterday" into a date. | Read |
list_groups | All the user's groups (like Gym or Running), with the number and ids of the trackers in each. A tracker can be in several groups. | Read |
get_group | One group with its name, color and the ids of its trackers. | Read |
list_trackers | All the user's trackers with their id, type, unit, groups, goal and latest value. Optionally only one group. "group" is the tracker's own group (it decides the color); "groups" lists every group it's in. | Read |
get_tracker | One tracker with its settings and latest value. | Read |
get_entries | The values logged for a tracker, newest first, optionally between two days. has_more is true when there are more than limit. | Read |
get_daily_values | One value per day for the last N days up to today, like the chart. value is null before the first logged value; carried_from is set on days without a value of their own. | Read |
log_value | Logs a value for a tracker, for today or an earlier day, optionally with a note. For a duration tracker, pass seconds or "m:ss" / "h:mm:ss". | Write |
create_tracker | Creates a tracker. Type "number" for numbers (with an optional unit like kg), "duration" for times. | Write |
create_group | Creates a group for trackers, like Gym or Running, or a group to compare trackers from different groups. Pass tracker_ids to put trackers in it; trackers that already have a group keep it and are also in this one. | Write |
update_tracker | Changes a tracker's name, unit, groups, aggregation, goal or color. Only the fields you pass change. The type (number or duration) can't be changed. To add a tracker to one more group, prefer update_group with tracker_ids. | Write |
delete_tracker | Deletes a tracker and ALL its logged values. This can't be undone. Only when the user clearly asks for it; tell them how many values will be lost (entry_count) and ask them to confirm first. | Write |
update_group | Changes a group's name, color or trackers. Only the fields you pass change. | Write |
delete_group | Deletes a group. Its trackers and their values are kept: in their other groups, or without a group. Only when the user asks for it. | Write |
update_entry | Adds, changes or removes the note of a logged value. The value and its day stay the same. Only with a note the user gives you. | Write |
delete_entry | Deletes one logged value, for example one logged by mistake. Only when the user asks for it. | Write |
list_shares | The share links that still work: for one tracker, or for all trackers. Each has the url, when it expires (null: never) and how many times it was opened. | Read |
share_tracker | Makes a link to a tracker. Anyone with the link can see its name, chart and all values, without an account, but can't change anything; they don't see the user's other trackers or email address. Only when the user asks to share; ask how long the link should work if they didn't say. Give the user the url. | Write |
delete_share | Turns off a share link: it stops working straight away. The tracker and its values are kept. | Write |
The tools work the same as the API: values are numbers, times are seconds (or "m:ss" when logging), and days are YYYY-MM-DD in your time zone.
Security and privacy
- You decide what the assistant can do. With read-only access, it can't change anything. The assistant never sees your password and can't change your account or other users' data.
- Your data goes to the assistant's provider. What the assistant reads from OTTTA is sent to the company behind that assistant, like Anthropic, OpenAI or Microsoft, and handled under their terms. Only connect OTTTA to assistants you trust with that data.
- Disconnect at any time. Disconnect the app or revoke the token on your account page, and the assistant loses access straight away. The account page also shows when each was last used.
- Check the address when you sign in. The OTTTA permission screen shows where you'll be sent back to, like chatgpt.com or claude.ai. Only allow access if you just started connecting that app yourself.
- Mistakes can happen. AI assistants can misunderstand you. Check what it logs; you can delete a value in the app or ask the assistant to delete it. Before it deletes a whole tracker, with all its values, the assistant is told to ask you first. If you don't want that risk at all, choose read-only access.
- Sharing only when you ask. The assistant can make a share link to a tracker, which lets anyone with the link see that tracker's values. It's told to do that only when you ask, and to ask you how long the link should work. You see and turn off all links on your account page under Shared links.
Technical details
URL
https://ottta.com/mcp
Transport
Streamable HTTP. Stateless: every request gets a direct JSON response; there are no sessions or server-sent events.
Authentication
OAuth 2.1 with authorization code and PKCE (S256), dynamic client registration and refresh tokens; access tokens last an hour. Metadata: /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. Or a personal API token: Authorization: Bearer ottta_….
Scopes
read and write. Without a scope, the user chooses on the permission screen.
Protocol versions
2025-11-25, 2025-06-18 and 2025-03-26.
Features
Tools, with input schemas, annotations (read-only or destructive) and structured results. No resources or prompts.
Limits
120 requests per minute per token, shared with the API.