Model Context Protocol server for EPRI's OpenDSS power system simulator - enabling AI-powered distribution system analysis
Server has 7 tools with basic descriptions and parameter schemas, but significant gaps prevent higher scores. All tools have descriptions (10-200 chars range), and most parameters include type info. However, output schemas are undocumented, error handling lacks recovery guidance, and several parameter descriptions are generic or incomplete. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Naming is verb-forward but some tools combine multiple concerns (e.g., optimize_der handles placement AND sizing). Parameter constraints are missing enums where appropriate (der_type, objective, plot_type). The codebase shows try-catch blocks but returns generic error dicts without actionable guidance.
Analyze maximum DER hosting capacity at a specific bus.
Check all bus voltages against specified limits and identify violations.
Generate visualizations of power system analysis results.
Load an IEEE test feeder into the OpenDSS engine.
Optimize DER placement to achieve specified objective.
Run power flow analysis on a loaded feeder.
Run time-series power flow simulation with load and generation profiles.
Output schemas undocumented. No tool returns a documented schema, LLMs cannot predict response structure or plan downstream calls. All 7 tools return Dict[str, Any] with no field documentation.
Missing tool annotations. generate_visualization is marked WRITE but has no destructiveHint. load_feeder, run_power_flow_analysis, check_voltages, analyze_capacity, optimize_der, run_timeseries are READ_ONLY but lack readOnlyHint annotations in schema.
Enum constraints missing. der_type accepts 'solar', 'battery', 'wind', 'solar_battery', 'ev_charger' but is defined as free-form string. objective accepts 'minimize_losses', 'maximize_capacity', 'minimize_violations' but no enum. plot_type accepts 5 values but no enum. LLMs will hallucinate invalid values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Error handling lacks recovery guidance. All tools return {'success': False, 'errors': [...]} but do not tell LLM what to do next. E.g., 'Failed to load feeder IEEE13' gives no hint whether to retry, check feeder_id spelling, or call a discovery tool.
Parameter descriptions incomplete. 'modifications' in load_feeder is 'Optional dictionary of modifications', what keys/values? 'options' in run_power_flow_analysis lists 3 keys but no ranges or defaults. 'constraints' in analyze_capacity and optimize_der are vague. LLMs cannot construct valid payloads.