Conecte um agente ao Marrow
O Marrow serve os seus dados do Apple Health pelo Model Context Protocol, a partir do seu próprio iPhone ou do seu próprio servidor. Sete ferramentas somente leitura no celular, treze no seu próprio servidor (quatro delas respondem nos termos do próprio app, comparadas com o seu normal), autenticação por token bearer, nenhuma conta em lugar nenhum. Esta página é toda a configuração.
Um agente em outra máquina, ou precisa de respostas enquanto o celular dorme? Emparelhe o espelho autohospedado (pip install marrow-mcp): ele responde 24 horas por dia ao Claude Code, ao Cursor e ao OpenClaw. Se você chegou aqui pelo conector nativo do Claude ou do ChatGPT, veja o que ele faz que os outros não fazem.
A configuração app por app, para Claude Code, Cursor, Codex e mais, está na página de cada um em conexões.
Quero conectar os meus próprios dados do Apple Health a você. O Marrow é um app de iOS grátis que os serve por MCP, sem conta e sem assinatura para isso. Ele está na App Store: https://apps.apple.com/app/id6800819435. Me guie em tudo: instalar o app, ativar o servidor em Exportar e depois MCP local, e adicionar a URL e o token bearer que ele me mostra à sua configuração de MCP como um servidor Streamable HTTP. Se você não consegue editar essa configuração sozinho, me diga o arquivo exato e o que colar. Documentação da configuração: https://marrowhealthapp.com/mcp. Quando estiver conectado, chame health_summary para os últimos 7 dias e me diga o que se destaca.
1. Ative o servidor
Ele vem desativado. No app: Exportar → MCP local e ative o servidor. Você recebe uma URL, um token e um QR code. O servidor escuta apenas na sua rede local, e o app mostra o endereço exato em que ele está escutando.
2. Aponte o seu cliente para ele
Troque <phone-ip> e <token> pelo que o app mostra.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, com um clique
Baixe o marrow.mcpb no seu computador e dê dois cliques. O Claude Desktop instala a extensão e pede a URL e o token acima. Sem terminal.
Claude Desktop (manual), Cursor, ou qualquer cliente que use um mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Teste à mão
curl -s http://<phone-ip>:21212/mcp \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
As ferramentas
As leituras estão sempre disponíveis. As gravações são uma segunda chave. A partir do Marrow 1.5, o servidor do celular lista as mesmas doze ferramentas de gravação do MCP na nuvem (log_meal, log_water, log_weight, log_workout, log_strength, log_sleep, log_symptom, log_mood, edit_entry, delete_entry, set_targets, undo_entry) depois que você ativa Permitir gravação por IA em MCP local, aplicadas na hora no celular e gravadas no Apple Health, todas passíveis de desfazer. Desativado, o servidor é somente leitura.
| Ferramenta | Retorna |
|---|---|
health_summary | Dias recentes de atividade, coração, sono e nutrição |
list_metrics | Toda métrica acompanhada, com unidades e cobertura |
metric_daily | Valores diários de qualquer métrica, até 400 dias |
metric_samples | Registros brutos com horários e dispositivos de origem |
workouts | Treinos de todas as origens. No celular, também as sessões de força do Marrow série por série |
nutrition_log | Diário de alimentação com o detalhamento completo de nutrientes |
strength_log | Cada série de levantamento com o tipo de série, a 1RM estimada por exercício e o volume por grupo muscular. Aquecimentos nunca contam para volume ou recordes |
sleep_log | Uma noite por dia de despertar: hora de dormir, hora de acordar, horas de sono, minutos por fase (espelho autohospedado) |
symptoms_and_mood | Sintomas com a gravidade e registros de Estado de Espírito com sentimentos e a que se referiam (espelho autohospedado) |
Mais quatro no espelho autohospedado e no MCP na nuvem. Elas começam onde as leituras brutas terminam: cada valor é comparado com o seu próprio normal recente, com a mesma conta que a tela Início do app usa (excluindo o próprio dia), então um agente parte de uma leitura que já é verdadeira para você, em vez de julgar um número contra a população.
| Ferramenta | Retorna |
|---|---|
daily_brief | Um dia: cada métrica-chave com o valor e a frase do próprio app (normal para você, acima do seu normal, bem abaixo do seu normal), alimentação e água em relação às metas, o sono da noite passada, treino feito, humor e sintomas, e alertas que valem ser mencionados |
baselines | O seu próprio normal por métrica: média e dispersão na janela, o z e a frase do valor mais recente, a média de 7 dias e a tendência de 90 dias por mês |
what_changed | A última semana contra as quatro anteriores: o que se moveu e o quanto isso é notável para você, mudanças em alimentação, treino, sono e hora de dormir, séries de dados que começaram ou pararam de chegar |
data_quality | O que o espelho guarda e o quanto está atualizado: por métrica, o dia mais recente, a cobertura, a cadência, as origens e se ficou desatualizada, para que um agente nunca confunda uma lacuna com um fato |
O servidor no aparelho serve as primeiras sete ferramentas brutas mais daily_brief e baselines (nove leituras). O espelho autohospedado serve as treze, assim como a cópia hospedada do MCP na nuvem. Toda leitura no espelho aceita dias atrás ou de e até no calendário do celular, e o espelho também oferece quatro prompts (how_am_i_doing, weekly_review, doctor_prep, log_from_text) e quatro recursos para clientes que os mostram. As amostras brutas trazem fases do sono e gravidades de sintomas.
Há 172 métricas do Apple Health por trás de list_metrics, mais os dados nativos do Marrow de diário e de força por trás de nutrition_log e strength_log, cobrindo atividade, coração, sono, corpo, respiração, mobilidade, audição, nutrição, mente, sintomas, ciclo e hábitos. Versão legível por máquina desta página: tools.json.
Mantendo no ar quando o celular não está
O servidor no aparelho responde enquanto o app está rodando. Para acesso 24 horas por dia, emparelhe um espelho autohospedado: um arquivo Python com a biblioteca padrão em um Pi, NAS ou notebook velho. Os envios do celular em segundo plano o mantêm atualizado, e ele fala a mesma interface MCP em http://<server-ip>:8800/mcp, com token próprio. As ferramentas do celular usam as chaves de métrica do app (active_energy, heart_rate_variability). O servidor aceita tanto essas quanto os nomes curtos da Apple (active_energy_burned), então um agente pode alternar entre eles sem reaprender. É de código aberto e instalável:
pip install marrow-mcp marrow-server
Código: github.com/MarrowHealth/marrow-mcp. Listado no registro oficial do MCP como tech.skeletonarmy/marrow.
Não abra portas do roteador de nenhum dos servidores para a internet. Os dois foram feitos para uma LAN ou uma tailnet. Se precisar de acesso remoto, coloque tailscale serve ou equivalente na frente, para que o transporte seja HTTPS e o dispositivo seja autenticado antes de o token bearer ser visto.
Solução de problemas
Comece pelo teste abaixo, rodado no computador em que a sua IA roda. Ele diz de que lado está o problema. Use o endereço e o token da página da conexão no Marrow, com o Marrow aberto no celular.
curl -i http://<phone-ip>:21212/mcp \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
| O que você recebe | O que significa |
|---|---|
HTTP/1.1 200 OK e uma lista de ferramentas | O celular funciona. O problema está nas configurações do seu app: o endereço, o token ou um tipo de servidor diferente de HTTP (Streamable HTTP). Corrija a configuração e reinicie o app. |
401 Unauthorized | O token está errado, ou esta conexão está desativada no Marrow. Cada conexão em Suas conexões tem o seu próprio token, e desativar uma bloqueia aquele app enquanto as outras seguem funcionando. Ative-a, ou copie o token dela de novo. |
404 Not Found com use POST /mcp | O caminho está errado. O endereço termina em /mcp. |
| Conexão recusada, ou sem resposta até o tempo esgotar | O computador não alcança o celular. Siga a lista abaixo. |
- O Marrow precisa estar aberto. O servidor do celular só responde enquanto o Marrow está aberto na frente. Quando você troca de app ou bloqueia o celular, o iOS logo o pausa. Abra o Marrow de novo e ele volta a responder. Para respostas com o celular em repouso, use o MCP do servidor ou o MCP na nuvem.
- Mesmo Wi-Fi ou tailnet. O computador e o celular precisam compartilhar uma rede Wi-Fi ou uma tailnet. O MCP local nunca responde por dados móveis. Se o Marrow disser Nenhum endereço de rede encontrado, entre em um Wi-Fi ou em uma tailnet. O Wi-Fi de convidados e de hotéis muitas vezes impede que os dispositivos se alcancem.
- Endereço da tailnet ou endereço de Wi-Fi. O Marrow mostra um dos endereços do celular, em geral o de Wi-Fi. Um computador que alcança o celular pelo Tailscale precisa do endereço do celular na tailnet. O app Tailscale o mostra (começa com
100.). Coloque-o na sua configuração no lugar do endereço de Wi-Fi e mantenha a mesma porta e o mesmo token. - O endereço mudou. Um roteador pode dar ao celular um endereço de Wi-Fi novo depois de um tempo. Compare o endereço no Marrow com o da sua configuração. Um endereço reservado no roteador o mantém fixo.
- O acesso à Rede Local não é a causa. O iOS pergunta isso quando o Marrow alcança um dispositivo na sua rede, como um servidor emparelhado. O servidor do celular respondendo a um computador não precisa de permissão, então ativar ou desativar essa chave não muda o MCP local.
- Uma VPN no computador. Uma VPN que não seja a sua tailnet pode desviar o tráfego local do seu Wi-Fi. Pause-a e tente o teste de novo.
- Um 405 no log do seu app. O celular responde apenas a POST e não mantém nenhum fluxo aberto, então um GET recebe
405. Apps que falam Streamable HTTP seguem com POST, então essa linha sozinha não é o problema. - O seu app só aceita um comando (stdio). Passe o endereço do celular pela ponte mcp-remote. Ela precisa de
--allow-httppara um endereço http simples que não seja o do próprio computador:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". Em um arquivo de configuração do Cursor, do Codex ou do Claude Desktop no Windows, espaços dentro dos args podem ser corrompidos. Escreva o cabeçalho comoAuthorization:${AUTH_HEADER}e definaAUTH_HEADERcomoBearer <token>no env do servidor. - Ele lê, mas não registra. Ative Permitir gravação por IA em MCP local. Os registros são aplicados na hora no celular e cada um pode ser desfeito.
- A conexão não quer ativar. O plano Grátis mantém 1 conexão ativa por vez, o Marrow Pro até 10: IAs, servidores e automações juntos. Desative uma em Suas conexões primeiro.
A configuração e as soluções app por app, para Claude Code, Cursor, VS Code e mais, estão em conexões.
Quanto custa
Nada. O acesso de agentes está no plano grátis, junto com a sincronização em segundo plano, a exportação automática, a exportação em CSV e JSON e a leitura de código de barras. O Health Auto Export lançou um servidor MCP antes do Marrow, e é bom, mas o deles exige uma assinatura Premium. Essa diferença, e não a primazia, é a afirmação que vale a pena fazer.
Requisitos
- iOS 17 ou mais recente, e o Apple Health. Não existe versão para Android nem para web.
- O Marrow está na App Store, grátis: apps.apple.com/app/id6800819435.
- Não existe conta do Marrow, então não há API hospedada para chamar sem o aparelho do próprio usuário.