内容
# MCP Nightscout 由 [B77.ai](https://b77.ai)
MCP(模型上下文协议)服务器,连接 AI 助手到 [Nightscout](http://www.nightscout.info/) —— 开源 CGM 远程监控平台,用于 1 型糖尿病管理。
使用 [FastMCP](https://github.com/jlowin/fastmcp) 构建,该服务器将 Nightscout 数据作为 MCP 工具公开,使 Claude 等 AI 助手能够读取血糖数据、分析模式、记录治疗等。
## 功能
### 血糖监测
- **获取当前血糖** — 最新 CGM 读取值,包含值、趋势箭头和设备信息
- **获取近期血糖** — 近期读取值(默认:最近 3 小时)
- **获取指定日期范围内的血糖** — 指定日期范围内的读取值
### 分析
- **计算血糖达标时间** — 血糖达标统计,包含分类(达标、低值、高值、极低值、极高值)、估计 A1C 和变异系数
- **获取每日血糖统计** — 每日统计,包含每小时平均值
- **分析血糖模式** — 多日模式分析,识别每天重复出现的高值/低值
### 治疗
- **获取近期治疗** — 近期胰岛素大剂量、碳水化合物记录、临时基础率、备注
- **获取指定日期范围内的治疗** — 指定日期范围内的治疗
- **记录治疗** — 记录新的治疗(大剂量、碳水化合物、运动、备注等)
- **删除治疗** — 按 ID 删除治疗
### 设备和配置文件
- **获取当前胰岛素储备** — 当前 IOB 来自环路/泵设备状态
- **获取最新设备状态** — 泵状态、环路决策、CGM 状态
- **服务器状态** — Nightscout 服务器版本、插件、阈值、单位
- **获取当前配置文件** — 基础率、ISF、IC 比率、目标血糖、DIA
- **更新 Nightscout 配置文件** — 更新配置文件设置
## 快速开始
### 1. 克隆和配置
```bash
git clone https://github.com/easyweek/mcp-nightscout.git
cd mcp-nightscout
cp .env.example .env
```
编辑 `.env` 文件,填写您的 Nightscout 实例详细信息:
```env
NIGHTSCOUT_URL=https://your-nightscout.example.com
NIGHTSCOUT_TOKEN=your-readable-token
MCP_AUTH_TOKEN=your-secret-mcp-token
```
### 2. 使用 Docker 运行
```bash
docker compose up --build
```
服务器启动在 `http://localhost:8000`。
### 3. 连接到 Claude
#### Claude 代码(命令行)
将以下内容添加到您的 MCP 设置中:
```json
{
"mcpServers": {
"nightscout": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-secret-mcp-token"
}
}
}
}
```
#### Claude.ai(远程)
当部署到公共 URL 时,使用路径中的令牌格式连接:
```
https://your-server.example.com/mcp/your-secret-mcp-token
```
## 身份验证
服务器支持 MCP 客户端的两种身份验证模式:
| 方法 | 格式 | 用例 |
| ------------- | ------------------------------- | -------------------- |
| Bearer 头部 | `Authorization: Bearer <token>` | Claude 代码命令行 |
| 路径中的令牌 | `POST /mcp/<token>` | Claude.ai 连接器 |
`/health` 端点始终开放(无需身份验证)。
设置 `MCP_AUTH_TOKEN` 以启用身份验证。如果未设置,服务器将在无身份验证的情况下运行(仅适用于本地开发)。
### Nightscout 身份验证
连接到您的 Nightscout 实例,使用 **以下任意一种**:
- **API 密钥** (`NIGHTSCOUT_API_SECRET`) — SHA1 哈希值您的明文密钥:
```bash
echo -n "your-secret" | shasum -a 1 | awk '{print $1}'
```
- **可读令牌** (`NIGHTSCOUT_TOKEN`) — 在 Nightscout 管理工具中创建
## 开发
### 本地运行(无需 Docker)
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn src.server:app --host 0.0.0.0 --port 8000 --log-config src/log_config.yaml
```
### 运行测试
```bash
pip install pytest pytest-asyncio
pytest tests/
```
### 项目结构
```
src/
server.py # MCP 工具、身份验证中间件、健康端点
nightscout_client.py # Nightscout REST API v1 的 HTTP 客户端
log_filter.py # 过滤 /health 日志
log_config.yaml # JSON 日志配置
tests/
test_auth.py # 身份验证中间件测试
```
### 添加新工具
1. 如果需要,在 `src/nightscout_client.py` 中添加 API 调用
2. 在 `src/server.py` 中添加带有清晰文档字符串的 `@mcp.tool()` 函数
3. 使用 `docker compose up --build` 进行测试
## 环境变量
| 变量 | 是否必填 | 默认值 | 描述 |
| ----------------------- | -------- | ------- | ---------------------------- |
| `NIGHTSCOUT_URL` | 是 | — | Nightscout 实例基准 URL |
| `NIGHTSCOUT_API_SECRET` | 否\* | — | API 密钥(SHA1 哈希值) |
| `NIGHTSCOUT_TOKEN` | 否\* | — | 可读令牌 |
| `NIGHTSCOUT_TIMEOUT` | 否 | `30` | 请求超时(秒) |
| `MCP_AUTH_TOKEN` | 否 | — | MCP 服务器身份验证令牌 |
\* `NIGHTSCOUT_API_SECRET` 和 `NIGHTSCOUT_TOKEN` 之一必填。
## 许可证
[MIT](LICENSE) — Copyright (c) – 2026 B77.ai (EasyWeek GmbH)