内容
# ccpp-tools-mcp
[](https://github.com/jinhyunan/ccpp-tools-mcp/actions/workflows/ci.yml)
[](LICENSE)
[](pyproject.toml)
**用于联合循环发电厂(CCPP)平衡装置设计的确定性、符合标准的工程计算 — 以 MCP 服务器形式提供。**
LLM 代理非常擅长用自然语言协调工程工作流程,但不擅长算术。该服务器相应地分工任务:
任何 MCP 客户端(Claude Desktop、Claude 移动版、Claude Code、Cursor 或内部代理)驱动对话,而所有数字都来自纯粹、经过测试的 Python 函数,该函数返回其 **证据** — 管辖标准、评估的方程、您必须拥有的假设以及您必须注意的警告。
```text
"验证此燃料油输送系统:60 m³/h 柴油,40 °C,180 m 排出运行,上升 18 m,淹没吸入,NPSHr 4 m…"
Claude(协调,算术)
│ tank_capacity → 3,240 m³ 工作 → 2 × 1,800 m³
│ fluid_props_liquid → ρ 819.8 kg/m³, μ 1.97 mPa·s [ASTM D341]
│ pipe_size_select → NPS 4 SCH 40, 2.03 m/s ✓ (1–3 带)
│ dp_segment_liquid → Re 8.6e4, f 0.0205, 9.76 m [Crane TP-410]
│ pump_tdh → TDH 28.8 m → 速率 32 m
│ pump_npsha → NPSHa 13.0 m vs NPSHr 4.0 ✓
└ valve_cv_liquid → Cv 11.9, 未阻塞 [ISA 75.01]
```
完整的对话,由调用此服务器的真实 Claude 客户端生成,从头到尾保存在
[docs/cases/case-01-transcript.md](docs/cases/case-01-transcript.md) 中,交互式概览允许您
[逐步浏览工具链响应](https://jinhyunan.github.io/ccpp-tools-mcp/)。
## 为什么信任数字
每个计算都由 **两条独立的腿**(
[docs/verification.md](docs/verification.md) )支撑:
1. **来自管辖文件的黄金测试。** IAPWS-IF97 水/蒸汽实现直接从发布版本(区域 1/2/4 +
R12-08 粘度,标准库仅限)编写,并被发布版本自己的计算机程序验证表锁定,精度为 8-9 位有效数字。
2. **与独立实现进行交叉验证。** 约 1,800 个扫描断言将运行时核心与 `fluids` 和 `iapws` 进行比较,它们是
*仅用于测试* 的依赖项。运行时没有 **第三方** 计算代码,因此比较永远不会是循环的。
测试框架已经发挥了作用:它发现了一个壁厚转录错误(NPS 18 SCH 80,23.88 → 23.83 mm),并拒绝了五个从记忆中而不是文档中编写的黄金值。两个事件都故意保存在验证日志中。
## 快速开始
```bash
uvx ccpp-tools-mcp # 标准输入输出(发布到 PyPI 后)
# 或从检出:
uv run ccpp-tools-mcp # 标准输入输出
uv run ccpp-tools-mcp --transport streamable-http --port 8899 # HTTP
```
**Claude Desktop**(`claude_desktop_config.json`):
```json
{
"mcpServers": {
"ccpp-tools": {
"command": "uvx",
"args": ["ccpp-tools-mcp"]
}
}
}
```
**Claude Code:**
```bash
claude mcp add ccpp-tools -- uvx ccpp-tools-mcp
```
**Claude 移动版/网页版:** 运行 HTTP 传输,公开它(例如
`cloudflared tunnel --url http://localhost:8899`),并将
`https://<your-tunnel>/mcp` 添加为自定义连接器。
然后粘贴
[docs/cases/case-01-fuel-oil-transfer.md](docs/cases/case-01-fuel-oil-transfer.md)
中的演示提示,并观察工具链运行。
## 工具(v1)
| 工具 | 计算内容 | 标准基础 |
|------|------------------|----------------|
| `fluid_props_liquid` | ρ, ν/μ, Pv, SG(石油液体,预设或自定义 2 点拟合) | API 重度 / ASTM D341 |
| `fluid_props_steam` | 水/蒸汽 v, h, s, cp, μ;饱和状态 | IAPWS-IF97 / R12-08(独立实现) |
| `tank_capacity` | 工作/标称体积,停留时间 | 体积平衡(API 650/620 之前) |
| `pipe_size_select` | 满足速度限制的最小 NPS/SCH | ASME B36.10M + 连续性 |
| `pipe_wall_thickness` | 压力设计壁厚 vs. 选择的计划 | ASME B31.1 §104.1.2 |
| `dp_segment_liquid` | 达西摩擦 + 克兰(Crane)配件损失,Re/速度标志 | Crane TP-410 / Colebrook-White |
| `list_crane_fittings` | 接受的配件键及其 K 基础 | Crane TP-410 |
| `pump_tdh` | 总动态扬程平衡 | 水力研究所 |
| `pump_npsha` | 可用 NPSH + 边距 vs. NPSHr | HI 9.6.1 概念 |
| `pump_power` | 水力/轴功率 | ρgQH |
| `valve_cv_liquid` | 要求的 Cv/Kv + 阻塞流检查 | ISA 75.01 / IEC 60534-2-1 |
## 响应信封
每个工具返回相同的契约 — 一个您可以捍卫的数字:
```json
{
"result": { "npsha_m": 12.99, "margin_m": 8.99 },
"method": { "standard": "水力研究所(HI 9.6.1 概念)",
"equation": "NPSHa = (P_surface,abs - Pv)/(rho g) + z_static - h_f,suction" },
"assumptions": [ "大气压力 101.325 kPa(a)",
"蒸汽压力 0.5 kPa(a) 在泵送温度下" ],
"warnings": [],
"validity": "ok"
}
```
警告是承载负载的:尺寸不足的线路会带有数字 **和** 速度标志;深度降流案例会标记层流-湍流过渡;接近饱和的阀门尺寸会报告阻塞流。协调代理被期望将每个警告呈现给用户 — 案例 01 记录显示了这一点。
## 架构
```mermaid
flowchart LR
subgraph clients [MCP 客户端]
A[Claude Desktop / 移动版]
B[Claude Code / Cursor]
C[内部工厂代理]:::private
end
subgraph server [ccpp-tools-mcp]
E[简洁信封<br/>结果 + 方法 + 假设 + 警告]
subgraph core [仅限标准库的计算核心]
P[管道:B36.10M · B31.1]
H[水力:Colebrook · Crane K]
Q[设备:泵 · 罐 · ISA 75.01]
F[属性:ASTM D341 · IAPWS-IF97]
end
end
subgraph oracles [仅用于测试的预言机]
O1[fluids]
O2[iapws]
O3[官方验证表]
end
A & B & C -->|标准输入输出 / 流式 HTTP| E --> core
core -.->|交叉验证的 CI| oracles
classDef private stroke-dasharray: 5 5,stroke:#888,color:#888;
```
显示为虚线的内部协调代理是私有的、超出范围的部署;此处演示的所有内容都在通用公共 MCP 客户端上运行。
## 范围和诚实的限制
- **决策支持,非工程记录。** 结果带有其假设;责任工程师拥有标准选择、边距和代码合规性。
- v1 仅限于液体服务;可压缩 dP、热交换器评级和平行流分布将在 v1.1 中以其自己的验证案例到达。
- IF-97 区域 3(近临界)和 5 被故意不实现 — 超出范围的输入会提高而不是外推。
- 捆绑的柴油预设是一个具有代表性的 ASTM D975 示例,而不是项目燃料数据,并且在每个响应中都说明了这一点。
- 完整差距列表:[docs/verification.md](docs/verification.md)。
## 开发
```bash
uv sync --dev
git config core.hooksPath .githooks # 禁止令牌预提交门控
uv run pytest -q -m "not cross" # 单元 + 黄金
uv run pytest -q -m cross tests/cross # 与 fluids / iapws 扫描
uv run ruff check . && uv run mypy # 整理 + 严格类型
```
## 许可证
Apache-2.0。Crane TP-410、ASME、ISA、HI、ASTM 和 IAPWS 被引用为公共标准;为工程使用而自带许可副本。