Skip to main content
Glama
tomwugdgz

Happy MedBox MCP Server

by tomwugdgz

Sistema de Gestión de Botiquín Familiar Happy MedBox

Andamio para tres terminales: miniprograma de WeChat + backend Node/SQLite + servidor MCP + agente de recordatorios A2A. Flujo completo: captura y reconocimiento → escritura en base de datos → escaneo programado de vencimientos → MCP proporciona interfaz de datos → A2A activa recordatorios → miniprograma muestra recordatorios y sugerencias.

Selección técnica: backend y miniprograma implementados con funciones nativas/sin dependencias externas (Node 22 incluye http / node:sqlite / node:test), se puede ejecutar y probar con node sin conexión, sin necesidad de npm install.

Estructura de directorios

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

Inicio rápido

1. Iniciar backend + A2A (puertos predeterminados 3000 / 4100 / 4200)

cd happy-medbox
node src/index.js

Tras iniciar:

  • Miniprograma se conecta a REST: http://localhost:3000

  • Agente de recordatorios (AgentCard / escaneo activado): http://localhost:4100

  • Bandeja de entrada del agente de usuario: http://localhost:4200

Variables de entorno: API_PORT / REMINDER_PORT / USER_PORT / WARNING_DAYS(predeterminado 30) / REMINDER_INTERVAL_MS(predeterminado 60000) / MEDBOX_DB(predeterminado data/medbox.db, para base de datos en memoria usar :memory:).

2. Ejecutar pruebas (19 pruebas, todas pasan)

node --test

3. Iniciar servidor MCP por separado (para que el asistente de IA lo invoque mediante 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. Abrir el miniprograma

Usa el WeChat Developer Tools para importar el directorio miniprogram/ (el appid ya está configurado como touristappid, modo invitado, se puede previsualizar directamente). Para depuración en dispositivo real, cambia baseUrl en miniprogram/app.js a la IP de la LAN de tu computadora (por ejemplo, http://192.168.x.x:3000), y marca en las herramientas de desarrollo "No verificar nombres de dominio legales".

Explicación del flujo clave

  • Captura y reconocimiento: página capture usa wx.chooseMedia → POST /api/ocr → actualmente devuelve campos estructurados simulados (nombre/especificación/fecha de producción/fecha de caducidad), el usuario los revisa y luego POST /api/medicines para guardar.

  • Cuenta regresiva de vencimiento: el backend expiry.js calcula en tiempo real los días restantes y el estado (safe/warning/expired) basado en la fecha actual; la página de inicio y la página de detalles del miniprograma lo muestran.

  • Escaneo programado + envío A2A: el agente de recordatorios en a2a-server.js escanea los medicamentos próximos a vencer en intervalos → escribe en la tabla reminders y encapsula una tarea A2A Task → lo envía por HTTP a la bandeja de entrada del agente de usuario /tasks (flujo de mensajes entre agentes) → la página reminder del miniprograma consulta periódicamente y muestra, permitiendo marcar como leído.

  • Interfaz de datos MCP: el asistente de IA invoca seis herramientas a través de JSON-RPC sobre stdio, consulta medicamentos / reconocimiento / cálculo de fechas de caducidad / recuperación de sugerencias de uso según necesidad.

Sugerencias de reemplazo en producción (contrato de interfaz sin cambios)

  • Base de datos: node:sqlite → better-sqlite3 (más rápido, síncrono).

  • MCP: src/mcp-server.js implementación propia de JSON-RPC → SDK oficial @modelcontextprotocol/sdk.

  • REST: http incorporado → Express/Fastify.

  • OCR: rama simulada de ocr.js → conectar con OCR de impresión general de Tencent Cloud o plugin OCR de WeChat (requiere clave/permiso).

Límites conocidos (alcance MVP)

  • El canal de recordatorios usa primero sondeo dentro del miniprograma, se reserva interfaz para mensajes de suscripción de WeChat.

  • La base de conocimientos son pocos ejemplos integrados, la administración en segundo plano queda pendiente (P2).

  • Sin sistema de cuentas, identificación local para una sola familia (P2 para sincronización en la nube entre múltiples dispositivos).

Related MCP Connectors

Related MCP Servers