Mibly – Apple Health MCP

Servidor MCP de código aberto para Apple Health. Traga seus dados de sono, frequência cardíaca, VFC e treinos do iPhone para o Claude, Codex ou qualquer agente MCP. Modo local, criptografado, sem nuvem.

Documentação

Português (BR) · 简体中文 · 日本語

Download on the App Store Release CI License: MIT MCP Website

Apple Health MCP — Mibly Receiver

Um servidor Apple Health MCP de código aberto: traga seus dados do Apple Health (HealthKit) — sono, passos, frequência cardíaca, VFC, treinos, peso, gordura corporal e muito mais — para o Claude Desktop/Code, Codex ou qualquer outro agente de IA que você mesmo crie ou execute (qualquer coisa que fale MCP).

Modo local: seus dados nunca tocam os servidores da Mibly. Sem conta, sem nuvem, sem telemetria. Os dados são armazenados criptografados em uma máquina que você controla, e este repositório é o código que faz isso.

Maneira mais rápida de começar

  1. Baixe o Mibly no seu iPhone → App Store
  2. Copie o prompt de configuração de dentro do aplicativo Mibly (Connection Settings → "Copy for your Agent") e cole-o no seu agente.

Seu agente configura o receiver e o serviço MCP para você. Sem clonagem, sem compilação, sem arquivos de configuração.

Por que um aplicativo para iPhone?

Os dados do Apple Health só podem ser lidos por meio do HealthKit, dentro de um aplicativo iOS nativo. Não existe API web. O Mibly cuida do lado HealthKit — permissões, sincronização em segundo plano e formatação de dados — para que você não precise de uma conta de desenvolvedor Apple ou do Xcode.

O que é este repositório

Uma implementação de referência do receiver que seu agente instala. Ele está aqui para que você possa:

  • Revisar exatamente o que roda na sua máquina e para onde seus dados vão
  • Personalizar se quiser

Você não precisa deste código para usar o Mibly. O prompt de configuração acima é o caminho recomendado.

Para onde vão os dados?

PerguntaResposta
Onde os dados de saúde são armazenados?~/.mibly/data.enc apenas. AES-256-GCM, chave = scrypt(pairing token, salt aleatório).
O serviço faz requisições de rede de saída?Não. Ele apenas escuta. Sem telemetria, sem verificação de atualização.
Quem pode ler pela rede?Qualquer pessoa que possua o pairing token. Toda rota exige Authorization: Bearer <token>.
Por quanto tempo os dados são mantidos?365 dias de histórico. Apenas a amostra mais recente de cada tipo é mantida por mais tempo.
O tráfego é criptografado em trânsito?Não. O modo local foi projetado para sua LAN doméstica ou de escritório: o iPhone e este receiver estão na mesma rede Wi-Fi e conversam via HTTP simples. Não exponha a porta à internet pública.

Verifique você mesmo. Isso deve imprimir nada:

grep -rnE "fetch\(|https?\.request|axios|net\.connect|XMLHttpRequest" src

O protocolo de comunicação (endpoints, payloads, formato de armazenamento) está em PROTOCOL.md; o modelo de ameaças está em SECURITY.md.

Execute você mesmo

Requer Node.js 18+.

npm ci
npm run build
MIBLY_TOKEN=<token from the Mibly app> npm start

Na primeira execução, o token é salvo em ~/.mibly/config.json (modo 0600), então reinicializações posteriores não precisam de variável de ambiente. Na inicialização, o receiver imprime o(s) endereço(s) a serem usados, por exemplo, Target Host to enter in Mibly: 192.168.1.24:7345 (en0). Digite isso no campo Target Host do aplicativo (apenas IP:port, sem http://, sem caminho); escolha o endereço na sua rede Wi-Fi/LAN se vários forem listados.

VariávelSignificadoPadrão
MIBLY_TOKENPairing token do aplicativoconfiguração salva
MIBLY_HOSTEndereço de bind host:port0.0.0.0:7345

Conecte um cliente MCP via HTTP a http://<ip>:7345/mcp com o cabeçalho Authorization: Bearer <token>. Para agentes que iniciam servidores MCP via stdio, adicione --stdio (os logs vão para stderr).

Se você regenerar o token no aplicativo, reinicie com o novo MIBLY_TOKEN. O armazenamento criptografado antigo não pode ser descriptografado com a nova chave, então o receiver começa vazio.

Mapa do código: src/index.ts (rotas) · src/auth.ts (verificação de token) · src/config.ts (~/.mibly/config.json) · src/ingest.ts (validação) · src/store.ts (criptografia, retenção, consultas) · src/mcp.ts (as duas ferramentas). Execute os testes com npm test.

Iniciar automaticamente na inicialização

O receiver deve continuar rodando após uma reinicialização. Substitua os caminhos (e, no Linux, o usuário) pelos seus; o token já está salvo em ~/.mibly/config.json, então nenhuma variável de ambiente é necessária.

macOS (launchd) — ~/Library/LaunchAgents/com.mibly.receiver.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>com.mibly.receiver</string>
  <key>ProgramArguments</key><array>
    <string>/usr/local/bin/node</string>
    <string>/Users/you/mibly-apple-health-mcp/dist/index.js</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
</dict></plist>
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.mibly.receiver.plist

Linux (systemd) — /etc/systemd/system/mibly-receiver.service:

[Unit]
Description=Mibly receiver
After=network-online.target
Wants=network-online.target

[Service]
User=you
ExecStart=/usr/bin/node /home/you/mibly-apple-health-mcp/dist/index.js
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now mibly-receiver

Reinicie a máquina e confirme que o receiver voltou (use o IP que o receiver imprimiu):

curl -H "Authorization: Bearer <token>" http://<ip>:7345/status

Uma resposta JSON com version e lastPushAt significa que está rodando.

Atualizando de uma versão anterior

Atualize no lugar; não configure um segundo receiver.

  1. Baixe o novo código, depois npm ci && npm run build, e reinicie o serviço.
  2. Mantenha seu token e dados. Não exclua ~/.mibly e não altere o token. Um novo token inicia um armazenamento vazio.
  3. Registros legados de heartRate (leituras únicas sem heartRateSummary) são excluídos na inicialização, porque heartRate agora é um resumo por hora. Todo o resto é mantido.
  4. Verifique GET /status: deve mostrar o novo version e capabilities.

Recursos mais novos do aplicativo Mibly exigem a versão correspondente do receiver; aplicativos mais antigos continuam funcionando com um receiver mais novo.

Local vs Nuvem

Local (Grátis)Nuvem (Pro)
Caminho dos dadosiPhone → um ambiente de agente que você controlaiPhone → Mibly Cloud → seus agentes
Acesso remoto entre dispositivos—✓
Vários agentes nos mesmos dados—✓
Dados do ciclo menstrualDisponível (desativado por padrão)Nunca enviados

Este repositório cobre apenas o modo Local. Você escolhe quais tipos de dados são compartilhados e pode desativar cada um a qualquer momento.

Notas

  • O Mibly não diagnostica nem toma decisões médicas. Ele apenas dá ao seu agente acesso aos dados que você escolher compartilhar.
  • Problemas neste repositório são referentes ao código do receiver. Para suporte do aplicativo, veja mibly.app.
  • Política de privacidade: https://mibly.app/privacy/

Licença

MIT