PHMForge: Evaluating LLM Agents on Industrial Prognostics through MCP-Native, Algorithm-Grounded Tools
Organizations: Columbia University · Georgia Institute of Technology · IBM, New York
Abstract
LLM agents are beginning to invoke industrial asset-management tools through the Model Context Protocol (MCP), yet whether they can act reliably on this substrate for safety-critical Prognostics and Health Management (PHM) is unanswered. Prior benchmarks conflate protocol fluency with reasoning, instrumentation failures with agent failures, and tool use with tool retrieval. We introduce PHMForge, an evaluation environment that closes each conflation. PHMForge ships 99 SME-authored scenarios across eight industrial asset classes spanning rotating equipment, aero-engines, and lithium-ion cells, on public datasets including NASA PCoE, served through 39 MCP-native tools wrapping published PHM algorithms (C-MAPSS, ISO~10816, Arrhenius capacity-fade models, time-series foundation models). Krippendorff's on a 30-scenario stratified rotating-equipment/aero-engine sample; the battery extension is single-rater. Across three agentic frameworks and six LLM backbones, the strongest configuration reaches 80.8% pass@1, with the residual gap concentrated in orchestration and tool-sequencing errors. Crucially, an architectural ablation shows that replacing MCP execution with text-based Retrieval-Augmented Generation (RAG) over telemetry-equivalent evidence collapses Remaining Useful Life pass-all-3 from 100% to 20% (5/5 vs.\ 1/5) on the battery class, exposing the structural limits of static retrieval for prognostic computation. Trajectory decomposition shows orchestration errors dominate failures across backbones, while schema-invalid tool calls concentrate in smaller open-weight models. Frontier LLMs are stronger at calling tools than at planning when to call them. PHMForge is open-sourced with deterministic evaluators, a public leaderboard, and a datasheet.
Figures & tables
| Benchmark | PHM- | Multi- | Agentic | MCP- | Tool- | SME- | Real | Det. | #Scen. |
| Domain | Asset | Native | Retrieval | Authored | Alg. | Eval | |||
| ITFormer [ 23 ] | 110k | ||||||||
| PDMBench [ 29 ] | – | ||||||||
| PHM-Bench [ 27 ] | – | ||||||||
| MLE-Bench [ 2 ] | – | 75 | |||||||
| MCP-Bench [ 24 ] | – | 250 |
| Dimension | Krippendorff’s | 95% CI |
| Realism | 0.78 | [0.71, 0.85] |
| Difficulty calibration | 0.74 | [0.66, 0.81] |
| Ground-truth correctness | 0.82 | [0.75, 0.88] |
| Pooled | 0.78 | [0.73, 0.83] |
| Framework + Model | Pass@1 | RUL | Fault | Health | Cost | Safety |
| (5) | (5) | (10) | (2) | (3) | ||
| ReAct + Llama 4 Maverick | 80.0% | 60.0% | 100.0% | 80.0% | 50.0% | 100.0% |
| ReAct + Mistral Medium 2505 | 64.0% | 0.0% | 40.0% | 90.0% | 100.0% | 100.0% |
| ReAct + GPT-OSS 120B | 56.0% | 0.0% | 100.0% | 50.0% | 50.0% | 100.0% |
| ReAct + Compact-LLM | 44.0% | 20.0% | 40.0% | 60.0% | 50.0% | 33.3% |
| ReAct + Mistral Small 3.1 24B | 44.0% | 40.0% | 60.0% | 30.0% | 50.0% | 66.7% |
| Framework + Model | Pass@1 | RUL | Fault | Health | Cost | Safety |
| (20) | (20) | (39) | (7) | (13) | ||
| Claude Code + Opus 4.6 | 80.8% | 85.0% | 75.0% | 79.5% | 71.4% | 92.3% |
| Claude Code + Sonnet 4.5 | 64.6% | 70.0% | 60.0% | 69.2% | 42.9% | 61.5% |
| Asset | Metric | Agent | Baseline | Primary Error Mode | Rate | |
| RUL Prediction | ||||||
| Turbofan | MAE (cy) | 14.8 | 10.5 | Train-test contamination | 27% | |
| RMSE (cy) | 19.2 | 13.8 | ||||
| Bearing | MAE (%) | 11.3 | 8.2 | Invalid range predictions | 15% | |
| RMSE (%) | 14.7 | 10.9 | ||||
| Lithium-Ion | MAE (cy) ∗ | 13.5 | 28.4 | Capacity regeneration | — | |
Appendix figures & tables10 assets
Supplementary material from the paper’s appendix.
Appendix
| Tool Name | Description | Key Parameters |
| Data Loading | ||
| load_dataset | Load dataset from PDMBench data directory | dataset_name (str), split (str, default= "train" ) |
| load_ground_truth | Load ground truth RUL values or fault labels | dataset_name (str), file (str, optional) |
| Model Training | ||
| train_rul_model | Train RUL prediction model with Adam optimizer | dataset (str), model_type (str: mlp/lstm/transformer), epochs (int, default=50) |
| train_fault_classifier | Train multi-class fault classification model | dataset (str), model_type (str), epochs (int) |
| Tool Name | Description | Key Parameters |
| Cost-Benefit Analysis | ||
| calculate_maintenance_cost | Compute annual preventive maintenance costs including downtime | preventive_cost (float), frequency_per_year (int), downtime_hours (float), hourly_rate (float) |
| calculate_failure_cost | Estimate expected annual cost of unplanned failures | failure_probability (float), repair_cost (float), downtime_hours (float), hourly_rate (float), consequential_cost (float) |
| optimize_maintenance_schedule | Find cost-optimal RUL threshold for scheduling maintenance | rul_estimate (float), preventive_cost (float), failure_cost (float), safety_margin (float) |
| Safety & Policy Evaluation | ||
| assess_safety_risk | Classify risk level (low/medium/high/critical) using RPN analysis | failure_mode (str), severity (int, 1–10), probability (int, 1–10), detectability (int, 1–10) |
| Tool Name | Description | Key Parameters |
| Data Access | ||
| fetch_cycle_data | Full per-cycle telemetry with all sensor channels | battery_id (str), cycle (int) |
| fetch_cycle_summary | 5-feature lightweight projection (capacity, temp, voltage, duration) | battery_id (str), cycle_range (tuple) |
| fetch_impedance_data | EIS records with / trend statistics | battery_id (str) |
| Diagnostics | ||
| capacity_soh_calculator | Deterministic SOH against first-cycle reference | battery_id (str), cycle (int) |
| Dataset | Equipment Class | Records | Features | Assets | Classes | Scenarios | Splits | Primary Task |
| Turbofan Engines | ||||||||
| CMAPSS FD001 | Aircraft engine | 33,727 | 26 | 200 | — | 6 | ✓ | RUL Prediction |
| CMAPSS FD002 | Aircraft engine | 87,750 | 26 | 519 | — | 3 | ✓ | RUL Prediction |
| CMAPSS FD003 | Aircraft engine | 41,316 | 26 | 200 | — | 2 | ✓ | RUL Prediction |
| CMAPSS FD004 | Aircraft engine | 102,463 | 26 | 497 | — | 3 | ✓ | RUL Prediction |
| Azure | Aircraft engine | 876,905 | 11 | 100 | 5 | 1 | — | RUL Prediction |
| Asset Class | # Scenarios | Task Categories Covered |
| Turbofan Engines | 14 | RUL, Health, Cost-Benefit, Safety |
| Aero-Engines | 30 | Health Analysis (4 cognitive levels) |
| Bearings | 22 | RUL, Fault Classification |
| Electric Motors | 3 | Fault Classification |
| Induction Motors | 2 | Fault Classification |
| Gearboxes | 3 | Fault Classification |
| Stage | # Scenarios (cum.) | Task Categories Introduced |
| Stage 1 | 1 | RUL Prediction |
| Stage 2 | 10 | + Fault Classification |
| Stage 3 | 20 | + Cost-Benefit, Safety/Policy |
| Stage 4 | 40 | (multi-asset expansion) |
| Stage 5 | 75 | + Engine Health Analysis (4 cognitive levels) |
| Stage 6 | 99 | + BESS lithium-ion (24 scenarios across 5 categories) |
| Predictor | Overall | B0005 | B0006 | B0018 |
| TTM fine-tuned (LOO) | 13.5 | 14.0 | 16.0 | 10.6 |
| Linear regression | 28.4 | 71.6 | 6.7 | 6.9 |
| Chronos fine-tuned (LOO) | 31.8 | 69.2 | 19.4 | 6.9 |
| TTM zero-shot | 33.5 | 32.5 | 41.7 | 26.2 |
| Empirical (Arrhenius) | 37.4 | 101.3 | 5.2 | 5.7 |
| LSTM trained from scratch | 45.4 | 16.8 | 37.4 | 82.0 |
| Category | n | Path A Fuzzy | Path A Explicit | Path B Fuzzy | Path B Explicit |
| Health Analysis | 9 | 4/9 | 7/9 | 8/9 | 9/9 |
| RUL Prediction | 5 | 1/5 | 1/5 | 5/5 | 5/5 |
| Fault Classification | 5 | 2/5 | 4/5 | 3/5 | 4/5 |
| Safety/Policy | 3 | 2/3 | 3/3 | 3/3 | 3/3 |
| Cost-Benefit Analysis | 2 | 0/2 | 1/2 | 0/2 | 1/2 |
| Total | 24 | 9/24 | 16/24 | 19/24 | 22/24 |
| Path | Query | Pass-all-3 (Wilson 95% CI) | Mean pass@1 (Wilson 95% CI) |
| Path A RAG | Fuzzy | 9/24 (37.5%) [21.1%, 57.4%] | 35/72 (48.6%) [37.4%, 59.9%] |
| Path A RAG | Explicit | 16/24 (66.7%) [46.6%, 82.2%] | 53/72 (73.6%) [62.4%, 82.5%] |
| Path B MCP | Fuzzy | 19/24 (79.2%) [59.1%, 91.2%] | 58/72 (80.6%) [69.8%, 88.2%] |
| Path B MCP | Explicit | 22/24 (91.7%) [73.0%, 98.8%] | 66/72 (91.7%) [82.7%, 96.4%] |
| Framework + Model | Steps | Tokens | Time (s) | Pass@1 |
| ReAct + Llama 4 Maverick | 7.7 | 33,017 | 42 | 80.0% |
| ReAct + Mistral Medium 2505 | 8.0 | 37,259 | 49 | 64.0% |
| ReAct + GPT-OSS 120B | 7.6 | 35,157 | 26 | 56.0% |
| ReAct + Compact-LLM | 7.7 | 31,947 | 37 | 44.0% |
| ReAct + Mistral Small 3.1 24B | 8.2 | 42,161 | 47 | 44.0% |
| ReAct + Llama 3.3 70B | 6.1 | 24,635 | 312 | 36.0% |