返回市场
症状监控器

症状监控器

作者:justincastilla2 星标更新:2025-10-23

项目介绍

⚠️ 开发者注意事项 ⚠️

本项目目前仍在开发中,尚未准备好用于生产环境。其目的是记录可能敏感的医疗信息,并提供一个分析平台。在演示过程中,绝对不应假设数据隐私或安全性。服务器或LLM提供的建议或指令应谨慎对待。此应用程序演示和概念验证不适用于医疗用途,不应作为专业医疗建议的替代品。

SymptomMinder 快速MCP服务器

这是一个用于记录症状及相关环境/身体信息的FastMCP服务器,将这些信息存储在Elasticsearch中,并与Claude Desktop集成以实现智能数据录入和检索。

动机

现在比以往任何时候都更重要的是,人们正在利用工具来更好地了解自己的健康和福祉。随着人工智能和机器学习的发展,我们可以利用这些工具通过数据收集和分析来更好地理解个人健康。

疾病和健康状况是复杂的,我们并不总是能够了解全貌。通过记录和分析我们的症状及相关信息,我们可以更好地了解自己的健康并做出明智的护理决策。我们知道至少有三个人患有“沉默”的疾病,这种疾病可能没有明显的外在表现,但可能会给他们带来显著的不适、疼痛或残疾。通过创建和维护他们的身体体验记录,我们希望为他们的护理提供文档和支持。

特性

  • 审查-确认-保存模式:在保存之前验证条目
  • 多模型LLM陪审团:使用多个Claude模型进行质量保证
  • 灵活搜索:日期范围、症状、药物、语义笔记搜索
  • 后续跟踪:追踪未完成的症状并收集更新
  • Elasticsearch存储:强大的查询和数据持久性
  • Claude Desktop集成:自然语言症状录入

使用Docker快速开始(推荐)

先决条件

  • 已安装Docker和Docker Compose
  • Anthropic API密钥
  • Elasticsearch实例(或使用内置本地设置)

1. 环境配置

复制示例环境文件并配置您的凭据:

cp .env.example .env

编辑.env并设置您的凭据(等号周围无空格):

# 必需
ANTHROPIC_API_KEY=your-anthropic-api-key-here
ES_ENDPOINT=https://your-elasticsearch-endpoint:443
ES_API_KEY=your-elasticsearch-api-key-here

# 可选(已提供默认值)
ES_INDEX=symptom_entries
JURY_SUMMARY_INDEX=event_summaries
JURY_COUNTER_INDEX=jury_counter
J
URY_MODE=every_1

对于本地Elasticsearch(非云):

ANTHROPIC_API_KEY=your-anthropic-api-key-here
ES_ENDPOINT=http://elasticsearch:9200
# 对于本地设置,留空ES_API_KEY
ES_INDEX=symptom_entries

2. 使用Docker Compose启动服务

# 启动Elasticsearch和SymptomMinder
docker-compose up -d

# 查看日志
docker-compose logs -f symptom-minder

# 停止服务
docker-compose down

# 重置所有数据(删除Elasticsearch卷)
docker-compose down -v

访问点:

  • Elasticsearch: http://localhost:9200
  • 健康检查: curl http://localhost:9200/_cluster/health

3. 配置Claude Desktop

将以下内容添加到您的Claude Desktop MCP设置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

配置:

{
  "mcpServers": {
    "symptom-minder": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--env-file",
        "/absolute/path/to/SymptomMinder/.env",
        "symptom-minder"
      ]
    }
  }
}

重要提示:/absolute/path/to/SymptomMinder/替换为您实际的SymptomMinder目录路径。

查找绝对路径:

# macOS/Linux
cd /path/to/SymptomMinder
pwd

# Windows (PowerShell)
cd C:\path\to\SymptomMinder
(Get-Location).Path

4. 重启Claude Desktop

在添加配置后:

  1. 完全退出Claude Desktop
  2. 重新启动Claude Desktop
  3. 查找锤子图标,表示MCP服务器已连接
  4. 通过自然语言描述症状开始使用SymptomMinder!

在本地测试服务器

开发模式与检查器

# 首先构建Docker镜像
docker build -t symptom-minder .

# 以交互模式运行进行测试
docker run -i --rm --env-file .env symptom-minder

使用FastMCP检查器(无需Docker)

如果您想在不使用Docker的情况下进行测试:

# 安装依赖项
pip install -r requirements.txt

# 使用检查器运行开发服务器
fastmcp dev server.py

检查器将在http://localhost:6274启动,并在终端输出中提供认证链接。


MCP工具和资源

录入工具

  • review_symptom_entry:在保存前审核症状条目,生成可读摘要
  • confirm_and_save_symptom_entry:将确认的条目保存到Elasticsearch,触发陪审团审核

搜索工具

  • flexible_search:带有过滤器的灵活搜索(日期范围、症状、药物、笔记)
    • 使用简单的键值对:{"start_time": "2025-08-01", "end_time": "2025-08-31"}
    • 不是原始Elasticsearch查询
  • get_incomplete_symptoms:查找标记为未完成的症状以便跟进
  • update_symptom_entry:更新现有条目并添加解决备注

资源

  • list_symptom_entries:检索最近的症状条目(默认:20个)

提示

  • symptom_followup_guidance:指导Claude进行自然的后续行为

数据管理

生成示例数据

# 生成麸质不耐受症状数据集
python data/generate_gluten_symptoms.py

# 将示例数据加载到Elasticsearch
python data/reset_and_load_gluten_data.py

这将创建一个现实的3个月数据集,展示通过每周症状模式逐渐发现麸质不耐受的过程。

重置数据库

# 清除所有数据并重置计数器
python data/reset_and_load_gluten_data.py

# 或使用Docker Compose
docker-compose down -v  # 删除所有Elasticsearch数据
docker-compose up -d

架构概述

数据流

  1. 用户输入 → Claude Desktop自然语言
  2. 审核阶段review_symptom_entry生成摘要
  3. 用户确认 → 验证条目准确性
  4. 保存阶段confirm_and_save_symptom_entry保存到Elasticsearch
  5. 陪审团审核(条件)→ 多模型LLM验证
  6. 查询/检索flexible_search或资源访问
  7. 后续(可选)→ 跟踪未完成的症状

关键组件

  • server.py:具有工具/资源定义的FastMCP服务器
  • symptom_schema.py:用于数据验证的Pydantic模型
  • jury_tools.py:多模型LLM质量保证系统
  • tools/:工具实现(搜索、更新、录入)
  • resources/:资源实现(列出条目)
  • utils/:共享实用程序(ES客户端、数据清理)

陪审团系统

LLM陪审团使用3个Claude模型并行验证结构化条目与原始笔记:

  • claude-3-5-sonnet-latest
  • claude-3-7-sonnet-latest
  • claude-sonnet-4-20250514

触发频率通过JURY_MODE配置(例如,every_5 = 在第5、10、15个条目上运行)。


使用Claude Desktop的示例用法

记录症状:

"我有一个严重的头痛,从两小时前开始。我服用了Advil,但还没有缓解。"

搜索症状:

"显示我上个月的所有头痛"

更新症状:

"早上那个头痛在我喝了更多的水之后解决了"

查找模式:

"我的症状是否与饮食有关?"


故障排除

Docker问题

容器无法启动:

# 查看日志
docker-compose logs symptom-minder

# 验证.env文件已加载
docker run -i --rm --env-file .env symptom-minder python -c "import os; print('ES_ENDPOINT:', os.environ.get('ES_ENDPOINT'))"

Elasticsearch连接失败:

  • 验证.env中的ES_ENDPOINTES_API_KEY
  • 检查Elasticsearch是否正在运行:curl $ES_ENDPOINT
  • 对于本地ES,确保未设置ES_API_KEY

Claude Desktop问题

MCP服务器未出现:

  • 验证claude_desktop_config.json中的JSON语法
  • 使用绝对路径(而不是相对路径如./
  • 完全退出Claude Desktop
  • 检查Docker镜像是否存在:docker images | grep symptom-minder

身份验证错误:

  • 确保.env文件中有正确的凭据
  • 检查配置中的--env-file路径是绝对路径
  • 验证API密钥有效(无< >占位符)

环境变量参考

变量必需默认值描述
ANTHROPIC_API_KEY-您的Anthropic API密钥
ES_ENDPOINThttp://localhost:9200Elasticsearch端点URL
ES_API_KEY-Elasticsearch API密钥(本地时省略)
ES_INDEXsymptom_entries主症状条目索引
JURY_SUMMARY_INDEXevent_summaries陪审团审核摘要索引
JURY_COUNTER_INDEXjury_counter陪审团触发计数器索引
JURY_MODEevery_1陪审团触发:noneevery_1every_5

安全通知

这是一个演示项目,没有任何安全保证。

  • 不强制执行数据隐私
  • 不要存储真实的受保护健康信息(PHI)
  • 不符合HIPAA标准
  • 不适用于医疗诊断或治疗
  • 始终咨询医疗保健专业人士获取医疗建议

开发

有关详细的开发信息,请参阅CLAUDE.md

要求

  • Python 3.12+
  • Docker & Docker Compose
  • Elasticsearch 8.x+
  • Anthropic API访问

关键依赖项

  • fastmcp>=2.0.0 - FastMCP框架
  • elasticsearch>=9.1.0 - 异步Elasticsearch客户端
  • anthropic>=0.61.0 - Anthropic API
  • pydantic - 数据验证

许可

这是一个演示项目。自行承担风险使用。

贡献

这是一个个人演示项目。欢迎分叉并根据需要适应使用。 </中文翻译>