MCPcopy Index your code
hub / github.com/MonoYan/open-medkit

github.com/MonoYan/open-medkit @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
417 symbols 1,006 edges 81 files 1 documented · 0% updated 2mo ago★ 1382 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

English | 中文

Open MedKit

对着药箱说句话,剩下的交给 AI。

家庭药箱管理工具 — 自然语言录入 · AI 结构化解析 · 过期自动提醒 · MCP Agent 接入

License: MIT Docker MCP Node


AI 检索页面

为什么选择 Open MedKit

家里的药总是找不到、忘了过期、想不起来有没有。

Open MedKit 让你用一句话把药品录入药箱,用一句话从药箱里找药。没有复杂的表单,没有手动归类 —— AI 搞定一切,你只管说。

不想打开浏览器?Open MedKit 同时提供 MCP Server,可以直接在 Claude CodeCursorClaude DesktopOpenClaw 等 AI 客户端中通过自然语言管理药箱 —— 在终端里说一句「帮我加个布洛芬」,药品就入库了。

功能亮点

说一句话就入库 自然语言描述药品 → AI 提取名称、规格、有效期等全部字段,确认即入库
换行分隔批量录 多条药品换行粘贴,一键批量解析,适合首次整理一整箱药
问一句话就找药 「有退烧药吗」「快过期的有哪些」—— 像聊天一样检索药箱
过期自动提醒 到期 / 即将到期药品自动标记高亮,支持 Telegram / Discord / 飞书 / 邮件 每日推送
Agent 原生接入 内置 MCP Server,Claude Code / Cursor / Claude Desktop / OpenClaw 直接调用 tool 管理药箱
一行命令自部署 docker compose up -d --build,药箱数据默认保存在本地 SQLite;启用 AI 或通知时仅与对应服务通信
兼容任意 AI OpenAI、Deepseek、Ollama…… 任何兼容 /v1/chat/completions 的 API 均可

功能演示

AI 智能录入演示 — 说一句话,自动解析入库

AI 解析录入演示

药品列表 — 分类筛选 · 过期状态一目了然

药品列表页面

技术栈

技术
前端 React 18 · TypeScript · Vite · TailwindCSS v3
后端 Hono (Node adapter) · TypeScript
数据库 SQLite via better-sqlite3
AI 任何兼容 OpenAI 格式的 API (/v1/chat/completions)
部署 单 Docker 容器

快速开始

Docker(推荐)

git clone https://github.com/MonoYan/open-medkit.git
cd open-medkit
cp .env.example .env
# 可选:编辑 .env 设置 AI 默认值、MEDKIT_PORT 或代理变量
docker compose up -d --build

默认访问 http://localhost:3000。如果修改了 .env 中的 MEDKIT_PORT,请使用对应端口。

AI 配置在部署时是可选的,可以留空,之后在浏览器的设置面板中配置。

首次打开 Web UI 时,应用会自动检测当前浏览器时区并写入服务端;后续的过期判断、AI 问答中的"今天"以及每日提醒时间都会以这个业务时区为准。

本地开发

前置条件:Node.js >= 20

git clone https://github.com/MonoYan/open-medkit.git
cd open-medkit
npm install
cp .env.example .env
npm run dev

前端运行在 http://localhost:5173,后端运行在 http://localhost:3000。

如果你只通过 MCP / CLI / OpenClaw 使用 Open MedKit、从不打开 Web UI,请先初始化时区。未初始化时系统会回退到 UTC,不会使用服务器本地时区。

配置

所有 AI 配置也可以在浏览器的设置面板中设置。在浏览器中输入的值存储在当前浏览器的 localStorage 中,优先级高于环境变量。

MEDKIT_PORT 仅影响 Docker Compose 的宿主机端口映射。PORTDB_PATH 用于源码 / 非 Docker 方式运行。

环境变量 默认值 说明
AI_API_KEY 兼容 OpenAI 格式的 API Key
AI_BASE_URL https://api.openai.com API 基础 URL
AI_MODEL gpt-4o-mini 模型名称
MEDKIT_PORT 3000 docker compose 暴露的宿主机端口
PORT 3000 源码运行时的服务端口(不使用 Docker)
DB_PATH ./data/medicine.db 源码运行时的 SQLite 数据库路径(不使用 Docker)
HTTP_PROXY 可选的 HTTP 代理,用于出站请求
HTTPS_PROXY 可选的 HTTPS 代理,用于出站请求
NO_PROXY 逗号分隔的不走代理的主机列表

通知提醒

支持 Telegram / Discord / 飞书 / Email(SMTP 和 Resend)四种渠道,均在 Web UI 的 设置 → 通知提醒 中配置。

各渠道的详细配置步骤、常见邮箱参数和故障排查请参阅 通知提醒配置

隐私与安全

  • 药品数据默认存储在部署环境内的 SQLite 数据库中。
  • AI 解析、图片识别和聊天功能会将提交的文本或图片发送到你配置的 OpenAI 兼容接口。
  • AI 聊天还会发送回答问题所需的当前药品库存数据,请避免录入不希望与模型提供商共享的信息。
  • 浏览器端的 AI 配置(如 AI_API_KEY、Base URL、模型名称)存储在当前浏览器的 localStorage 中。
  • 通知提醒(Telegram / Discord / 飞书 / 邮件)启用后,会将药品名称、有效期和提醒文本发送到对应平台。
  • Open MedKit 仅用于家庭药品库存管理,不提供诊断、处方或个性化用药建议。

部署

详细部署指南请参阅 部署文档

快速部署 — 任何能运行 Docker 的机器:

docker compose up -d --build

数据持久化在 Docker 卷 (medkit-data) 中。备份方式:

docker cp medkit:/data/medicine.db ./medicine-backup.db

MCP Server(Agent 集成)

Open MedKit 内置 MCP 服务器,让 AI agent 直接通过 tool 调用管理药箱数据,无需打开浏览器。

已验证支持的客户端

客户端 配置方式
Claude Code 项目根目录 .mcp.json,启动即自动连接
OpenClaw / Codex codex.json~/.codex/config.json,支持 Skill 调用
Cursor ~/.cursor/mcp.json 或项目 .cursor/mcp.json
Claude Desktop claude_desktop_config.json

快速接入 — 在项目根目录创建 .mcp.json(Claude Code 自动识别):

{
  "mcpServers": {
    "open-medkit": {
      "command": "npx",
      "args": ["tsx", "backend/src/mcp-server.ts"],
      "env": { "DB_PATH": "./backend/data/medicine.db" }
    }
  }
}

如果你通过浏览器使用,首次访问时会自动检测并保存浏览器时区。

如果你只通过 MCP 使用,建议第一次连接后先运行:

get_settings
set_timezone(timezone="Asia/Shanghai")

未初始化时区时,MCP 会明确提示当前只是回退到 UTC,而不是服务器本地时区。

详细文档:各客户端的完整配置方法、OpenClaw Skill 编写模板、对话示例、故障排查等,请参阅 MCP 使用指南

项目结构

open-medkit/
├── backend/           # Hono API 服务器 + MCP 服务器
│   └── src/
│       ├── ai/        # AI 客户端、提示词、解析逻辑
│       ├── db/        # SQLite schema 与客户端
│       ├── routes/    # REST API 路由
│       ├── services/  # Telegram、Discord、飞书、邮件 & 通知调度
│       ├── middleware/ # API Key 注入
│       └── mcp-server.ts  # MCP 服务器(stdio 传输)
├── frontend/          # React 单页应用
│   └── src/
│       ├── components/
│       ├── hooks/
│       ├── lib/       # API 客户端 & 工具函数
│       └── types/
├── Dockerfile         # 多阶段构建
├── docker-compose.yml
└── .env.example

许可证

MIT

Star History

Star History Chart

Powered by Star History

Extension points exported contracts — how you extend this code

Medicine (Interface)
(no doc)
frontend/src/types/index.ts
MedicineRecord (Interface)
(no doc)
backend/src/mcp-server.ts
Stats (Interface)
(no doc)
frontend/src/types/index.ts
DateParts (Interface)
(no doc)
backend/src/utils/timezone.ts
Settings (Interface)
(no doc)
frontend/src/types/index.ts
AuthConfig (Interface)
(no doc)
backend/src/auth/password.ts
AppSettings (Interface)
(no doc)
frontend/src/types/index.ts
SessionEntry (Interface)
(no doc)
backend/src/auth/session.ts

Core symbols most depended-on inside this repo

getDb
called by 36
backend/src/db/client.ts
withOpacity
called by 26
frontend/tailwind.config.js
isRecord
called by 23
backend/src/ai/json-utils.ts
baseInputClasses
called by 20
frontend/src/components/AddModal.tsx
getMedicineStatus
called by 15
frontend/src/lib/utils.ts
errorResult
called by 14
backend/src/mcp-server.ts
parseAiJsonResponse
called by 13
backend/src/ai/json-utils.ts
getStatusText
called by 11
frontend/src/lib/utils.ts

Shape

Function 358
Interface 58
Method 1

Languages

TypeScript100%

Modules by API surface

frontend/src/lib/api.ts40 symbols
frontend/src/components/AddModal.tsx36 symbols
frontend/src/components/SettingsModal.tsx33 symbols
frontend/src/components/AiPanel.tsx21 symbols
backend/src/ai/query.ts21 symbols
backend/src/services/notifier.ts14 symbols
frontend/src/types/index.ts11 symbols
frontend/src/components/SelectMenu.tsx11 symbols
frontend/src/components/ComboboxSelect.tsx11 symbols
backend/src/mcp-server.ts11 symbols
backend/src/ai/client.ts11 symbols
frontend/src/lib/utils.ts10 symbols

For agents

$ claude mcp add open-medkit \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact