{"id":48950972,"url":"https://github.com/booscaaa/estrova","last_synced_at":"2026-04-17T20:02:29.121Z","repository":{"id":352065509,"uuid":"1213695026","full_name":"booscaaa/estrova","owner":"booscaaa","description":"Um servidor MCP em Go que integra dados de   treino do Strava com o Claude Code. Ele autentica via   OAuth2, sincroniza atividades em SQLite local, expõe 16   ferramentas MCP para o Claude acessar perfil, estatísticas e objetivos, gera planos de treino personalizados com IA e serve um dashboard web","archived":false,"fork":false,"pushed_at":"2026-04-17T18:33:48.000Z","size":1108,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T19:23:37.720Z","etag":null,"topics":["claude-code","golang","ia","sports"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/booscaaa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T16:56:41.000Z","updated_at":"2026-04-17T18:47:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/booscaaa/estrova","commit_stats":null,"previous_names":["booscaaa/estrova"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/booscaaa/estrova","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/booscaaa%2Festrova","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/booscaaa%2Festrova/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/booscaaa%2Festrova/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/booscaaa%2Festrova/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/booscaaa","download_url":"https://codeload.github.com/booscaaa/estrova/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/booscaaa%2Festrova/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31943882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","golang","ia","sports"],"created_at":"2026-04-17T20:02:27.391Z","updated_at":"2026-04-17T20:02:29.109Z","avatar_url":"https://github.com/booscaaa.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.svg\" width=\"96\" height=\"96\" alt=\"Estrova\" /\u003e\n\u003c/p\u003e\n\n# Estrova para Claude Code\n\nUm servidor MCP (Model Context Protocol) que integra seus dados de treino do Strava com o Claude Code. Obtenha planos de treino personalizados por IA, análise de desempenho e um dashboard web — tudo baseado no seu histórico real do Strava.\n\n## Screenshots\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/dashboard.png\" alt=\"Dashboard\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/goal-detail.png\" alt=\"Plano de Treino\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eDashboard com KPIs e gráficos\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003ePlano de treino por objetivo\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/session-drawer.png\" alt=\"Detalhe da Sessão\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/activity-detail.png\" alt=\"Detalhe de Atividade\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eDrawer de detalhe da sessão de treino\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eDetalhe de atividade com gráficos por km\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## O que ele faz\n\n- Autentica com o Strava via OAuth2 e sincroniza suas atividades em um banco SQLite local\n- Expõe 16 ferramentas MCP para o Claude ler seu perfil, estatísticas, zonas de FC, atividades e objetivos de treino\n- Gera e armazena planos de treino personalizados de múltiplas semanas com base no seu histórico\n- Detecta conflitos de agendamento entre múltiplos objetivos simultâneos\n- Serve um dashboard web em `http://localhost:3030` para gerenciamento visual do plano\n\n---\n\n## Índice\n\n1. [Pré-requisitos](#pré-requisitos)\n2. [Obtendo as credenciais da API do Strava](#obtendo-as-credenciais-da-api-do-strava)\n3. [Instalação](#instalação)\n4. [Configurando o Claude Code](#configurando-o-claude-code)\n5. [Autenticação inicial](#autenticação-inicial)\n6. [Sincronizando atividades](#sincronizando-atividades)\n7. [Criando um objetivo e plano de treino](#criando-um-objetivo-e-plano-de-treino)\n8. [Dashboard web](#dashboard-web)\n9. [Ferramentas MCP disponíveis](#ferramentas-mcp-disponíveis)\n10. [Banco de dados](#banco-de-dados)\n\n---\n\n## Pré-requisitos\n\n- [Claude Code](https://claude.ai/code) instalado\n- Uma conta no [Strava](https://www.strava.com)\n\nNenhum outro runtime é necessário — binários pré-compilados são fornecidos para Linux, macOS e Windows.\n\n---\n\n## Obtendo as credenciais da API do Strava\n\nVocê precisa registrar um aplicativo no Strava para obter as credenciais usadas na autenticação. Esse processo é feito apenas uma vez.\n\n\u003e Para uma visão geral completa da API do Strava, consulte a [documentação oficial de primeiros passos](https://developers.strava.com/docs/getting-started/).\n\n### Passo 1 — Acesse as configurações da API do Strava\n\nAcesse [https://www.strava.com/settings/api](https://www.strava.com/settings/api).\n\nSe solicitado, faça login na sua conta Strava primeiro.\n\n### Passo 2 — Crie seu aplicativo\n\nPreencha o formulário com os seguintes valores:\n\n| Campo | Valor |\n|-------|-------|\n| **Nome do aplicativo** | Qualquer nome, ex: `Meu Coach Claude` |\n| **Categoria** | Qualquer (ex: `Outro`) |\n| **Clube** | Deixe em branco |\n| **Website** | `http://localhost` |\n| **Descrição** | Opcional |\n| **Domínio de callback de autorização** | `localhost` |\n\nClique em **Criar** (ou **Atualizar** se já existir um aplicativo anterior).\n\n### Passo 3 — Copie suas credenciais\n\nApós salvar, a página exibe os detalhes do aplicativo. Anote:\n\n- **Client ID** — um número curto, ex: `152485`\n- **Client Secret** — uma string hexadecimal longa\n\n\u003e Essas credenciais são sensíveis. Nunca as compartilhe nem as comite em repositórios.\n\n### Passo 4 — Faça upload de um ícone (opcional)\n\nO Strava exige um ícone antes que a tela de consentimento OAuth funcione. Faça upload de qualquer imagem (PNG/JPG, mínimo 124×124 px) no campo **Ícone do aplicativo** e salve.\n\n---\n\n\u003e **Observação:** A URL de callback de autorização usada por este servidor MCP é `http://localhost:8765/callback`. O Strava verifica apenas o **domínio** (`localhost`), portanto nenhuma configuração adicional de URL é necessária.\n\n---\n\n## Instalação\n\nBinários pré-compilados são publicados automaticamente a cada release. Não é necessário ter Go instalado.\n\n### Linux / macOS (uma linha)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/booscaaa/estrova/main/install.sh | bash\n```\n\nEste script detecta seu sistema operacional e arquitetura, baixa o binário correto da última release do GitHub, instala em `/usr/local/bin/estrova` e também instala as skills do estrova no Claude Code.\n\n### Download manual\n\n1. Acesse a [página de Releases](https://github.com/booscaaa/estrova/releases/latest)\n2. Baixe o arquivo para sua plataforma:\n\n| Plataforma | Arquivo |\n|------------|---------|\n| Linux x86-64 | `estrova_linux_amd64.tar.gz` |\n| Linux ARM64 | `estrova_linux_arm64.tar.gz` |\n| macOS x86-64 (Intel) | `estrova_darwin_amd64.tar.gz` |\n| macOS ARM64 (Apple Silicon) | `estrova_darwin_arm64.tar.gz` |\n| Windows x86-64 | `estrova_windows_amd64.zip` |\n\n3. Extraia e mova o binário:\n\n```bash\n# Linux / macOS\ntar -xzf estrova_linux_amd64.tar.gz\nsudo mv estrova /usr/local/bin/\nchmod +x /usr/local/bin/estrova\n```\n\n```powershell\n# Windows — extraia o zip e mova estrova.exe para uma pasta no seu PATH\n# ex: C:\\Users\\\u003cvoce\u003e\\bin\\estrova.exe\n```\n\n4. Verifique:\n\n```bash\nestrova\n# Estrova MCP server iniciado — Web UI: http://localhost:3030\n```\n\n### Compilar do fonte (opcional)\n\nNecessário apenas se quiser modificar o código:\n\n```bash\ngit clone https://github.com/booscaaa/estrova.git\ncd estrova\ngo build -o estrova .\nsudo mv estrova /usr/local/bin/\n```\n\n---\n\n## Configurando o Claude Code\n\n### Configuração global (todos os projetos)\n\nEdite `~/.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"estrova\": {\n      \"command\": \"estrova\",\n      \"env\": {\n        \"STRAVA_CLIENT_ID\": \"seu_client_id\",\n        \"STRAVA_CLIENT_SECRET\": \"seu_client_secret\"\n      }\n    }\n  }\n}\n```\n\nSubstitua `estrova` pelo caminho completo do binário caso ele não esteja no seu `$PATH`.\n\n### Configuração por projeto\n\nCrie ou edite `.mcp.json` na raiz do seu projeto:\n\n```json\n{\n  \"mcpServers\": {\n    \"estrova\": {\n      \"command\": \"/usr/local/bin/estrova\",\n      \"env\": {\n        \"STRAVA_CLIENT_ID\": \"seu_client_id\",\n        \"STRAVA_CLIENT_SECRET\": \"seu_client_secret\"\n      }\n    }\n  }\n}\n```\n\n\u003e **Dica:** Adicione `.mcp.json` ao `.gitignore` para que suas credenciais nunca sejam commitadas.\n\n### Verificando se o servidor MCP está conectado\n\nAbra o Claude Code e execute:\n\n```\n/mcp\n```\n\nVocê deve ver `estrova` listado como servidor conectado. Caso contrário, verifique o caminho do binário e as variáveis de ambiente.\n\n---\n\n## Autenticação inicial\n\nA primeira coisa que você precisa fazer é autenticar com o Strava. No Claude Code, basta perguntar:\n\n```\nautenticar com strava\n```\n\nO Claude chamará `estrova_authenticate`, que:\n\n1. Inicia um servidor local de callback em `http://localhost:8765/callback`\n2. Abre seu navegador na página de consentimento OAuth do Strava\n3. Após você aprovar, troca o código por um token de acesso\n4. Salva o token em `~/.estrova.db` (SQLite)\n\nO token é atualizado automaticamente quando expira — você só precisa autenticar uma vez.\n\n**Verificar status da autenticação:**\n\n```\nqual é o status da minha autenticação no strava?\n```\n\n---\n\n## Sincronizando atividades\n\nApós autenticar, sincronize suas atividades do Strava no banco local:\n\n```\nsincronizar minhas atividades do strava\n```\n\nPor padrão, busca até 5 páginas (1.000 atividades). Para buscar mais:\n\n```\nsincronizar minhas atividades do strava, buscar 10 páginas\n```\n\nAs atividades sincronizadas são armazenadas localmente e associadas automaticamente às sessões do seu plano de treino.\n\n---\n\n## Criando um objetivo e plano de treino\n\n### 1. Criar um objetivo\n\n```\ncriar objetivo strava: Maratona em outubro de 2026\n```\n\nO Claude chamará `estrova_create_goal` com parâmetros como:\n\n| Parâmetro | Exemplo |\n|-----------|---------|\n| `name` | `Maratona 2026` |\n| `sport_type` | `Run` |\n| `target_type` | `distance` |\n| `target_value` | `42.2` |\n| `target_date` | `2026-10-15` |\n\n### 2. Gerar um plano de treino\n\n```\ngerar um plano de treino para meu objetivo Maratona 2026\n```\n\nO Claude irá:\n\n1. Chamar `estrova_analyze_for_goal` — busca suas atividades recentes, zonas de FC, sessões de outros objetivos e restrições de agenda\n2. Usar esses dados para construir um plano personalizado de múltiplas semanas\n3. Chamar `estrova_save_plan` — persiste o plano no banco vinculado ao objetivo\n\n### 3. Visualizar seu plano\n\n```\nmostrar meu plano de treino para Maratona 2026\n```\n\nOu abra o [dashboard web](#dashboard-web) em `http://localhost:3030`.\n\n### 4. Resolver conflitos\n\nSe você tiver múltiplos objetivos simultâneos, sessões de planos diferentes podem colidir no mesmo dia:\n\n```\nexiste algum conflito nos meus planos de treino?\n```\n\nO Claude chamará `estrova_list_conflicts` e ajudará a reagendar as sessões.\n\n---\n\n## Dashboard web\n\nO servidor web inicia automaticamente junto com o servidor MCP.\n\nAbra [http://localhost:3030](http://localhost:3030) no seu navegador.\n\n**Funcionalidades:**\n\n- Visão geral dos objetivos com progresso (sessões concluídas / total)\n- Visualização semanal do plano com detalhes das sessões\n- Lista de atividades com status de sincronização\n- Detector de conflitos entre todos os objetivos ativos\n- Edição individual de sessões (tipo, pace, zona de FC, distância, duração)\n- Dashboard com gráficos de volume semanal e tendência de pace\n\n---\n\n## Ferramentas MCP disponíveis\n\n### Autenticação\n\n| Ferramenta | Descrição |\n|------------|-----------|\n| `estrova_authenticate` | Login OAuth2 — abre o navegador e salva o token |\n| `estrova_auth_status` | Verifica validade do token e quantidade de atividades sincronizadas |\n\n### Atividades\n\n| Ferramenta | Parâmetros | Descrição |\n|------------|------------|-----------|\n| `estrova_sync` | `pages` (padrão 5) | Busca e sincroniza atividades do Strava |\n| `estrova_list_activities` | `type`, `after`, `before`, `limit` | Consulta o banco local |\n| `estrova_get_activity` | `activity_id` | Detalhes completos da atividade (laps, segmentos, melhores esforços) |\n\n### Perfil do atleta\n\n| Ferramenta | Descrição |\n|------------|-----------|\n| `estrova_get_athlete` | Nome, cidade, país, status premium |\n| `estrova_get_athlete_stats` | Totais de corrida/bike/natação (recente, no ano, histórico) |\n| `estrova_get_athlete_zones` | Zonas de frequência cardíaca e potência |\n\n### Objetivos e planos\n\n| Ferramenta | Parâmetros | Descrição |\n|------------|------------|-----------|\n| `estrova_create_goal` | `name`, `sport_type`, `target_type`, `target_value`, `target_date` | Cria um novo objetivo de treino |\n| `estrova_list_goals` | — | Lista todos os objetivos com progresso |\n| `estrova_delete_goal` | `goal_id` | Remove o objetivo e seu plano |\n| `estrova_analyze_for_goal` | `goal_id` | Coleta contexto para geração do plano |\n| `estrova_save_plan` | `goal_id`, `plan_json` | Persiste o plano gerado no banco |\n| `estrova_get_plan` | `goal_id` | Retorna o plano organizado por semana |\n| `estrova_list_conflicts` | — | Detecta conflitos de agendamento entre objetivos |\n| `estrova_update_session` | `session_id`, campos | Edita uma sessão do plano |\n\n---\n\n## Banco de dados\n\nTodos os dados são armazenados em um único arquivo SQLite em:\n\n```\n~/.estrova.db\n```\n\nO arquivo é criado automaticamente na primeira execução. Tabelas:\n\n| Tabela | Conteúdo |\n|--------|----------|\n| `tokens` | Tokens de acesso/refresh OAuth2 |\n| `athlete` | Perfil do atleta em cache |\n| `activities` | Atividades sincronizadas do Strava |\n| `goals` | Objetivos de treino |\n| `plan_sessions` | Sessões individuais por objetivo (semanas / treinos) |\n\nPara inspecionar diretamente:\n\n```bash\nsqlite3 ~/.estrova.db \".tables\"\nsqlite3 ~/.estrova.db \"SELECT name, target_date FROM goals;\"\n```\n\n---\n\n## Variáveis de ambiente\n\n| Variável | Obrigatória | Descrição |\n|----------|-------------|-----------|\n| `STRAVA_CLIENT_ID` | Sim | Client ID das configurações da API do Strava |\n| `STRAVA_CLIENT_SECRET` | Sim | Client secret das configurações da API do Strava |\n\n---\n\n## Licença\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbooscaaa%2Festrova","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbooscaaa%2Festrova","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbooscaaa%2Festrova/lists"}