pywrdrb-mcp
MCP服务器,使LLM能够高效访问 Pywr DRB 水资源模型代码库。使用静态分析(Python ast)从源文件中提取结构和数据,而无需导入pywrdrb或其严重依赖关系。
快速开始
先决条件
- 紫外线 安装
- Pywr DRB源代码在本地克隆(
src/pywrdrb/启动时读取目录)
运行服务器
uv run python -m pywrdrb_mcp.server运行测试
uv run pytest tests/ -v配置
| 环境变量 | 默认值 | 描述 |
|---|---|---|
PYWRDRB_ROOT | 自动检测到兄弟姐妹 Pywr-DRB/src/pywrdrb | 通往的绝对路径 pywrdrb 源程序包目录 |
服务器通过静态分析(Python ast)在启动时。它从不导入或执行pywrdrb代码,因此pywrdrb的重依赖项(numpy、pandas、pywr等)是 不 必修的。
集 PYWRDRB_ROOT 如果您的Pywr DRB签出不在默认的同级位置:
# Linux/macOS
export PYWRDRB_ROOT=/path/to/Pywr-DRB/src/pywrdrb
# Windows (PowerShell)
$env:PYWRDRB_ROOT = "C:\path\to\Pywr-DRB\src\pywrdrb"客户端设置
克劳德代码(CLI)
claude mcp add --transport stdio pywrdrb-mcp -- \
uv run --directory /path/to/pywrdrb-mcp python -m pywrdrb_mcp.server克劳德代码(VS代码扩展)
添加 .claude/settings.json (项目或用户级别):
{
"mcpServers": {
"pywrdrb-mcp": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--directory", "/path/to/pywrdrb-mcp",
"python", "-m", "pywrdrb_mcp.server"
]
}
}
}克劳德桌面版
编辑Claude Desktop配置文件:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
(通过克劳德桌面打开: 设置>开发人员>编辑配置)
{
"mcpServers": {
"pywrdrb-mcp": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/pywrdrb-mcp",
"python", "-m", "pywrdrb_mcp.server"
],
"env": {
"PYWRDRB_ROOT": "/path/to/Pywr-DRB/src/pywrdrb"
}
}
}
}Windows路径: 使用正斜杠(C:/Users/...)或逃过一劫(C:\\Users\\...)在JSON中。
保存后, 完全退出并重新启动 Claude Desktop(系统托盘>退出,而不仅仅是关闭窗口)。
Claude桌面兼容性说明
| 功能 | 支持 | 备注 |
|---|---|---|
| 工具 (14) | 完整 | 所有工具都有效。当工具可用时,会出现一个锤子图标。 |
| 资源 (22) | 部分 | 资源列在“设置”>“集成”下,但Claude Desktop列出了 不 主动阅读它们。用户必须通过以下方式手动将资源附加到邮件中 + 菜单或 @ 提及。 |
| 提示 (6) | 完整 | 提示出现在 + 菜单。带有论点的提示(例如。, how_to_understand_node)将提示输入。 |
在实践中,这意味着 工具是主要界面 在克劳德桌面上。领域知识资源(FFMP规则、STARFIT规则、洪水操作)和 how_to_* 提示有效,但需要手动用户操作才能调用。在Claude Code中,资源和提示更加无缝地集成在一起。
包含什么
工具(14)
| 工具 | 模块 | 目的 |
|---|---|---|
get_node_topology | 拓扑 | 节点的河流网络连接、滞后、仪表ID和额定曲线 |
get_reservoir_details | 拓扑 | 水库类型、容量、STARFIT参数和数据源映射 |
get_file_contents | code | 读取pywrdrb源代码树中的任何文件 |
search_codebase | code | 在所有源文件中搜索正则表达式 |
get_module_overview | code | 模块文档字符串、类和函数摘要 |
get_parameter_class_info | 参数 | 完整的类详细信息(方法、签名、文档字符串) |
get_model_builder_options | model_builder | 带有类型和默认值的选项数据类字段 |
get_model_builder_method | model_builder | 任何ModelBuilder方法的源代码 |
get_repo_status | data | Git分支、最近提交、修改的文件 |
get_data_file_list | data | 枚举磁盘上的数据文件 |
refresh_index | data | 在不重新启动的情况下重建缓存索引 |
get_parameter_list | lists | 按模块分组的所有参数类 |
get_data_object_info | data_object | 数据类层次结构、访问模式、加载方法 |
get_ffmp_data | ffmp_data | ffmp操作常数、配置文件和下游流域策略 |
资源(22)
拓扑和数据
| URI | 描述 |
|---|---|
pywrdrb://topology/network-graph | 完整的河流网络拓扑结构(上游、下游、滞后) |
pywrdrb://topology/reservoir-list | 所有17个水库的类型、容量、下游连通性 |
pywrdrb://topology/node-list | 按类型组织的所有节点(NYC、STARFIT、洪水监测) |
pywrdrb://data/inflow-types | 可用的流入类型,包括日期范围和使用提示 |
pywrdrb://data/results-sets | 所有带有描述和有效加载器的results_set选项 |
pywrdrb://domain/constants | 单位转换常数(cfs_to_mgd等) |
pywrdrb://domain/rating-curves | 美国地质调查局洪水监测仪器的等级曲线元数据 |
API参考资料
| URI | 描述 |
|---|---|
pywrdrb://api/parameter-class-index | 带模块和说明的所有参数类表 |
pywrdrb://api/model-builder-api | ModelBuilder类方法摘要 |
pywrdrb://api/data-loader-api | 数据类层次结构、方法和结果集选项 |
pywrdrb://api/post-processing-api | 性能指标和误差指标函数签名 |
pywrdrb://api/preprocessing-api | 流入预测和预处理类/函数签名 |
pywrdrb://api/nyc-operations-config | 修改FFMP规则的NYCOperationsConfig类方法 |
领域知识指南
| URI | 描述 |
|---|---|
pywrdrb://domain/ffmp-rules-summary | FFMP干旱水平、储存区、MRF目标、交付限制 |
pywrdrb://domain/starfit-rules-summary | STARFIT水库释放政策和谐条款 |
pywrdrb://domain/flood-operations-summary | 洪水监测阶段、阈值和响应操作 |
pywrdrb://domain/post-processing-guide | 性能指标、不足分析和错误指标 |
pywrdrb://domain/preprocessing-guide | 流入预测、流量预处理和数据检索 |
pywrdrb://domain/data-loading-guide | 数据加载模式、结果集描述、HDF5约定 |
项目
| URI | 描述 |
|---|---|
pywrdrb://project/package-structure | 带有模块描述的包文件树 |
pywrdrb://project/repo-status | 当前git分支、提交和修改的文件 |
pywrdrb://project/getting-started | 带有示例工作流的入门指南 |
参数化模板
| URI | 描述 |
|---|---|
pywrdrb://parameter/{class_name} | 特定参数类的详细信息 |
pywrdrb://reservoir/{reservoir_name} | 特定水库的详细信息 |
提示(6)
所有提示都使用 how_to_* 命名约定,表明它们是教学指南。
| 提示 | 工作流 |
|---|---|
how_to_add_parameter | 创建自定义Pywr参数的模式 |
how_to_debug_simulation | 逐步模拟诊断 |
how_to_understand_node | 收集有关河流网络节点的所有信息 |
how_to_modify_ffmp_rules | 通过NYCOperationsConfig更改FFMP规则 |
how_to_add_inflow_source | 添加新的水文模型流入数据集 |
how_to_review_output | 加载并解释模拟结果 |
建筑
pywrdrb-mcp/
├── src/pywrdrb_mcp/
│ ├── server.py # FastMCP entry point
│ ├── config.py # PYWRDRB_ROOT path
│ ├── index/ # AST-based static analysis engine
│ │ ├── builder.py # PywrDRBIndex — topology, lists, capacity, rating curves
│ │ ├── ast_utils.py # Safe AST extraction utilities
│ │ └── file_utils.py # File system utilities
│ ├── tools/ # 14 MCP tools (8 modules)
│ ├── resources/ # 22 MCP resources
│ ├── prompts/ # 6 MCP prompt templates
│ └── content/ # Hand-written domain knowledge (7 markdown files)
└── tests/服务器在启动时通过以下方式从Pywr DRB源代码树读取 ast.parse() 和 ast.literal_eval() --它从不导入或执行pywrdrb代码。
