Skip to main content
Glama
tomwugdgz

Happy MedBox MCP Server

by tomwugdgz

Система управления домашней аптечкой Happy MedBox

Трёхкомпонентный программный каркас: мини-программа WeChat + бэкенд Node/SQLite + сервер MCP + агент напоминаний A2A. Полный основной процесс: фотосъёмка и распознавание → запись в базу данных → периодическое сканирование просроченных → MCP предоставляет интерфейс данных → A2A запускает напоминания → мини-программа отображает напоминания и рекомендации.

Выбор технологий: бэкенд и мини-программа реализованы на нативном коде / без внешних зависимостей (встроенные модули Node 22 http / node:sqlite / node:test), можно запускать и тестировать офлайн с помощью node, без npm install.

Структура каталогов

happy-medbox/
├─ prd.md / architecture.md      # 产品需求 + 系统架构(团队 SOP 产出)
├─ package.json / README.md
├─ src/                          # 后端:API + 数据库 + MCP + A2A
│  ├─ db.js          # SQLite 连接与建表(node:sqlite)
│  ├─ expiry.js      # 过期计算(纯函数,可单测)
│  ├─ ocr.js         # OCR 接口 + Mock(预留腾讯云/微信 OCR)
│  ├─ repository.js  # 数据访问层 CRUD
│  ├─ mcp-server.js  # MCP 工具 + JSON-RPC(stdio)
│  ├─ server.js      # REST API(小程序对接)
│  ├─ a2a-server.js  # 提醒代理 + 用户代理(双端口,A2A 推送)
│  ├─ seed.js        # 样例数据
│  └─ index.js       # 编排入口(启动 + 定时扫描)
├─ miniprogram/                  # 微信小程序端(原生)
│  ├─ pages/{index,capture,detail,knowledge,reminder}/
│  └─ utils/{api,ocr,format}.js
└─ test/                         # 单元测试(expiry/db/mcp/a2a)

Related MCP server: Medical MCP Server

Быстрый старт

1. Запуск бэкенда + A2A (порты по умолчанию 3000 / 4100 / 4200)

cd happy-medbox
node src/index.js

После запуска:

  • Мини-программа подключается к REST: http://localhost:3000

  • Агент напоминаний (AgentCard / триггер сканирования): http://localhost:4100

  • Входящие пользовательского агента: http://localhost:4200

Переменные окружения: API_PORT / REMINDER_PORT / USER_PORT / WARNING_DAYS (по умолчанию 30) / REMINDER_INTERVAL_MS (по умолчанию 60000) / MEDBOX_DB (по умолчанию data/medbox.db, для базы в памяти используйте :memory:).

2. Запуск тестов (19 тестов, все проходят)

node --test

3. Отдельный запуск сервера MCP (для вызова AI-ассистентом через stdio)

node src/mcp-server.js
# 支持 initialize / tools/list / tools/call
# 工具:query_medicines / recognize_medicine_image / compute_expiry /
#       get_medication_advice / add_medicine / list_expiring

4. Открытие мини-программы

Импортируйте каталог miniprogram/ в Инструменты разработчика WeChat (appid уже установлен как touristappid, можно просматривать в гостевом режиме). При отладке на реальном устройстве измените baseUrl в miniprogram/app.js на локальный IP-адрес компьютера (например, http://192.168.x.x:3000) и в инструментах разработчика отметьте "Не проверять легальные домены".

Описание ключевых процессов

  • Фотосъёмка и распознавание: страница capture → wx.chooseMedia → POST /api/ocr → в настоящее время возвращает Mock-структурированные поля (название/спецификация/дата производства/срок годности), после проверки пользователем POST /api/medicines для записи в базу.

  • Обратный отсчёт истечения срока: expiry.js бэкенда в реальном времени вычисляет оставшиеся дни и статус (safe/warning/expired) на основе текущей даты; отображается на главной странице и странице сведений мини-программы.

  • Периодическое сканирование + A2A-уведомления: агент напоминаний в a2a-server.js сканирует лекарства с истекающим сроком через заданный интервал → записывает в таблицу reminders и формирует A2A Task → отправляет по HTTP на /tasks пользовательского агента (межагентная передача сообщений) → страница reminder мини-программы опрашивает и отображает, можно отметить как прочитанное.

  • Интерфейс данных MCP: AI-ассистент через stdio JSON-RPC вызывает шесть инструментов для запроса лекарств / распознавания / расчёта срока годности / получения рекомендаций по применению.

Рекомендации по замене для продакшена (контракт интерфейса остаётся неизменным)

  • База данных: node:sqlite → better-sqlite3 (быстрее, синхронно).

  • MCP: src/mcp-server.js собственная реализация JSON-RPC → официальный @modelcontextprotocol/sdk.

  • REST: встроенный http → Express/Fastify.

  • OCR: ветка Mock в ocr.js → подключение Tencent Cloud Universal Print OCR или плагина WeChat OCR (требуются ключи/лицензии).

Известные ограничения (объём MVP)

  • Канал напоминаний пока использует опрос внутри мини-программы, интерфейс для подписки на сообщения WeChat оставлен.

  • База знаний содержит небольшое количество встроенных примеров, панель администратора будет реализована позже (P2).

  • Нет системы учётных записей, используется локальный идентификатор для одной семьи (P2 — облачная синхронизация для нескольких устройств).

Related MCP Connectors

Related MCP Servers