Mibly – Apple Health MCP

Servidor MCP de Apple Health de código abierto. Lleva tus datos de sueño, frecuencia cardíaca, HRV y entrenamientos desde el iPhone a Claude, Codex o cualquier agente MCP. Modo local, cifrado, sin nube.

Documentación

Español · 简体中文 · 日本語

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

Apple Health MCP — Mibly Receiver

Un servidor Apple Health MCP de código abierto: lleva tus datos de Apple Health (HealthKit) — sueño, pasos, frecuencia cardíaca, HRV, entrenamientos, peso, grasa corporal y más — a Claude Desktop/Code, Codex, o cualquier otro agente de IA que construyas o ejecutes tú mismo (cualquier cosa que hable MCP).

Modo local: tus datos nunca tocan los servidores de Mibly. Sin cuenta, sin nube, sin telemetría. Se almacenan cifrados en una máquina que tú controlas, y este repositorio es el código que lo hace.

La forma más rápida de empezar

  1. Descarga Mibly en tu iPhone → App Store
  2. Copia el prompt de configuración desde dentro de la app de Mibly (Connection Settings → "Copy for your Agent") y pégalo en tu agente.

Tu agente configura el receptor y el servicio MCP por ti. Sin clonar, sin compilar, sin archivos de configuración.

¿Por qué una app de iPhone?

Los datos de Apple Health solo se pueden leer a través de HealthKit, dentro de una app nativa de iOS. No existe una API web. Mibly maneja el lado de HealthKit — permisos, sincronización en segundo plano y formato de datos — para que no necesites una cuenta de desarrollador de Apple ni Xcode.

Qué es este repositorio

Una implementación de referencia del receptor que tu agente instala. Está aquí para que puedas:

  • Revisar exactamente qué se ejecuta en tu máquina y a dónde van tus datos
  • Personalizarlo si quieres

No necesitas este código para usar Mibly. El prompt de configuración anterior es la vía recomendada.

¿A dónde van los datos?

PreguntaRespuesta
¿Dónde se almacenan los datos de salud?Solo en ~/.mibly/data.enc. AES-256-GCM, clave = scrypt(pairing token, sal aleatoria).
¿El servicio hace solicitudes de red salientes?No. Solo escucha. Sin telemetría, sin comprobación de actualizaciones.
¿Quién puede leerlos a través de la red?Cualquiera que tenga el pairing token. Cada ruta requiere Authorization: Bearer <token>.
¿Cuánto tiempo se conservan?365 días de historial. Solo la muestra más reciente por tipo se conserva más tiempo.
¿El tráfico está cifrado en tránsito?No. El modo local está diseñado para tu LAN doméstica u oficina: el iPhone y este receptor están en el mismo Wi-Fi y hablan HTTP plano. No expongas el puerto a internet público.

Compruébalo tú mismo. Esto debería imprimir nada:

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

El protocolo de cable (endpoints, cargas útiles, formato de almacenamiento) está en PROTOCOL.md; el modelo de amenazas está en SECURITY.md.

Ejecútalo tú mismo

Requiere Node.js 18+.

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

En la primera ejecución, el token se guarda en ~/.mibly/config.json (modo 0600), por lo que los reinicios posteriores no necesitan variable de entorno. Al iniciar, el receptor imprime las direcciones a usar, p. ej. Target Host to enter in Mibly: 192.168.1.24:7345 (en0). Introdúcelo en el campo Target Host de la app (solo IP:port, sin http://, sin ruta); elige la dirección en tu Wi-Fi/LAN si aparecen varias.

VariableSignificadoPredeterminado
MIBLY_TOKENPairing token de la appconfiguración guardada
MIBLY_HOSTDirección de enlace host:port0.0.0.0:7345

Conecta un cliente MCP por HTTP a http://<ip>:7345/mcp con el encabezado Authorization: Bearer <token>. Para agentes que generan servidores MCP por stdio, añade --stdio (los registros van a stderr).

Si regeneras el token en la app, reinicia con el nuevo MIBLY_TOKEN. El almacén cifrado antiguo no se puede descifrar con la nueva clave, por lo que el receptor comienza vacío.

Mapa del código: src/index.ts (rutas) · src/auth.ts (verificación de token) · src/config.ts (~/.mibly/config.json) · src/ingest.ts (validación) · src/store.ts (cifrado, retención, consultas) · src/mcp.ts (las dos herramientas). Ejecuta las pruebas con npm test.

Iniciar automáticamente al arrancar

El receptor debería seguir ejecutándose después de un reinicio. Reemplaza las rutas (y, en Linux, el usuario) por las tuyas; el token ya está guardado en ~/.mibly/config.json, por lo que no se necesita variable de entorno.

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

Reinicia la máquina y luego confirma que el receptor está de vuelta (usa la IP que imprimió el receptor):

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

Una respuesta JSON con version y lastPushAt significa que está en ejecución.

Actualizar desde una versión anterior

Actualiza en el lugar; no configures un segundo receptor.

  1. Trae el código nuevo, luego npm ci && npm run build, y reinicia el servicio.
  2. Conserva tu token y tus datos. No elimines ~/.mibly ni cambies el token. Un token nuevo inicia un almacén vacío.
  3. Los registros heredados de heartRate (lecturas individuales sin heartRateSummary) se eliminan al iniciar, porque heartRate ahora es un resumen por hora. Todo lo demás se conserva.
  4. Comprueba GET /status: debería mostrar el nuevo version y capabilities.

Las funciones más nuevas de la app de Mibly necesitan la versión correspondiente del receptor; las apps más antiguas siguen funcionando con un receptor más nuevo.

Local vs Nube

Local (Gratis)Nube (Pro)
Ruta de datosiPhone → un entorno de agente que tú controlasiPhone → Mibly Cloud → tus agentes
Acceso remoto entre dispositivos—✓
Múltiples agentes sobre los mismos datos—✓
Datos del ciclo menstrualDisponibles (desactivados por defecto)Nunca se suben

Este repositorio cubre solo Local. Tú eliges qué tipos de datos se comparten y puedes desactivar cada uno en cualquier momento.

Notas

  • Mibly no diagnostica ni toma decisiones médicas. Solo da a tu agente acceso a los datos que elijas compartir.
  • Los problemas en este repositorio son para el código del receptor. Para soporte de la app, consulta mibly.app.
  • Política de privacidad: https://mibly.app/privacy/

Licencia

MIT