Withings
Servidor MCP para integração de dados de saúde da Withings
Documentação
Servidor MCP Withings
Ajude-me a pagar pelos servidores no Patreon
Um servidor Model Context Protocol (MCP) que traz seus dados de saúde da Withings para o Claude. Acesse seus padrões de sono, medidas corporais, treinos, dados cardíacos e muito mais por meio de conversa natural.
🔒 Privacidade em Primeiro Lugar: Este é meu projeto pessoal, e o repositório é intencionalmente público para demonstrar transparência. O código mostra que nenhuma informação pessoal é registrada ou armazenada de forma maliciosa. Todos os dados sensíveis (tokens, IDs de usuário) são criptografados em repouso e automaticamente removidos dos logs. Você pode revisar todo o código-fonte para verificar esse compromisso com a privacidade.
⚠️ Aviso: Este servidor é fornecido como está, sem garantias ou garantias. Embora eu tenha feito todos os esforços para garantir segurança e privacidade, não ofereço garantias sobre disponibilidade, integridade de dados ou segurança. Use por sua conta e risco. Para casos de uso em produção, considere hospedar sua própria instância.
Configuração Rápida
- Abra o Claude Desktop → Personalizar → Conectores
- Clique em + → Adicionar Conector Personalizado
- Defina a URL como
https://withings-mcp.com/mcp→ clique em Adicionar - Clique em Conectar e autorize com sua conta Withings
É isso! Pergunte ao Claude sobre seu sono, peso, treinos ou dados cardíacos.
Demonstração

Sumário
- Configuração Rápida
- Demonstração
- O Que Você Pode Fazer Com Isso?
- Para Usuários Finais: Usando o Servidor Hospedado
- Para Desenvolvedores: Auto-Hospedagem
- Pré-requisitos
- Passo 1: Criar Aplicação Withings
- Passo 2: Clonar e Configurar
- Passo 3: Desenvolvimento Local
- Passo 4: Implantar em Produção
- Passo 5: Atualizar Configurações do Aplicativo Withings
- Passo 6: Configurar Seu Cliente MCP
- Referência de Variáveis de Ambiente
- Comandos de Desenvolvimento
- Estrutura do Projeto
- Recursos de Segurança
- Contribuindo
- Licença
- Suporte
- Agradecimentos
O Que Você Pode Fazer Com Isso?
Este servidor MCP dá ao Claude acesso aos seus dados de saúde da Withings, permitindo que você:
- Analise seu sono: Pergunte sobre qualidade do sono, duração, estágios de sono profundo, frequência cardíaca durante o sono
- Acompanhe métricas corporais: Tendências de peso, composição corporal, pressão arterial, frequência cardíaca ao longo do tempo
- Revise treinos: Analise padrões de exercício, calorias queimadas, zonas de frequência cardíaca
- Monitore a saúde cardíaca: Acesse gravações de ECG e dados cardíacos detalhados
- Defina e acompanhe metas: Revise suas metas de condicionamento físico e saúde
- Identifique padrões: Encontre correlações entre sono, atividade e outras métricas
- Gere insights: Obtenha análises com IA sobre suas tendências de saúde
Tudo por meio de conversa natural com o Claude ou qualquer outro cliente compatível com MCP.
Para Usuários Finais: Usando o Servidor Hospedado
Se você só quer usar este servidor MCP com o Claude Desktop sem hospedar nada, siga estes passos:
Pré-requisitos
- Uma conta Withings com dispositivos conectados
- Claude Desktop ou qualquer outro cliente compatível com MCP instalado no seu computador
Instruções de Configuração
Passo 1: Adicionar Conector no Claude Desktop
- Abra o Claude Desktop
- Vá para Personalizar (na barra lateral ou menu)
- Navegue até a seção Conectores
- Clique no botão + para adicionar um novo conector
- Selecione Adicionar Conector Personalizado
- Preencha os seguintes detalhes:
- Nome:
Withings(ou qualquer nome que preferir) - URL do servidor MCP remoto:
https://withings-mcp.com/mcp
- Nome:
- Clique em Adicionar
Nota: Se seu cliente MCP não suportar configuração de conector baseada em interface, você pode editar manualmente o arquivo de configuração. Veja o guia de configuração manual abaixo.
Passo 2: Conectar e Autorizar
- Nas configurações de Conectores, encontre o conector Withings que você acabou de adicionar
- Clique em Conectar ao lado do conector
- Seu navegador abrirá com a página de autorização da Withings
- Faça login na sua conta Withings
- Revise e aprove as permissões solicitadas
- Você será redirecionado de volta e a conexão estará completa
Após a autorização, o Claude terá acesso aos seus dados da Withings!
Ferramentas Disponíveis
Uma vez conectado, o Claude pode usar estas ferramentas para acessar seus dados:
Sono e Atividade
get_hrv- RMSSD, SDNN e pontuações de qualidade em nível de minuto capturados durante o sonoget_sleep_summary- Duração do sono, estágios (leve/profundo/REM), frequência cardíaca, respiração, pontuação do sonoget_activity- Passos diários, distância, calorias, elevação, durações de atividadeget_intraday_activity- Dados de atividade de alta frequência ao longo do diaget_workouts- Resumos detalhados de treinos com zonas de frequência cardíaca e métricas
Medidas Corporais
get_measures- Peso, composição corporal, pressão arterial, frequência cardíaca, temperatura, VO2 máximo e mais
Dispositivos e Metas
get_user_devices- Lista de dispositivos Withings conectadosget_user_goals- Suas metas de saúde e condicionamento físico (passos, sono, peso)
Saúde Cardíaca
list_heart_records- Lista de gravações de ECGget_heart_signal- Dados detalhados da forma de onda do ECG
Estetoscópio (se você tiver BPM Core)
list_stetho_records- Lista de gravações de estetoscópioget_stetho_signal- Dados detalhados do sinal de áudio
Exemplos de Conversas
Tente perguntar ao Claude:
- "Como tem sido a qualidade do meu sono na última semana?"
- "Mostre-me minha tendência de peso no último mês"
- "Qual é minha frequência cardíaca média em repouso?"
- "Eu atingi minha meta de passos esta semana?"
- "Compare a intensidade dos meus treinos entre este mês e o mês passado"
- "Quando dormi melhor neste mês?"
Privacidade e Segurança
- Tokens criptografados: Todos os tokens de autenticação e códigos de autorização são criptografados usando AES-256-GCM antes do armazenamento
- Sem registro de dados pessoais: O código é público - você pode verificar que nenhuma informação sensível é registrada
- Redação automática: Todos os IDs de usuário, tokens e credenciais são automaticamente removidos dos logs do sistema
- OAuth 2.0: Autenticação segura padrão da indústria com suporte a PKCE e validação de URI de redirecionamento
- Segurança de sessão: Sessões MCP são vinculadas ao usuário autenticado, prevenindo acesso entre usuários
- Você no controle: Revogue o acesso a qualquer momento nas configurações da sua conta Withings
Para Desenvolvedores: Auto-Hospedagem
Quer executar sua própria instância? Veja como implantar este servidor MCP você mesmo.
Pré-requisitos
- Bun 1.1+ instalado
- Uma Conta de Desenvolvedor Withings
Passo 1: Criar Aplicação Withings
- Vá para o Portal do Desenvolvedor Withings
- Crie uma nova aplicação
- Anote seu Client ID e Client Secret
- Defina sua URI de Redirecionamento para:
https://your-domain.com/callback- Deve ser uma URL publicamente acessível (localhost não é suportado pela Withings)
- Pode ser qualquer domínio onde você hospedará o servidor (ex.: Fly.io, Railway, seu próprio servidor, etc.)
Importante: Remover Google Analytics
A versão hospedada inclui uma tag do Google Analytics (G-ZMGF9WXL3W) nas páginas estáticas em public/. Se você estiver fazendo um fork deste repositório, remova ou substitua o trecho do GA em public/index.html e public/health.html, e atualize os cabeçalhos CSP em src/server/app.ts de acordo.
Passo 2: Clonar e Configurar
# Clone the repository
git clone https://github.com/your-username/withings-mcp.git
cd withings-mcp
# Install dependencies
bun install
# Generate encryption secret
bun run generate-secret
# Copy the output - you'll need it for environment variables
Passo 2.5: Configurar Banco de Dados Supabase
- Crie um projeto gratuito no Supabase
- Instale a CLI do Supabase:
bun install -g supabase(ou usebrew install supabase/tap/supabase) - Vincule seu projeto:
supabase link --project-ref <your-project-ref> - Aplique as migrações do banco de dados:
supabase db push - Obtenha suas credenciais em Dashboard → Configurações → API:
- URL do Projeto →
SUPABASE_URL - Chave de função de serviço →
SUPABASE_SECRET_KEY
- URL do Projeto →
Passo 3: Desenvolvimento Local
Nota: A Withings exige uma URL publicamente acessível para callbacks OAuth. Para desenvolvimento local, use um serviço de tunelamento para expor seu servidor local ou implante em um ambiente de staging para testes.
# Copy environment template
cp .env.example .env
# Edit .env with your values
# WITHINGS_CLIENT_ID=your_client_id
# WITHINGS_CLIENT_SECRET=your_client_secret
# WITHINGS_REDIRECT_URI=https://your-tunnel-url.com/callback
# ENCRYPTION_SECRET=paste_generated_secret_here
# SUPABASE_URL=https://your-project.supabase.co
# SUPABASE_SECRET_KEY=your_service_role_key
# PORT=3000
# Run locally (Bun executes TypeScript directly — no build step)
bun run dev
Certifique-se de que sua URI de redirecionamento no arquivo .env corresponda à URL publicamente acessível que aponta para seu servidor local.
Passo 4: Implantar em Produção
# The project runs TypeScript directly with Bun — no build step required.
bun run start
Implante na Plataforma de Aplicativos DigitalOcean (seu buildpack Bun detecta package.json e executa bun run start automaticamente), ou em qualquer outro host que suporte Bun.
Defina as seguintes variáveis de ambiente em sua plataforma de hospedagem:
| Variável | Obrigatória | Exemplo |
|---|---|---|
WITHINGS_CLIENT_ID | Sim | your_client_id |
WITHINGS_CLIENT_SECRET | Sim | your_client_secret |
WITHINGS_REDIRECT_URI | Sim | https://your-domain.com/callback |
ENCRYPTION_SECRET | Sim | Gerada no passo 2 |
SUPABASE_URL | Sim | https://your-project.supabase.co |
SUPABASE_SECRET_KEY | Sim | Sua chave de função de serviço do Supabase |
PORT | Não | 3000 (ou o padrão da sua plataforma) |
LOG_LEVEL | Não | info |
ALLOWED_ORIGINS | Não | https://example.com,https://app.example.com |
Passo 5: Atualizar Configurações do Aplicativo Withings
Volte ao seu aplicativo de desenvolvedor Withings e atualize a URI de redirecionamento para corresponder à sua URL implantada:
https://your-domain.com/callback
Passo 6: Configurar Seu Cliente MCP
Para Claude Desktop:
- Abra o Claude Desktop
- Vá para Personalizar → seção Conectores
- Clique no botão + e selecione Adicionar Conector Personalizado
- Preencha os seguintes detalhes:
- Nome:
Withings(ou qualquer nome que preferir) - URL do servidor MCP remoto:
https://your-domain.com/mcp
- Nome:
- Clique em Adicionar
- Clique em Conectar ao lado do conector para autorizar
Para Outros Clientes MCP:
Configure seu cliente MCP com os seguintes detalhes de conexão:
- URL do servidor:
https://your-domain.com - Transporte: HTTP Streamable
- Endpoint:
/mcp - Autenticação: OAuth 2.0
- URL de descoberta:
/.well-known/oauth-authorization-server
Referência de Variáveis de Ambiente
| Variável | Obrigatória | Descrição |
|---|---|---|
WITHINGS_CLIENT_ID | Sim | Seu client ID do aplicativo Withings |
WITHINGS_CLIENT_SECRET | Sim | Seu client secret do aplicativo Withings |
WITHINGS_REDIRECT_URI | Sim | URL de callback OAuth (deve corresponder às configurações do aplicativo Withings) |
ENCRYPTION_SECRET | Sim | Segredo de 32+ caracteres para criptografia de tokens (gere com bun run generate-secret) |
SUPABASE_URL | Sim | URL do seu projeto Supabase (de Dashboard → Configurações → API) |
SUPABASE_SECRET_KEY | Sim | Sua chave de função de serviço do Supabase (de Dashboard → Configurações → API) |
PORT | Não | Porta do servidor (padrão: 3000) |
LOG_LEVEL | Não | Nível de registro: trace, debug, info, warn, error (padrão: info) |
ALLOWED_ORIGINS | Não | Lista separada por vírgulas de origens CORS permitidas para clientes de navegador |
Comandos de Desenvolvimento
bun run start # Run the server
bun run dev # Hot-reload mode
bun run typecheck # Type-check with tsc (no emit)
bun run build # Bundle for production (outputs to ./build)
bun run generate-secret # Generate encryption secret for ENCRYPTION_SECRET env variable
Estrutura do Projeto
src/
├── auth/ # OAuth 2.0 authentication & token storage
├── db/ # Supabase client & cleanup scheduler
├── server/ # Hono app, MCP endpoints, middleware
├── tools/ # MCP tools for Withings API (sleep, measure, user, heart, stetho)
├── types/ # TypeScript type definitions (Hono, Withings API)
├── withings/ # Withings API client
├── utils/ # Logger and encryption utilities
└── index.ts # Main entry point
supabase/
└── migrations/ # Database schema migrations
Veja CLAUDE.md para documentação detalhada da arquitetura.
Recursos de Segurança
Criptografia de Tokens
Todos os tokens de acesso, tokens de atualização e códigos de autorização da Withings são criptografados em repouso usando AES-256-GCM:
- Algoritmo: AES-256-GCM (criptografia autenticada)
- Derivação de chave: PBKDF2 com 100.000 iterações
- Defesa em profundidade: Mesmo que o banco de dados seja comprometido, os tokens permanecem protegidos
Importante: Mantenha seu
ENCRYPTION_SECRET: - Pelo menos 32 caracteres
- Gerado aleatoriamente (use
bun run generate-secret) - Seguro e nunca commitado no controle de versão
- Consistente entre reinicializações do servidor
Endurecimento OAuth
- Validação de URI de redirecionamento: O endpoint
/authorizevalidaredirect_uricontra as URIs permitidas do cliente registrado, prevenindo ataques de redirecionamento aberto - Códigos de autorização de uso único: Códigos de autorização são consumidos atomicamente para prevenir ataques de replay (conforme RFC 6749)
- Suporte a PKCE: Método de desafio de código SHA-256 para segurança aprimorada
- Validação na inicialização: O servidor se recusa a iniciar se as variáveis de ambiente necessárias estiverem ausentes
Segurança de Transporte
- Vínculo de token de sessão: Sessões MCP são vinculadas ao token de portador que as criou, prevenindo sequestro de sessão entre usuários
- Validação JSON-RPC: Todas as mensagens recebidas são validadas contra a especificação JSON-RPC 2.0 antes do processamento
- Limites de corpo de requisição: Limite global de 1MB para prevenir esgotamento de memória
- Redirecionamento HTTPS: Requisições HTTP são automaticamente redirecionadas para HTTPS em produção
- CSP estrito: Política de Segurança de Conteúdo sem diretivas
unsafe-inline - Limitação de taxa atômica: Função PostgreSQL com bloqueio em nível de linha previne condições de corrida
Registro de Logs com Privacidade
O logger personalizado redige automaticamente todas as informações sensíveis:
- ✅ Eventos operacionais e erros registrados
- ❌ Sem tokens, credenciais ou códigos de autorização
- ❌ Sem IDs de usuário ou informações pessoais
- ❌ Sem payloads de requisição/resposta da API com dados sensíveis
Você pode revisar a implementação de logging em src/utils/logger.ts.
Contribuindo
Este é um projeto pessoal, mas contribuições são bem-vindas! Por favor:
- Faça um fork do repositório
- Crie um branch de funcionalidade
- Faça suas alterações
- Envie um pull request
Licença
Licença MIT - veja o arquivo LICENSE para detalhes.
Suporte
- Issues: Reporte bugs ou solicite funcionalidades em GitHub Issues
- API Withings: Veja Documentação da API Withings
- Protocolo MCP: Veja Documentação do Model Context Protocol
Agradecimentos
Construído com:
- Model Context Protocol por Anthropic
- API Withings
- Hono framework web
- Supabase para banco de dados
- Bun runtime