Зеркало на своем сервере
Небольшой сервер на вашем оборудовании, который хранит полную живую копию ваших данных Marrow и отвечает агентам, пока ваш телефон спит, лежит в кармане или находится на другом конце света.
Настройка для каждого приложения по отдельности находится на своей странице в разделе подключения.
Все руководства Marrow: MCP · Зеркало на своем сервере · Автоматизации · Файлы · Поддержка
Что это
Небольшой сервер с открытым кодом, который вы запускаете на своем оборудовании: Raspberry Pi, NAS, старом ноутбуке или VPS за $5. Телефон один раз создает с ним пару по QR-коду, а затем отправляет каждое изменение в фоне, при закрытом приложении. Сервер хранит полную копию ваших данных Marrow в SQLite и предоставляет тринадцать MCP-инструментов для чтения: семь телефонных, sleep_log и symptoms_and_mood, и четыре, которые отвечают в терминах самого приложения (daily_brief, baselines, what_changed, data_quality), так что агент может спросить «как я спал на этой неделе» в 3 часа ночи, когда телефон лежит в ящике. Лицензия MIT: github.com/MarrowHealth/marrow-mcp.
Установка
Один файл Python, только стандартная библиотека, Python 3.10 или новее:
pip install marrow-mcp marrow-server # or: python3 marrow_server.py
Или с Docker:
git clone https://github.com/MarrowHealth/marrow-mcp cd marrow-mcp docker compose up -d
При первом запуске он печатает URL для сопряжения и показывает QR-код в любом браузере в вашей сети.
Создайте пару с телефоном
- Откройте URL для сопряжения на любом ближайшем экране.
- В Marrow: Экспорт, Серверный MCP, Создать пару с сервером, отсканируйте код.
- Готово. Телефон начинает отправлять данные, а на странице сервера видно время последней отправки и сколько записей ждут.
При создании пары в каталоге данных сервера появляются два токена: один использует телефон для отправки, другой агенты для чтения. Удалите файл токена, чтобы заменить его.
Подключите к нему агента
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Тринадцать инструментов, все только для чтения. Девять исходных: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. И четыре, которые начинаются там, где заканчиваются исходные, оцененные относительно вашей собственной нормы за предыдущий период по той же математике, что использует экран «Главная»: daily_brief (один день: каждый ключевой показатель со значением и собственной формулировкой приложения, питание и вода относительно ваших целей, сон прошлой ночи, выполненные тренировки, отметки, о которых стоит упомянуть), baselines (ваша собственная норма по каждому показателю, z последнего значения и 90-дневный тренд), what_changed (последняя неделя в сравнении с четырьмя предыдущими: что изменилось, насколько это заметно для вас, сдвиги сна и времени отхода ко сну, потоки данных, которые начали или перестали поступать) и data_quality (что свежее, устарело или отсутствует, чтобы агент никогда не принимал пробел за факт). Каждое чтение принимает дни назад или от и до по календарю телефона. Сервер также перечисляет четыре подсказки (how_am_i_doing, weekly_review, doctor_prep, log_from_text) и четыре ресурса для клиентов, которые их показывают. В нем есть и двенадцать инструментов записи, они появляются, когда ваш телефон их разрешит. Начиная с Marrow 1.5 включите Разрешить запись через ИИ для вашего сервера в Экспорт, Ваши подключения, и ИИ сможет через него записывать приемы пищи, воду, вес, тренировки, сон, симптомы, настроение и цели, бесплатно. Сервер ставит каждую запись в очередь, а телефон применяет ее, когда Marrow открывается или просыпается, и любую можно отменить. Настройка для Claude Desktop, Cursor и других находится на странице MCP. Меняется только URL.
Доступ извне вашей локальной сети
Сервер говорит по обычному HTTP и не имеет собственного TLS. Не пробрасывайте его порт напрямую. Установите Tailscale на сервер и телефон и используйте tailscale serve, либо поставьте перед ним Cloudflare Tunnel или любой обратный прокси, завершающий HTTPS. QR-код для сопряжения содержит адрес, который объявляет сервер: его собственный адрес в локальной сети или тот, который вы укажете через --url. Запускайте его с адресом, которым вы действительно будете пользоваться, например marrow-server --url https://pi.your-tailnet.ts.net, затем создавайте пару.
Что остается на диске
- База данных SQLite с каждым дневным рядом, замером, записью дневника и силовым подходом, которую поддерживают в актуальном состоянии отправки с телефона.
- Каждая сырая отправка сохраняется рядом в формате JSONL, чтобы базу можно было восстановить, если вы ее испортите.
- Закладывайте от 50 до 150 МБ в год полной истории.
Единицы: показатели здоровья приходят в хранимых единицах СИ с подписями. Силовые подходы приходят в фунтах с "unit": "lb" независимо от настройки отображения на телефоне, поэтому зеркало никогда не смешивает единицы. Направьте Grafana, DuckDB или задание cron прямо на файл базы данных.
Устранение неполадок
Две проверки с компьютера, на котором работает ваш ИИ, покажут, где проблема. Сначала: работает ли сервер? Для этой проверки токен не нужен:
curl http://<server-ip>:8800/health
Он отвечает {"server": "marrow", "ok": true}. Затем: работает ли токен вашего агента?
curl -i http://<server-ip>:8800/mcp \ -H "Authorization: Bearer <mcp token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
| Что вы получаете | Что это значит |
|---|---|
200 OK и список инструментов | Сервер работает. Проверьте адрес, токен и тип сервера (HTTP) в конфигурации агента, затем перезапустите агента. |
401 с bad bearer token | Неверный токен. Агенты используют mcp-токен, а не тот, с которым сопрягается телефон. См. ниже. |
| Connection refused или таймаут | Сервер не запущен, порт неверный или брандмауэр на машине блокирует порт 8800. В Docker проверьте сопоставление портов 8800:8800. |
- Какой токен. Сервер печатает токен агентов при запуске в строке, которая начинается с
agents:. Он также лежит в файле.mcp-tokenв папке данных (./data, если вы не передали--data, и/dataв Docker). Телефон использует другой токен, из.app-token. Чтобы сменить токен агентов, удалите.mcp-token, перезапустите сервер и обновите всех агентов. - Страница сопряжения пишет, что токен неверный или отсутствует. Откройте ссылку для сопряжения точно так, как ее напечатал сервер, вместе с частью
?token=. - Страница сопряжения показывает текст, а не QR-код. Для QR нужен необязательный пакет
segno:pip install "marrow-mcp[qr]". Или в Marrow выберите Ввести вручную и введитеurlиtokenиз этого текста. - Сбой подключения на телефоне. Телефон не смог связаться с адресом из QR-кода. В Docker сервер видит только собственный адрес контейнера, поэтому укажите свой: добавьте
--url http://<your-computer-ip>:8800к его команде. Вне домашней сети Wi-Fi используйте HTTPS-адрес изtailscale serveили туннеля. - Доступ к локальной сети. Чтобы связаться с сервером в домашней сети, Marrow нужен доступ к локальной сети. iOS спрашивает при первом создании пары. Если вы ответили «нет», включите Marrow в Настройки, Конфиденциальность и безопасность, Локальная сеть и снова создайте пару при открытом Marrow.
- Этот QR-код не является кодом сопряжения Marrow. Камера прочитала другой код. Отсканируйте тот, что на странице сопряжения сервера.
- Старые данные или «Данные не доходят» в Marrow. Телефон не может отправить данные на сервер. Страница «Серверный MCP» в Marrow показывает последнюю отправку и сколько записей ждут. Проверьте, что сервер запущен, затем откройте Marrow, чтобы отправить ожидающее. Фоновые отправки выполняются, когда iOS это позволяет.
- Этому серверу нужно обновление, чтобы записывать. Обновите его командой
pip install -U marrow-mcpи перезапустите. В Docker выполнитеgit pullиdocker compose up -d --buildв клоне. - Записи от ИИ не появляются. Включите Разрешить запись через ИИ для сервера в разделе «Экспорт, Ваши подключения». Инструменты записи появляются на сервере только после этого. Каждая запись ждет на сервере и доходит, когда Marrow в следующий раз откроется или проснется.
- Подключение не включается. На бесплатном тарифе одновременно может быть включено 1 подключение, в Marrow Pro до 10: ИИ, серверы и автоматизации вместе.
Когда выбирать его вместо остальных
Выбирайте зеркало, когда агенту нужны данные, пока ваш телефон спит или далеко, или когда вам нужна база данных с запросами, а не файлы. Выбирайте MCP-сервер на телефоне, когда агент работает рядом с телефоном и вы не хотите ничего больше поддерживать. Выбирайте автоматизации, когда у вас уже есть место, куда должны попадать данные.