Setup guide
Connect maett over MCP
maett exposes your fitness data through the Model Context Protocol, so any MCP-compatible AI client can read your activities, sleep, and recovery — with your permission. This page walks you through the setup for the most common clients.
The endpoint
maett ships a single remote MCP server using the Streamable HTTP transport:
https://maett.com/api/mcpAuthenticate every request with a personal API key in the Authorization header:
Authorization: Bearer <your-api-key>Create a key from Settings → API keys. The full key is shown once — copy it before closing the dialog. Treat it like a password; anyone with the key can read your data.
Claude Code
Claude Code has first-class MCP support. The fastest way to wire up maett is the claude mcp add command:
claude mcp add --transport http maett https://maett.com/api/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Add --scope user to make it available across all projects, or --scope project to commit it as part of a repo’s .mcp.json.
You can also edit the config directly. In ~/.claude.json (user scope) or .mcp.json at the project root:
{
"mcpServers": {
"maett": {
"type": "http",
"url": "https://maett.com/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Run /mcp inside Claude Code to confirm the server is connected and to inspect the available tools.
Claude Desktop
The desktop app reads its MCP config from claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
You can also open it from the app: Settings → Developer → Edit Config. Add maett under mcpServers:
{
"mcpServers": {
"maett": {
"type": "http",
"url": "https://maett.com/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Save the file and restart Claude Desktop. The maett tools should appear in the tools menu of every conversation.
Claude.ai (web and mobile)
Pro, Max, Team, and Enterprise plans on claude.ai can connect remote MCP servers as Custom Connectors.
- Open Settings → Connectors and click Add custom connector.
- Set the name to maett and the remote URL to
https://maett.com/api/mcp. - Choose Bearer token as the authentication method and paste your API key.
- Save. The connector now appears in the tools menu of any chat where you enable it.
Custom connectors are not available on the free plan. If the option is missing, double-check that you’re on a plan that supports them.
ChatGPT
ChatGPT supports remote MCP servers through Developer mode connectors on Plus, Pro, Business, and Enterprise plans.
- In ChatGPT, open Settings → Connectors → Advanced and enable Developer mode.
- Back in Connectors, click Create and choose MCP server.
- Set the name to maett and the URL to
https://maett.com/api/mcp. - Pick Custom / Bearer auth and paste your API key as the bearer token.
- Save, then attach the connector to a chat or a custom GPT to start using maett tools.
Developer-mode connectors run with full read/write tool access on your behalf — only paste your key into clients you trust.
Any other MCP client
Anything that speaks the MCP Streamable HTTP transport works the same way — Cursor, Zed, Windsurf, the official MCP Inspector, custom agents built on the SDK, and so on.
Point the client at the remote URL, set the bearer header, and you’re done:
URL: https://maett.com/api/mcp
Header: Authorization: Bearer YOUR_API_KEYTo poke at it from the terminal, the easiest sanity check is the official inspector:
npx @modelcontextprotocol/inspector \
--url https://maett.com/api/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Or send a raw tools/list over curl to confirm the server is reachable:
curl -X POST https://maett.com/api/mcp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Troubleshooting
- 401 Unauthorized. The key is missing, malformed, or has been revoked. Generate a fresh one from Settings → API keys.
- Tool calls return no data. Connect at least one provider (Garmin, Oura, Strava…) and let the first sync finish. Until then, the data tools simply have nothing to return.
- Client refuses the URL. Some clients still default to the older SSE transport. Pick Streamable HTTP (or just HTTP) when given a choice.