intervals-mcp
Indirect integration via Intervals.icu: publishes planned workouts that sync to Garmin Connect and arrive on athletes' Garmin watches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@intervals-mcp list all scheduled workouts for athlete1 for the next 30 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
garmin_smart_trainer_mcp
MCP local que deixa o Claude Code publicar treinos no Intervals.icu, que sincroniza com o Garmin Connect dos atletas. Você conversa ("monta a semana da atleta1"), aprova, e o treino chega no relógio.
Claude Code ──stdio──▶ intervals-mcp ──HTTPS──▶ Intervals.icu ──▶ Garmin Connect ──▶ relógio
│
└── lê o contexto dos atletas numa pasta local, fora deste repoO que o MCP pode fazer
Ferramenta | O que faz | Permissão no Claude Code |
| apelidos autorizados | livre |
| treinos e provas de um período (até 90 dias) | livre |
| resumo do que foi feito (até 42 dias): duração, FC, carga, zonas, RPE | livre |
| publica um treino (hoje até +120 dias) | pede confirmação |
| altera um treino criado pelo MCP | pede confirmação |
| apaga um treino futuro criado pelo MCP | pede confirmação |
Travas no código:
URL da API fixa (
https://intervals.icu), sem seguir redirecionamento com a chave.Só atletas listados em
INTERVALS_ATHLETES.Alterar/apagar só vale para treinos que o próprio MCP criou (
external_idcom prefixotmcp-). Treinos criados pela atleta ou por outro app ficam intocáveis.Não lê bem-estar (sono, HRV, peso), streams ou GPS. Notas do calendário não são listadas.
Related MCP server: garmin-claude-mcp
Setup (uma vez por máquina)
Pré-requisitos: Claude Code e uv (curl -LsSf https://astral.sh/uv/install.sh | sh).
O uv instala o Python se precisar.
git clone https://github.com/andrecccruz/garmin_smart_trainer_mcp.git
cd garmin_smart_trainer_mcp
uv sync
cp .env.example .env && chmod 600 .env
# edite .env: INTERVALS_API_KEY e INTERVALS_ATHLETES
cp .claude/settings.local.example.json .claude/settings.local.json
# edite o caminho da pasta de contexto
mkdir -p ~/treinos-contexto
cp -r contexto-exemplo/atleta1 ~/treinos-contexto/<apelido> # e preenchaTeste sem rede: uv run pytest.
Primeiro uso real: deixe INTERVALS_DRY_RUN=1, abra claude na pasta, aprove o MCP intervals
quando ele perguntar e peça para listar e simular um treino. Depois mude para 0 e publique um
treino curto no seu próprio calendário para conferir que chega no Garmin.
Uso no dia a dia
cd garmin_smart_trainer_mcp && claude
> monta a próxima semana da atleta1O fluxo completo (ler contexto → ver calendário e atividades → propor → aprovar → publicar →
registrar no plano.md) está no CLAUDE.md.
Lado da atleta (uma vez)
Conta no Intervals.icu com o Garmin conectado em Settings → Connections, marcando Baixar atividades e Carregar treinos planejados. As atividades precisam vir do Garmin: as importadas do Strava não ficam acessíveis pela API.
Aceitar você como treinador no Intervals. Com isso a sua API key passa a funcionar para o athlete ID dela. Ela não precisa te passar nenhuma credencial e pode revogar quando quiser.
Te passar o athlete ID (começa com
i, está na URL do perfil).
Rodar isolado com Podman (opcional)
podman build -t intervals-mcp:latest -f Containerfile .Troque o .mcp.json por:
{
"mcpServers": {
"intervals": {
"command": "podman",
"args": [
"run", "-i", "--rm",
"--read-only", "--tmpfs", "/tmp",
"--cap-drop=ALL", "--security-opt=no-new-privileges",
"--memory=256m", "--pids-limit=64",
"--env-file", "${CLAUDE_PROJECT_DIR:-.}/.env",
"localhost/intervals-mcp:latest"
]
}
}
}Rootless, sem daemon, filesystem só leitura, sem capabilities. O container nasce quando a sessão
do Claude Code abre e morre quando fecha. Depois de mudar o código, rode o podman build de novo.
Segurança
.enve.claude/settings.local.jsonficam fora do Git (.gitignore). O.claude/settings.jsontambém nega ao Claude ler o.env.Hook de pre-commit com
gitleaks+ bloqueio de.enve pastas de atleta:uvx pre-commit install.Se a chave vazar: Intervals → Settings → Developer → gerar nova, e atualizar o
.env. Commit com chave é vazamento mesmo depois de apagado; o histórico do Git é permanente.A API key do Intervals não tem escopo granular: trate como senha.
Licença
MIT.
Available Tools
6 toolsapagar_treinoADestructive
Apaga UM treino futuro criado por este MCP. Só chame depois que o usuário confirmar.
Inputs: atleta (required), evento_id (required). Returns: object
atividades_recentesARead-only
Resumo das atividades concluídas nos últimos N dias (1 a 42): duração, FC, carga, tempo em zonas de FC, RPE.
Atividades importadas do Strava não aparecem pela API; a atleta precisa sincronizar pelo Garmin.
Inputs: atleta (required), dias. Returns: result
atualizar_treinoA
Altera um treino criado por este MCP (data, nome, esporte e/ou texto). Campos omitidos ficam como estão.
Só chame depois que o usuário aprovar a alteração.
Inputs: atleta (required), evento_id (required), data, nome, +2 more. Returns: object
criar_treinoA
Publica um treino planejado no calendário do atleta. Ele sincroniza com o Garmin.
data: AAAA-MM-DD (hoje até 120 dias à frente). esporte: Ride, Run, Swim, WeightTraining etc. texto: treino na sintaxe do Intervals.icu, um passo por linha começando com '-'. Só chame depois que o usuário aprovar o treino.
Inputs: data (required), nome (required), texto (required), atleta (required), +1 more. Returns: object
listar_atletasARead-only
Lista os apelidos de atletas autorizados neste MCP.
Inputs: no named parameters. Returns: result
listar_treinosARead-only
Lista treinos planejados e provas no calendário do atleta entre duas datas (AAAA-MM-DD, até 90 dias).
'criado_pelo_mcp' indica se o treino pode ser alterado/apagado por este MCP.
Inputs: de (required), ate (required), atleta (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct resource+action pair: listing athletes, listing workouts, and the create/update/delete lifecycle for workouts are clearly separated, with recent activities being the only read-only metrics tool. Descriptions reinforce the boundaries (e.g., only MCP-created workouts can be updated/deleted), leaving no realistic misselection risk.
Five tools follow a clean Portuguese verb_noun pattern (listar_atletas, listar_treinos, criar_treino, atualizar_treino, apagar_treino) with consistent singular/plural handling by resource. atividades_recentes is a noun-only outlier, but the deviation is minor and still readable.
Six tools is well-scoped for an athlete calendar integration: two read/list tools, a full workout mutation set, and one activity summary tool. Every tool earns its place with no redundancy or filler.
Workout coverage is complete for the lifecycle (create, list, update, delete) plus athlete listing and completed-activity summaries, so core agent workflows have no dead ends. Minor gaps exist: no way to fetch a single workout's full details or drill into an individual activity beyond the recent summary.
Maintenance
Related MCP Connectors
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Connect Intervals.icu to Claude and ChatGPT: read training, plan workouts. Training never stored.
tri-train is a training platform for triathletes that syncs activities from Strava and Garmin and exposes them to Claude through a remote MCP server. Ask Claude how your last block went, why your run pace dropped, or whether you are fresh enough for Sunday's race, and it answers from your real data: activities with laps and grade-adjusted pace, weekly load and the performance management chart (CTL/ATL/TSB), sleep, HRV and resting heart rate, and your race calendar with predictions. Claude can also act: create and adjust planned workouts with structured intervals, push them to your Garmin watch, add races and write notes. Every change is journaled and can be undone. Read and write access are separate OAuth scopes, and the server enforces them on every call. Built and hosted in Switzerland by a triathlete; data stays on our own servers (Swiss revDSG / GDPR).
Your endurance training data in your AI assistant: activities, recovery, plan, workout edits.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read recent training activities and wellness data, then create, update, or delete structured workouts through intervals.icu so they sync to Garmin Connect and a watch.MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read recent activities, wellness and recovery data, inspect upcoming calendar events, and create, edit, or delete structured workouts that sync through intervals.icu to Garmin Connect and a connected watch.MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read recent training activities and wellness signals such as sleep, HRV, and resting heart rate, then design structured workouts that are written to an intervals.icu calendar and synced onward to Garmin Connect and the user's watch. Also supports listing, editing, and deleting planned workouts.MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read recent activities and wellness data (sleep, HRV, resting heart rate) and to create, update, or delete structured planned workouts through intervals.icu, which syncs them to Garmin Connect and onto the user's watch.MIT