에이전트를 Marrow에 연결하기
Marrow는 내 iPhone이나 내 서버에서 Model Context Protocol로 Apple Health 데이터를 제공해요. 휴대폰에서는 읽기 도구 9개, 내 서버에서는 13개(그중 4개는 내 평소 기준과 비교한 앱 고유의 표현으로 답해요)를 쓸 수 있고, 스위치 뒤에 쓰기 도구 12개가 있으며, 베어러 토큰으로 인증하고 계정은 어디에도 없어요. 이 페이지에 설정 전체가 담겨 있어요.
에이전트가 다른 컴퓨터에 있거나 휴대폰이 잠든 동안에도 답이 필요하세요? 셀프 호스팅 미러(pip install marrow-mcp)를 페어링하세요. Claude Code, Cursor, OpenClaw에 24시간 내내 응답해요. 내장 Claude나 ChatGPT 커넥터를 보고 오셨다면, Marrow가 그 커넥터와 다른 점은 여기에 있어요.
Claude Code, Cursor, Codex 등 앱별 설정은 연결 아래 각자의 페이지에 있어요.
제 Apple Health 데이터를 당신에게 연결하고 싶어요. Marrow는 이 데이터를 MCP로 제공하는 무료 iOS 앱이고, 이를 위해 계정이나 구독이 필요하지 않아요. App Store에 있어요: https://apps.apple.com/app/id6800819435. 전체 과정을 안내해 주세요. 앱 설치, 내보내기, 로컬 MCP에서 서버 켜기, 앱이 보여 주는 URL과 베어러 토큰을 Streamable HTTP 서버로 당신의 MCP 설정에 추가하는 것까지요. 그 설정을 직접 편집할 수 없다면, 정확한 파일과 붙여넣을 내용을 알려 주세요. 설정 문서: https://marrowhealthapp.com/mcp. 연결되면 최근 7일에 대해 health_summary를 호출하고 눈에 띄는 점을 알려 주세요.
1. 서버 켜기
처음에는 꺼져 있어요. 앱에서 내보내기 → 로컬 MCP를 열고 서버를 켜세요. URL, 토큰, QR 코드가 나와요. 서버는 내 로컬 네트워크에만 연결되고, 앱이 서버가 대기 중인 정확한 주소를 보여 줘요.
2. 클라이언트에 서버 지정하기
<phone-ip>와 <token>을 앱에 표시된 값으로 바꾸세요.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, 클릭 한 번
컴퓨터에서 marrow.mcpb를 다운로드하고 더블클릭하세요. Claude Desktop이 확장 프로그램을 설치하고 위의 URL과 토큰을 물어봐요. 터미널은 필요 없어요.
Claude Desktop(수동), Cursor 또는 mcp.json을 쓰는 모든 클라이언트
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
직접 확인하기
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"}'
도구
읽기는 항상 가능해요. 쓰기는 별도의 스위치예요. 로컬 MCP에서 AI 쓰기 허용을 켜면 휴대폰 서버에도 클라우드 MCP와 같은 쓰기 도구 12개(log_meal, log_water, log_weight, log_workout, log_strength, log_sleep, log_symptom, log_mood, edit_entry, delete_entry, set_targets, undo_entry)가 나타나요. 휴대폰에 바로 반영되고 Apple Health에 기록되며, 모두 되돌릴 수 있어요. 끄면 서버는 읽기 전용이에요.
| 도구 | 반환 내용 |
|---|---|
health_summary | 활동, 심장, 수면, 영양에 걸친 최근 며칠 |
list_metrics | 추적하는 모든 지표와 단위, 데이터 범위 |
metric_daily | 원하는 지표의 일별 값, 최대 400일 |
metric_samples | 타임스탬프와 출처 기기가 있는 원본 기록 |
workouts | 모든 출처의 운동. 휴대폰에서는 Marrow 근력 세션도 세트 단위로 |
nutrition_log | 전체 영양소 내역이 담긴 음식 일기 |
strength_log | 세트 유형이 담긴 모든 리프팅 세트, 운동별 추정 1RM, 근육군별 볼륨. 워밍업은 볼륨이나 기록에 절대 포함되지 않아요 |
sleep_log | 기상일마다 하룻밤: 취침 시간, 기상 시간, 수면 시간, 단계별 분 (셀프 호스팅 미러) |
symptoms_and_mood | 심각도가 있는 증상, 그리고 감정과 그 감정의 대상이 있는 마음 상태 항목 (셀프 호스팅 미러) |
셀프 호스팅 미러와 클라우드 MCP에는 도구가 4개 더 있어요. 원본 읽기가 끝나는 지점에서 시작해요. 각 값을 앱 홈 페이지와 같은 계산법으로 내 최근 평소 기준과 비교해 점수를 매기므로(해당 날짜 자체는 제외), 에이전트가 숫자를 일반 인구와 비교하는 대신 이미 나에게 맞는 해석에서 출발해요.
| 도구 | 반환 내용 |
|---|---|
daily_brief | 하루 단위: 주요 지표별 값과 앱 고유의 표현(내 평소 수준, 평소보다 높음, 평소보다 많이 낮음), 목표 대비 음식과 수분, 어젯밤 수면, 한 운동, 기분과 증상, 눈여겨볼 플래그 |
baselines | 지표별 내 평소 기준: 기간 내 평균과 분포, 최신 값의 z 점수와 표현, 7일 평균, 월 단위로 본 90일 추세 |
what_changed | 지난주와 그 전 4주 비교: 무엇이 달라졌고 나에게 얼마나 눈에 띄는지, 음식, 운동, 수면과 취침 시간의 변화, 들어오기 시작했거나 끊긴 데이터 스트림 |
data_quality | 미러가 가진 데이터와 최신 정도: 지표별 최신 날짜, 범위, 수집 주기, 출처, 오래되었는지 여부. 에이전트가 공백을 사실로 착각하지 않게 해요 |
기기 내 서버는 앞의 원본 도구 7개에 daily_brief와 baselines를 더해 읽기 도구 9개를 제공해요. 셀프 호스팅 미러는 13개 전부를 제공하고, 호스팅 클라우드 MCP 사본도 마찬가지예요. 미러의 모든 읽기 도구는 며칠 전까지, 또는 휴대폰 달력 기준의 from과 to로 기간을 지정할 수 있고, 프롬프트(how_am_i_doing, weekly_review, doctor_prep, log_from_text) 4개와 리소스 4개도 이를 표시하는 클라이언트에 제공해요. 원본 샘플에는 수면 단계와 증상 심각도가 들어 있어요.
list_metrics 뒤에는 Apple Health 지표 172개가 있고, nutrition_log와 strength_log 뒤에는 Marrow 고유의 일기와 근력 데이터가 있어요. 활동, 심장, 수면, 신체, 호흡, 이동성, 청각, 영양, 마음, 증상, 주기, 습관을 다뤄요. 이 페이지의 기계 판독용 버전: tools.json.
휴대폰이 응답하지 못할 때도 계속 쓰려면
기기 내 서버는 앱이 실행 중일 때만 응답해요. 24시간 접근이 필요하면 셀프 호스팅 미러를 페어링하세요. Pi, NAS, 오래된 노트북에서 돌리는 Python 표준 라이브러리 파일 하나예요. 휴대폰의 백그라운드 푸시가 최신 상태를 유지해 주고, 같은 MCP 인터페이스를 http://<server-ip>:8800/mcp에서 자체 토큰으로 제공해요. 휴대폰의 도구는 앱의 지표 키(active_energy, heart_rate_variability)를 쓰는데, 서버는 그 키와 Apple의 짧은 이름(active_energy_burned)을 둘 다 받아서 에이전트가 새로 배우지 않고 오갈 수 있어요. 오픈 소스이고 설치할 수 있어요:
pip install marrow-mcp marrow-server
소스: github.com/MarrowHealth/marrow-mcp. 공식 MCP 레지스트리에 tech.skeletonarmy/marrow로 등록되어 있어요.
어느 서버도 포트 포워딩으로 공개 인터넷에 노출하지 마세요. 둘 다 LAN이나 tailnet용으로 설계되었어요. 원격 접근이 필요하면 tailscale serve나 비슷한 도구를 앞에 두어, 전송은 HTTPS로 하고 베어러 토큰이 보이기 전에 기기가 먼저 인증되게 하세요.
문제 해결
아래 테스트부터 시작하세요. AI가 실행되는 컴퓨터에서 실행하면 문제가 어느 쪽에 있는지 알 수 있어요. Marrow에서 해당 연결 페이지의 주소와 토큰을 쓰고, 휴대폰에서는 Marrow를 열어 두세요.
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"}'
| 결과 | 의미 |
|---|---|
HTTP/1.1 200 OK와 도구 목록 | 휴대폰은 정상이에요. 문제는 앱 설정에 있어요: 주소, 토큰, 또는 HTTP(Streamable HTTP)가 아닌 서버 유형이에요. 설정을 고치고 앱을 다시 시작하세요. |
401 Unauthorized | 토큰이 틀렸거나 Marrow에서 이 연결이 꺼져 있어요. 내 연결의 각 연결은 자체 토큰이 있고, 하나를 끄면 그 앱만 차단되고 나머지는 계속 작동해요. 연결을 켜거나 토큰을 다시 복사하세요. |
404 Not Found와 use POST /mcp | 경로가 잘못됐어요. 주소는 /mcp로 끝나요. |
| 연결이 거부되거나, 시간 초과까지 응답이 없음 | 컴퓨터가 휴대폰에 닿지 못해요. 아래 목록을 차례로 확인하세요. |
- Marrow가 열려 있어야 해요. 휴대폰의 서버는 Marrow가 화면 앞에 열려 있는 동안에만 응답해요. 앱을 전환하거나 휴대폰을 잠그면 iOS가 곧 서버를 멈춰요. Marrow를 다시 열면 다시 응답해요. 휴대폰이 잠든 동안에도 답이 필요하면 서버 MCP나 클라우드 MCP를 쓰세요.
- 같은 Wi-Fi 또는 tailnet. 컴퓨터와 휴대폰이 같은 Wi-Fi 네트워크나 tailnet에 있어야 해요. 로컬 MCP는 셀룰러로는 응답하지 않아요. Marrow에 네트워크 주소를 찾을 수 없음이 나오면 Wi-Fi나 tailnet에 연결하세요. 게스트 Wi-Fi와 호텔 Wi-Fi는 기기끼리 닿지 못하게 막는 경우가 많아요.
- tailnet 주소 또는 Wi-Fi 주소. Marrow는 휴대폰의 주소 중 하나, 보통 Wi-Fi 주소를 보여 줘요. Tailscale로 휴대폰에 접속하는 컴퓨터에는 대신 휴대폰의 tailnet 주소가 필요해요. Tailscale 앱에서 볼 수 있어요(
100.으로 시작해요). 설정에서 Wi-Fi 주소 자리에 그 주소를 넣고 포트와 토큰은 그대로 두세요. - 주소가 바뀌었어요. 공유기가 시간이 지나면 휴대폰에 새 Wi-Fi 주소를 줄 수 있어요. Marrow에 표시된 주소와 설정의 주소를 비교하세요. 공유기에서 주소를 예약해 두면 고정돼요.
- 로컬 네트워크 접근은 원인이 아니에요. iOS는 Marrow가 페어링된 서버처럼 내 네트워크의 기기에 접속할 때 그 권한을 물어요. 휴대폰의 서버가 컴퓨터에 응답하는 데는 권한이 필요 없어서, 그 스위치를 켜든 끄든 로컬 MCP는 달라지지 않아요.
- 컴퓨터의 VPN. tailnet이 아닌 VPN은 로컬 트래픽을 내 Wi-Fi 밖으로 보낼 수 있어요. VPN을 일시 중지하고 테스트를 다시 해 보세요.
- 앱 로그에 405가 보여요. 휴대폰은 POST에만 응답하고 스트림을 열어 두지 않아서, GET에는
405가 돌아와요. Streamable HTTP를 쓰는 앱은 POST로 계속 진행하므로, 이 줄 하나만으로는 문제가 아니에요. - 앱이 명령어(stdio)만 받아요. 휴대폰 주소를 mcp-remote 브리지로 연결하세요. 컴퓨터 자체가 아닌 일반 http 주소에는
--allow-http가 필요해요:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". Windows의 Cursor, Codex, Claude Desktop 설정 파일에서는 args 안의 공백이 깨질 수 있어요. 헤더를Authorization:${AUTH_HEADER}로 쓰고, 서버의 env에서AUTH_HEADER를Bearer <token>으로 설정하세요. - 읽을 수는 있지만 기록은 못 해요. 로컬 MCP에서 AI 쓰기 허용을 켜세요. 항목은 휴대폰에 바로 반영되고 하나씩 되돌릴 수 있어요.
- 연결이 켜지지 않아요. 무료는 한 번에 연결 1개, Marrow Pro는 최대 10개까지 켤 수 있고, AI, 서버, 자동화를 모두 합친 수예요. 먼저 내 연결에서 하나를 끄세요.
Claude Code, Cursor, VS Code 등 앱별 설정과 문제 해결은 연결에 있어요.
비용
없어요. 에이전트 접근은 백그라운드 동기화, 자동 내보내기, CSV와 JSON 내보내기, 바코드 스캔과 함께 무료 등급에 들어 있어요. Health Auto Export는 Marrow보다 먼저 MCP 서버를 내놓았고 좋은 서버이지만, 그쪽은 Premium 구독이 필요해요. 먼저 나왔다는 점이 아니라 바로 이 차이가 말할 만한 가치가 있는 점이에요.
요구 사항
- iOS 17 이상과 Apple Health가 필요해요. Android나 웹 버전은 없어요.
- Marrow는 App Store에서 무료로 받을 수 있어요: apps.apple.com/app/id6800819435.
- Marrow 계정이 없어서, 사용자 본인의 기기 없이 호출할 수 있는 호스팅 API도 없어요.