内容
# 灵活测量 MCP
mcp-name: io.github.flexmeasures/flexmeasures
一个适用于 [灵活测量](https://flexmeasures.io) 的 [MCP](https://modelcontextprotocol.io) 服务器,这是一个开源的能源灵活性平台。它允许 AI 代理构建和操作完整的站点:创建资产和传感器,发布时间序列数据,触发预测和调度作业,轮询作业状态,检索结果,并管理报告自动化 — 所有这些都通过灵活测量的 REST API 进行,因此服务器的身份验证和权限模型保持权威。
## 安装
```sh
uvx flexmeasures-mcp # 直接运行
# 或
pipx install flexmeasures-mcp
```
需要 Python 3.10+ 和一个灵活测量实例(您自己的或托管的)。
## 配置
| 环境变量 | 是否必需 | 含义 |
|---|---|---|
| `FLEXMEASURES_HOST` | 是 | 主机(无协议),例如 `company.flexmeasures.io` 或 `localhost:5000` |
| `FLEXMEASURES_EMAIL` | 是* | 用于身份验证的用户邮箱 |
| `FLEXMEASURES_PASSWORD` | 是* | 用户密码(不存储在代理的上下文中) |
| `FLEXMEASURES_ACCESS_TOKEN` | 否 | 邮箱/密码的替代品;注意令牌会过期且无法自动刷新 |
| `FLEXMEASURES_SSL` | 否 | `true`/`false`;默认值:`true` 除非主机是 localhost |
| `FLEXMEASURES_MCP_ENABLE_DELETE` | 否 | 启用 `delete_asset` / `delete_automation` 工具(默认关闭) |
| `FLEXMEASURES_MCP_ENABLE_AUTH_TOOL` | 否 | 启用 `authenticate(email, password)` 工具(默认关闭 — 凭证通过它传递到对话记录中) |
\* 邮箱+密码 或 访问令牌。
### Claude 桌面
```json
{
"mcpServers": {
"flexmeasures": {
"command": "uvx",
"args": ["flexmeasures-mcp"],
"env": {
"FLEXMEASURES_HOST": "company.flexmeasures.io",
"FLEXMEASURES_EMAIL": "me@company.com",
"FLEXMEASURES_PASSWORD": "..."
}
}
}
}
```
### Claude 代码
```sh
claude mcp add flexmeasures \
-e FLEXMEASURES_HOST=company.flexmeasures.io \
-e FLEXMEASURES_EMAIL=me@company.com \
-e FLEXMEASURES_PASSWORD=... \
-- uvx flexmeasures-mcp
```
### HTTP 模式(远程)
```sh
flexmeasures-mcp --transport streamable-http --host 0.0.0.0 --port 8100
```
⚠️ HTTP 模式是 **单身份**:每个连接的客户端都作为配置的灵活测量用户。 在将其暴露到 localhost 之外之前,请在其前面放置一个身份验证代理。
## 工具
元数据:`health_check`,`connection_info`(+ 受限 `authenticate`)。
资产:`list_asset_types`,`list_assets`,`get_asset`,`create_asset`,`update_asset`(+ 受限 `delete_asset`)。
传感器和数据:`list_sensors`,`get_sensor`,`create_sensor`,`post_sensor_data`,`get_sensor_data`.
作业:`trigger_forecast`,`get_forecast`,`trigger_schedule`,`get_schedule`,`get_job_status`,`list_asset_jobs`.
自动化:`create_automation`,`create_report_automation`,`list_automations`,`get_automation`,`update_automation`(+ 受限 `delete_automation`)。
工具名称与灵活测量的 OpenAPI 规范中的稳定 `operationId`s 匹配(每个实例都在 `/ui/static/openapi-specs.json` 中提供;精选界面用 `x-mcp-tool` 标记)。
异步语义:`trigger_*` 工具立即返回作业 UUID(API 返回 202);轮询 `get_job_status` 直到 `FINISHED`,然后使用 `get_schedule` / `get_forecast` 获取结果。较旧的灵活测量服务器(< v3.0-32 API)也支持。
## 演练:构建和运行站点
使用捆绑的 `build_site_and_run_schedule` 提示,或询问您的代理:
> 使用 900 kWh / 500 kW 电池构建一个灵活测量站点 "Demo plant",发布明天的日前价格,并计算一个优化的充电调度。
典型的运行:`create_asset`(站点,然后是带有 `parent_asset_id` 的电池)→ `create_sensor`(千瓦时的电池功率在 PT15M;欧元/兆瓦时的价格在 PT1H)→ `update_asset` 将站点的 flex-context 指向价格传感器 → `post_sensor_data`(24 个小时的价格)→ `trigger_schedule` 带有存储 flex-model(`soc-at-start`,`soc-min`/`soc-max`,`power-capacity`)→ `get_job_status` 直到 `FINISHED` → `get_schedule` → 代理总结 ID,数据范围,作业 UUID 和调度。
## 报告
报告仅在灵活测量中作为 **cron 自动化** 运行 — 没有运行-now 端点。`create_report_automation` 设置一个(例如使用 `PandasReporter`);结果出现在 cron 触发后报告的输出传感器(s)上,可通过 `get_sensor_data` 读取。需要具有自动化支持的灵活测量服务器。
## 扩展
第三方软件包可以通过声明入口点添加工具:
```toml
[project.entry-points."flexmeasures_mcp.tools"]
my_plugin = "my_pkg.mcp_tools:register" # register(mcp: FastMCP, settings) -> None
```
损坏的插件会被记录并跳过;它们永远不会阻止服务器启动。
## 开发
```sh
uv venv && uv pip install -e ".[test]"
uv run pytest # 单元测试(不需要服务器)
uv run pytest -m e2e # 端到端测试(参见 tests/e2e/conftest.py)
```
端到端测试需要一个带有工作线程的实时灵活测量堆栈 — 使用 `tests/e2e/docker-compose.yml`(自己的 Postgres + Redis),永远不要使用共享实例。
## 许可证
Apache 2.0