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) · 简体中文 · 日本語
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
- Baixe o Mibly no seu iPhone → App Store
- 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?
| Pergunta | Resposta |
|---|---|
| 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ável | Significado | Padrão |
|---|---|---|
MIBLY_TOKEN | Pairing token do aplicativo | configuração salva |
MIBLY_HOST | Endereço de bind host:port | 0.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.
- Baixe o novo código, depois
npm ci && npm run build, e reinicie o serviço. - Mantenha seu token e dados. Não exclua
~/.miblye não altere o token. Um novo token inicia um armazenamento vazio. - Registros legados de
heartRate(leituras únicas semheartRateSummary) são excluídos na inicialização, porqueheartRateagora é um resumo por hora. Todo o resto é mantido. - Verifique
GET /status: deve mostrar o novoversionecapabilities.
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 dados | iPhone → um ambiente de agente que você controla | iPhone → Mibly Cloud → seus agentes |
| Acesso remoto entre dispositivos | — | ✓ |
| Vários agentes nos mesmos dados | — | ✓ |
| Dados do ciclo menstrual | Disponí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