NINSAÚDE MCP 服务器
一个全面的MCP(模型上下文协议)服务器,用于与NINSAÚDE诊所API集成,提供45+项医疗管理工具,包括患者记录、预约、病历、账单、报告和患者调查。
特点/功能
- 安全认证采用最高安全性的刷新令牌优先的OAuth2认证
- 一次性凭证使用用于获取刷新令牌的凭据仅使用一次 - 持久存储刷新令牌安全地存储在 ~/.ninsaude/tokens.json 中(权限为 0o600) - 不存储凭证初始化后,凭证从未被存储或传输 - 自动续订所有认证仅使用刷新令牌 - 内存缓存访问令牌临时缓存(有效期15分钟,预留1分钟安全缓冲)
- 速率限制可配置最小间隔的自动请求限流(默认请求间隔为60秒)
- 患者管理完成患者记录的增删改查(CRUD)操作
- 预约系统安排、重新安排和管理预约
- 病历记录创建和管理电子健康记录
- 财务管理跟踪收入、支出和付款状态
- 报告生成各种关于预约、财务和患者的报告
- 专业与服务管理管理医疗服务提供者和服务
- 保险整合处理保险公司和保险计划
- 警报系统创建患者提醒和拦截规则
- 调查系统创建并发送患者调查问卷,收集回复,分析结果
安装
Claude桌面版的快速安装
macOS/Linux
# Clone the repository
git clone
cd MCP-NIN
# Run the installation script
./install-claude-desktop.shWindows
# Clone the repository
git clone
cd MCP-NIN
# Run the installation script
powershell -ExecutionPolicy Bypass -File install-claude-desktop.ps1手动安装
# Clone the repository
git clone
cd MCP-NIN
# Install dependencies
npm install
# Build the TypeScript code
npm run build配置
1. 环境设置
创建一个 .env 请使用您的NINSAÚDE API凭据的文件:
cp .env.example .env编辑 .env 使用您的凭据:
NINSAUDE_API_URL=https://api.ninsaude.com/v1
NINSAUDE_ACCOUNT=your_account_here
NINSAUDE_USERNAME=your_username_here
NINSAUDE_PASSWORD=your_password_here
NINSAUDE_ACCOUNT_UNIT=your_unit_id_here
# Optional: Configure rate limiting (default is 60 seconds)
NINSAUDE_RATE_LIMIT_SECONDS=60重要凭证仅在初始化过程中使用一次。之后,它们将不再被使用或存储。
2. 认证初始化
初始化身份验证以生成并存储刷新令牌:
npm run token:init这个命令将:
- ✓ 使用您的凭据进行身份验证(仅一次)
- ✓ 安全获取并存储刷新令牌(refresh_token)于
~/.ninsaude/tokens.json - ✓ 将文件权限设置为0o600(仅所有者可读/写)
- ✓ 获取令牌后,从内存中清除凭据
安全提示初始化后,您的凭据将不再被使用或传输。所有未来的身份验证仅使用刷新令牌。
3. 令牌管理命令
# Check authentication status
npm run token:status
# Revoke token and clear storage (logout)
npm run token:revoke
# Get help
npm run token:help速率限制配置
MCP服务器内置了速率限制功能,以防止对NINSAÚDE API造成过大压力:
- 默认间隔请求之间间隔60秒
- 可配置的设定
NINSAUDE_RATE_LIMIT_SECONDS在里面.env - 自动的所有API请求都会自动遵守配置的间隔时间
- 透明的请求会被排队,并根据需要进行延迟处理
- 监测检查速率限制器的统计数据以进行调试
速率限制器确保符合API使用策略,并防止因请求过多而导致的服务中断。
Claude桌面集成
安装脚本会自动配置Claude Desktop。如果您需要手动配置:
- 找到Claude桌面配置文件:
- macOS(苹果电脑操作系统): ~/Library/Application Support/Claude/claude_desktop_config.json - Linux: ~/.config/Claude/claude_desktop_config.json - Windows: %APPDATA%\Claude\claude_desktop_config.json
- 添加NINSAÚDE MCP服务器配置:
{
"mcpServers": {
"ninsaude-mcp-server": {
"command": "node",
"args": ["/path/to/MCP-NIN/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}- 重启 Claude 桌面以加载新服务器
使用
启动服务器
# Production mode
npm start
# Development mode
npm run dev可用工具
认证工具
ninsaude_get_token- 获取OAuth2访问令牌ninsaude_revoke_token- 撤销当前的刷新令牌
单元管理
ninsaude_list_units- 列出医疗保健机构ninsaude_get_unit- 获取特定单元的详细信息
患者管理
ninsaude_list_patients- 列出并过滤患者ninsaude_get_patient- 通过ID获取患者信息ninsaude_create_patient- 创建新患者ninsaude_update_patient- 更新患者信息ninsaude_delete_patient- 删除患者记录
预约管理
ninsaude_list_appointments- 列出带过滤器的预约ninsaude_get_appointment- 获取预约详情ninsaude_create_appointment- 创建新预约ninsaude_update_appointment_status- 更新预约状态ninsaude_reschedule_appointment- 重新安排预约ninsaude_list_available_slots- 检查可用时间段
专业与服务管理
ninsaude_list_professionals- 列出医疗保健专业人员ninsaude_get_professional- 获取专业详情ninsaude_list_services- 列出可用服务ninsaude_get_service- 获取服务详情
病历
ninsaude_list_medical_records- 列出病历ninsaude_get_medical_record- 获取特定的医疗记录ninsaude_create_medical_record- 创建新的医疗记录ninsaude_list_prescriptions- 列出处方
财务管理
ninsaude_list_financial_records- 列出财务记录ninsaude_get_financial_record- 获取财务记录详情ninsaude_create_financial_record- 创建财务条目ninsaude_update_financial_status- 更新付款状态
保险管理
ninsaude_list_insurances- 列出保险公司ninsaude_get_insurance- 获取保险详情
报告工具
ninsaude_appointment_report- 生成预约报告ninsaude_financial_report- 生成财务报告ninsaude_patient_report- 生成患者报告
附加工具
ninsaude_list_documents- 列出文档模板ninsaude_list_patient_alerts- 列出患者警报ninsaude_create_patient_alert- 创建患者警报
示例
创建一个患者(记录/档案)
{
"tool": "ninsaude_create_patient",
"arguments": {
"nome": "João Silva",
"cpf": "12345678901",
"dataNascimento": "1990-05-15",
"sexo": "M",
"email": "joao.silva@email.com",
"celular": "11999999999",
"endereco": {
"cep": "01310-100",
"logradouro": "Av. Paulista",
"numero": "1000",
"bairro": "Bela Vista",
"cidade": "São Paulo",
"estado": "SP"
}
}
}预约时间
{
"tool": "ninsaude_create_appointment",
"arguments": {
"pacienteId": 123,
"profissionalId": 45,
"unidadeId": 1,
"servicoId": 10,
"dataHora": "2024-01-20 14:00:00",
"duracao": 30,
"observacoes": "First consultation"
}
}列出并应用筛选条件的预约
{
"tool": "ninsaude_list_appointments",
"arguments": {
"filter": {
"dataInicio": "2024-01-01",
"dataFim": "2024-01-31",
"status": "AGENDADO",
"profissionalId": 45
},
"limit": 20,
"order": "-dataHora"
}
}创建医疗记录
{
"tool": "ninsaude_create_medical_record",
"arguments": {
"pacienteId": 123,
"profissionalId": 45,
"agendamentoId": 789,
"anamnese": "Patient reports headaches for the past week",
"exameFisico": "Blood pressure: 120/80, Temperature: 36.5°C",
"hipoteseDiagnostica": "Tension headache",
"conduta": "Rest and hydration recommended",
"prescricao": [
{
"medicamento": "Paracetamol 500mg",
"dosagem": "1 tablet",
"frequencia": "Every 8 hours",
"duracao": "3 days",
"observacoes": "Take with food"
}
]
}
}发展
运行测试
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm test -- --coverage代码检查与格式化
# Run ESLint
npm run lint
# Format code with Prettier
npm run formatAPI速率限制与最佳实践
- 自动速率限制服务器强制要求请求之间保持最小间隔(默认60秒)。如有需要,所有请求将自动延迟
- 配置调整
NINSAUDE_RATE_LIMIT_SECONDS在.env更改最小间隔(不建议设置低于30秒) - 监测速率限制的信息会被记录到标准错误输出(stderr),以便进行调试和监控
- 分页使用分页参数(
limit,offset) 适用于大型数据集 - 缓存尽可能缓存频繁访问的数据以减少API调用
- 错误处理优雅地处理错误并检查错误响应
- 代币生命周期:
- 刷新令牌持久存储(除非被撤销,否则不会过期) - 访问令牌在内存中缓存15分钟 - 仅使用refresh_token自动续订 - 初始设置后无需输入凭据
错误处理
所有工具返回的错误格式都是一致的:
{
"error": "Error message description"
}对于API错误,格式中包含HTTP状态码:
{
"error": "404: Record not found"
}做出贡献
- 为仓库创建分支(或“克隆仓库”)
- 创建你的特性分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推送至分支(
git push origin feature/amazing-feature) - 提交一个拉取请求
许可证
MIT 许可证 - 详情请参见 LICENSE 文件
支持
对于问题和疑问:
- 请查阅NINSAÚDE API文档
- 查看特定错误代码的错误消息
- 在仓库中打开一个问题(或“提交一个问题”)
