Skip to main content
Glama
omari91

grid-screen-mcp

by omari91

Grid Connection Screening Agent (rt-grid-screening-agent)

PyPI CI License: MIT

A deployable, physics-grounded Agentic Grid Connection Screening Tool spanning the full Australian vertical voltage continuum (415 V LV → 11–20 kV MV → 132–500 kV NEM Transmission).

Built as the operational software implementation of the PhD research framework (Constraint-Decoupled Dominance across the Vertical Grid Continuum), this package exposes a single deterministic physics core across three interfaces:

  1. MCP Server (grid-screen-mcp) — Plug-and-play Model Context Protocol Interconnection Queue Gatekeeper (stdio, streamable-http, sse) for Claude Desktop, Cursor, Antigravity, and autonomous engineering workflows.

  2. FastAPI Service & Operator Compliance Dashboard (grid-screen-api) — Structured JSON (POST /v1/screen), natural-language intake (POST /v1/screen/intake), live Interconnection Queue telemetry (GET /v1/queue), interactive HTML5 Compliance Dashboard (GET /dashboard), and zero-dependency SVG voltage & envelope plots (POST /v1/screen/plot, POST /v1/screen/intake/plot).

  3. CLI Agent (grid-screen) — Instant terminal triage (grid-screen triage and grid-screen ask with --study-type snapshot | time_series and --svg plot.svg).


Core Architecture: "LLM Orchestrates, Physics Solves, Gate Bounds"

Instead of acting as a generic chatbot wrapper, this tool operates as an Interconnection Queue Backlog Gatekeeper in front of real unbalanced 3-phase OpenDSS and N-1 AC contingency solvers:

flowchart TD
    In["Messy Connection Application (JSON, MCP Tool Call, or Free-Text Inquiry)"] --> Intake["Intake Normalizer & Strict Schema Gate (ConnectionApplication)"]
    Intake --> Dedup{"State-Compression Queue Fingerprint Cache"}
    Dedup -- "Duplicate Sweep (<0.1 ms)" --> Out["Auditable ScreeningVerdict + Cryptographic AuditReceipt (SHA-256)"]
    Dedup -- "New Physical State" --> T1["1. inspect_connection_point (NetworkX Z_th, R/X, S_sc, SHA-256)"]
    T1 --> T2["2. classify_screening_regime (3D Master Vertical Grid Matrix)"]
    T2 --> T3["3. run_tier1_screen (<10 ms Season-Stratified dV/dP + N-1 SCR + Pareto Headroom)"]
    T3 -- "fast_clear_eligible = true" --> Gate["5. Supervisory Physics Sanity Gate + Human-in-the-Loop Flag"]
    T3 -- "N-1 SCR < 2.0 (NER S5.2.5 Override)" --> Mit["4b. propose_connection_envelopes (5kW/3kW SOE, Snapshot DOE, or TX System Strength)"]
    T3 -- "flagged_for_tier2 = true" --> T4["4. run_tier2_ac_study (Isolated Subprocess OpenDSS 3-Phase AC / N-1 AC)"]
    T4 -- "Unconstrained Breach" --> Mit
    T4 -- "Compliant" --> Gate
    Mit --> Gate
    Gate --> Out

Related MCP server: EnergyAtIt MCP Server

Who is this for? (User Personas & Friction)

Standard LLM wrappers fail in power-systems engineering because language models guess voltages, confuse voltage-tier physics, or silently skip non-converged AC power flows. This agent was built to solve specific friction points for the humans and systems who actually run the grid.

1. The Connection Engineer (DNSP / TSO)

  • The Persona: A mid-to-senior planning engineer processing grid connection applications (e.g., Ausgrid, UK Power Networks, 50Hertz, Transpower).

  • The Daily Reality: Drowning in connection requests (such as the 67 GW NEM queue). Manual AC power-flow studies take hours or days per application, forcing reliance on static worst-case heuristics.

  • The Friction:

    • "Safe" Bias: Viable projects get rejected or hit with massive upgrade costs because engineers lack time to evaluate conditional operating envelopes.

    • License Risk: Standard AI (like raw ChatGPT) is unusable because a single hallucinated voltage puts an engineer's professional license and grid safety on the line.

  • How this Agent Solves It: "LLM Orchestrates, Physics Solves" guarantees the LLM never guesses. Requests route to deterministic Python/OpenDSS solvers, giving a <10 ms fast-pass for obvious cases, an isolated 3-phase AC study when needed, and a mandatory "requires_human_review" flag for >=132 kV or non-trivial connections.

2. The Industrial Developer / EPC Contractor

  • The Persona: A project developer sizing a hyperscale data centre, BESS, or commercial EV hub.

  • The Daily Reality: Needs to verify connection viability and reinforcement risk before spending millions on formal feasibility studies.

  • The Friction: Submitting 150 MW on a weak 132 kV fringe (SCR < 2.0) or peak-constrained corridor triggers flat rejection without visibility into staged firm capacity, flexible runback, or BESS/SOE mitigations.

  • How this Agent Solves It: Via FastAPI or MCP, developers can rapidly run "what-if" sweeps across connection capacities and immediately inspect verified mitigations (e.g., 5.0 kW / 3.0 kW SOE, snapshot-bounded DOE, or staged firm MW + system-strength remediation).

3. The Autonomous AI Agent (Claude / Cursor / Antigravity)

  • The Persona: An LLM acting as an engineering copilot over MCP.

  • The Friction: LLMs excel at parsing unstructured inquiries and writing clean reports, but they are mathematically blind on unbalanced 3-phase power flow and N-1 contingencies.

  • How this Agent Solves It: Exposes 9 precision-documented MCP tools and 4 off-context @mcp.resource URIs (grid://...). The LLM parses intent, calls run_tier1_screen, run_tier2_ac_study, or server-side sweep_connection_capacities, receives compact JSON physics outputs (with heavy trajectory arrays parked off-context), and synthesizes a standards-cited engineering memo. The AI provides the interface; the physics engine provides the truth.

4. The Regulatory Auditor

  • The Persona: A regulator (AER, Ofgem, BNetzA) or utility executive auditing why a connection was cleared, capped, or escalated.

  • The Friction: Neural black boxes cannot be defended in regulatory disputes.

  • How this Agent Solves It: Every verdict is bounded by a Supervisory Physics Sanity Gate and stamped with a Cryptographic Audit Receipt (SHA-256) logging feeder model hashes, solver convergence (solver_failures == 0), human-review triggers, and explicit regulatory overrides ("regulatory_override": "NER S5.2.5 System Strength violation").

The Core Value Proposition: Defensible Speed

User Friction

Architectural Solution

Connection Engineer fears AI hallucination

"LLM Orchestrates, Physics Solves" (isolated OpenDSS worker)

Developer needs rapid pre-application sizing

Tier-1 (<10 ms) vs Tier-2 (AC study + envelope synthesis) routing

AI Agent cannot solve AC power flow

MCP tools enforce deterministic calculation

Regulatory Auditor cannot verify black boxes

SHA-256 cryptographic audit receipts & explicit NER S5.2.5 override flags


Engineering Safeguards & Scope Boundaries

  • Zero-Mutation Subprocess OpenDSS Isolation, Bounded Concurrency & Hard Timeout: opendssdirect.py uses a C-level process singleton and relative .dss redirects. All 415 V unbalanced 3-phase AC studies execute in an isolated child process (grid_screening_agent.physics._dss_runner) guarded by BoundedSemaphore (GRID_AGENT_MAX_DSS_WORKERS), with cwd scoped strictly to the worker, post-Volt-VAr reactive current (I_q) thermal re-measurement, and a hard subprocess.run(..., timeout=solver_timeout_sec) guard. Any worker timeout or non-convergence routes deterministically to ABSTAIN_DATA_OR_SOLVER_FAULT.

  • Zero-Trust MCP & Subprocess Sandboxing:

    • Typed MCP outputSchema, Tool Annotations & Dynamic Scope (GRID_AGENT_MCP_SCOPE): Every tool on grid-screen-mcp publishes both strict Literal JSON-Schema input enums and explicit Pydantic outputSchema definitions (structuredContent) with openWorldHint=false. Setting GRID_AGENT_MCP_SCOPE=tier1_only or readonly dynamically omits child-process Tier-2 AC and batch sweep tools from untrusted agent registries.

    • Off-Context @mcp.resource Trajectory Parking & Native Capacity Sweeps: Heavy interval voltage arrays are pruned from MCP tool payloads by default (include_trajectory=false) and served on-demand via grid://verdicts/{fingerprint}/trajectory and grid://verdicts/{fingerprint}/plot.svg, while sweep_connection_capacities runs N-point sizing sweeps natively in Python without N sequential LLM round-trips.

    • Credential Scrubbing, Privilege Demotion & Child Socket Denial: Host API keys and remote Bearer tokens (GRID_AGENT_API_TOKEN, enforced via constant-time MCPAuthMiddleware on sse/streamable-http) stay strictly in host memory/headers—stripped from child worker environments (build_sanitized_worker_env), while opendss_worker.py drops privileges (UID 10001 gridagent) and _dss_runner.py late-imports opendssdirect and disables socket.socket at startup (install_network_socket_sandbox).

    • Semantic Wash Air-Lock, Resilient Intake Bounce-Back & Instruction Sandwiching: Free-text inquiries are extracted via GridConnectionIntent (intake.py 3-attempt Pydantic cross-field bounce-back loop with deterministic parse_intent_airgapped fallback) and ConnectionApplication, discarding raw untrusted prose before memo synthesis, wrapping context in 128-bit per-call random nonces, and sandwiching immutable directives at the bottom of the prompt.

  • State-Compression Queue Fingerprint Deduplication (<0.1 ms): Developers and AI agents routinely submit duplicate or repeated sizing queries against the same bus, capacity, inverter mode, and season set. InterconnectionQueueTracker computes a canonical SHA-256 queue_fingerprint over the physical inputs and intercepts backlog duplicates in <0.1 ms without re-spawning child OpenDSS workers, while issuing a fresh timestamped AuditReceipt (cache_hit=true) with an identical reproducibility_sha256.

  • Decoupled Constraint Codes & Dual SHA-256 Reproducibility: Every ScreeningVerdict returns typed binding_constraints (NONE, SYSTEM_STRENGTH_SCR_N1, THERMAL_AMPACITY, STEADY_STATE_VOLTAGE, SOLVER_OR_DATA_FAULT) alongside dual cryptographic digests in AuditReceipt: feeder_model_sha256 (raw .dss topology) and reproducibility_sha256 (canonical sorted digest over normalized inputs, feeder hash, runtime versions, and verified physics verdict—identical across runs on different days). Every module and function includes architectural "Why" docstrings explaining the physical and security rationale in-place.

  • Explicit Tier-2 AC Study Scope (snapshot vs time_series):

    • --study-type snapshot (default) checks selected worst-case seasonal peak states (17 synchronized Ausgrid critical peaks on LV; 8 N-0/N-1 seasonal states on MV/TX).

    • --study-type time_series runs the chronological 48-interval (30-min) diurnal Summer peak-solar trajectory plus seasonal peaks (63–65 LV states; 96 MV/TX contingency intervals).

    • Transparency note: Neither synchronous mode runs a full 17,520- or 35,040-interval full-year telemetry simulation; tier2.study_scope explicitly reports the exact state count evaluated on every call.

  • Snapshot-Bounded DOE vs Predictive WLT: In offline connection screening, DOE_SNAPSHOT_ENVELOPE computes a deterministic static ceiling/floor over the evaluated AC states (telemetry_forecast_active=false). Real-time Warning Lead Time (WLT) dispatch requires live SCADA/AMI telemetry streaming (SSID-Kalman forecasting) and is never falsely claimed from static snapshot screening.

  • 3D Master Vertical Grid Matrix Routing:

    Voltage Tier

    Representative Network / Bus

    Typical R/X or X/R

    Governing Physical Driver

    Primary Binding Constraint

    415 V LV (Suburban Radial)

    CSIRO Network R (3110858)

    Segment R/X ≈ 4.04 (Path 0.97)

    Event Magnitude (r = 0.902) for V; Operating State (r = 0.907) for I

    Steady-State Over-Voltage (>1.10 pu, AS/NZS 61000.3.100)

    415 V LV (Compact Urban)

    CSIRO Network H (08 feeder)

    R_th < 0.08 Ω

    Topologically Voltage-Immune (V ≈ 1.05 pu at 6.0x)

    Conductor / Transformer Thermal Ampacity

    11–20 kV MV

    CIGRE_MV_Rudolstadt, Aus_MV_11kV_Suburban

    R/X ≈ 0.85–1.08

    Background Operating State (r = -0.99)

    State-Dependent Voltage & Thermal Margin

    132 kV Sub-TX (Weak Fringe)

    BrokenHill_132kV (S_sc = 290 MVA)

    X/R ≈ 4.5

    Post-Contingency Fault Level (N-1 SCR)

    Weak-Grid System Strength (SCR_N1 < 2.0, NER S5.2.5)

    330–500 kV Bulk EHV

    SydneyWest_330kV, Bayswater_500kV

    X/R ≈ 12–14

    Regional Corridor Transfer State

    N-1 Thermal Transfer Headroom


Quickstart

1. Install (Python >= 3.10)

# From PyPI (CLI + MCP server + FastAPI service)
pip install grid-screen-mcp

# Or from source for development
uv sync --extra dev

(Or with standard pip: python3 -m venv .venv && ./.venv/bin/pip install -e ".[dev]")

Bundled portable fixtures (~160 KB of CSIRO R & H OpenDSS models + synchronized Ausgrid seasonal/diurnal profiles and NEM substation catalogs) run out-of-the-box with zero external data downloads or API keys.

2. Run CLI Triage

# List all supported LV feeders, MV benchmarks, and NEM 132-500 kV substations
grid-screen networks

# Fast-track LV clear (<10 ms Tier-1 short-circuit, skips OpenDSS, requires_human_review=false)
grid-screen triage --network R --kw 3.0 --scale 3.0

# Stressed LV solar + BESS inquiry with diurnal time-series OpenDSS sweep
grid-screen ask "Can we connect 25 kW solar + 15 kW BESS on Network R at 6.0x scale?" --study-type time_series

# Weak-grid 132 kV hyperscale data centre (triggers regulatory_override="NER S5.2.5 System Strength violation")
grid-screen ask "Screen a 150 MW hyperscale data centre at Broken Hill 132 kV"

3. Run FastAPI Service & Operator Compliance Dashboard

grid-screen-api --host 127.0.0.1 --port 8000
  • Open http://127.0.0.1:8000/dashboard in any browser for the zero-dependency Interconnection Queue & Compliance Dashboard (live backlog KPIs, interactive 10-network submission form, inline SVG voltage trajectory, and SHA-256 regulatory audit ledger).

  • Inspect live queue metrics via GET http://127.0.0.1:8000/v1/queue or OpenAPI docs at http://127.0.0.1:8000/docs.

  • Query via curl:

curl -s http://127.0.0.1:8000/v1/screen/intake \
  -H "Content-Type: application/json" \
  -d '{"inquiry": "Connect 15 kW rooftop solar on Network R bus 3110858 at 6x background solar", "study_type": "snapshot"}' | jq .

4. Connect via MCP (Claude Desktop / Cursor / Antigravity)

Zero-install via uvx from PyPI (package grid-screen-mcp):

{
  "mcpServers": {
    "grid-screening-agent": {
      "command": "uvx",
      "args": ["grid-screen-mcp", "--transport", "stdio"],
      "env": { "GRID_AGENT_MCP_SCOPE": "full" }
    }
  }
}

Or point at a local checkout's virtualenv:

{
  "mcpServers": {
    "grid-screening-agent": {
      "command": "/absolute/path/to/rt-grid-screening-agent/.venv/bin/grid-screen-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

Exposed MCP tools & off-context resources:

  • list_networks — Catalog lookup across LV, MV, and 132–500 kV tiers.

  • search_tools — Deferred keyword discovery across active scope-permitted tools.

  • inspect_connection_point — Exact Z_th, R/X, S_sc, dV/dP, and SHA-256 feeder hash.

  • classify_screening_regime — 3D Master Vertical Grid Matrix routing.

  • run_tier1_screen — Fast <10 ms short-circuit, season-stratified voltage, and Pareto screen (does NOT run full AC power flow).

  • run_tier2_ac_study — Isolated 3-phase OpenDSS (snapshot or time_series) / N-1 AC contingency solver with hard timeout and include_trajectory=false pruning.

  • propose_mitigations — OpenDSS-verified 5 kW/3 kW SOE, snapshot-bounded DOE, or TX remediation.

  • screen_connection_application — Complete progressive-fidelity verdict with requires_human_review, regulatory_override, and AuditReceipt.

  • sweep_connection_capacities — Server-side N-point capacity sweep returning compact decision points + first breach capacity.

  • Resources: grid://catalog/networks, grid://queue/stats, grid://verdicts/{fingerprint}/trajectory, and grid://verdicts/{fingerprint}/plot.svg.


Optional LLM Memo Synthesis

All numerical calculations, regime routing, sanity-gate overrides, requires_human_review flags, and ClearanceDecision outcomes are 100% deterministic. Setting an optional provider key synthesizes the engineering_memo narrative strictly from verified tool outputs (with XML prompt-injection fencing and deterministic decision verification):

  • GEMINI_API_KEY (default model: gemini-2.5-flash)

  • ANTHROPIC_API_KEY (default model: claude-sonnet-4-20250514)

  • OPENAI_API_KEY (default model: gpt-4o-mini; supports local Ollama/vLLM via OPENAI_BASE_URL)

  • Override model name with GRID_AGENT_MODEL. Without keys, --provider auto runs cleanly in zero-key deterministic mode.

  • Air-Gapped Utility Mode (GRID_AGENT_AIRGAPPED=1): Blocks all outbound cloud LLM HTTP calls even when API keys exist in the environment (allowing only local loopback 127.0.0.1 / localhost endpoints or pure deterministic memos).


Docker Deployment (<300 MB Multi-Stage Non-Root Image) & Enterprise Cloud Templates

docker compose up --build

(Or standalone: docker build -t grid-screening-agent . && docker run --rm --read-only --tmpfs /tmp -p 8000:8000 grid-screening-agent)

For utility/TSO teams archiving signed AuditReceipt records at scale, zero-core-impact infrastructure-as-code templates (7-year SEC 17a-4 S3 Object Lock WORM + DynamoDB TTL hot ledger → SQS DLQ → TTL-filtered Snappy S3 Parquet Lambda + Glue schema evolution → 10 GB-capped Athena Workgroup + GitHub Actions OIDC CI/CD + CloudWatch/SNS Cutoff Alarms) are provided under deploy/aws/ and .github/workflows/.

Verification Suite & Contributing

Runs 91 automated regression and infrastructure schema-guard tests (1 pandas-gated test skips in the lean core venv) verifying AC solver convergence, post-droop Volt-VAr thermal loading, constraint decoupling, cross-field validation & LLM bounce-back, child-process socket/secret/late-import sandboxing, MCP scope & Bearer auth enforcement, off-context grid:// resource resolution, semantic-wash nonce fencing, air-gapped privacy, queue fingerprint deduplication, Operator Compliance Dashboard rendering, SVG plotting, Glue/Parquet schema evolution, reproducibility digests, and MCP input/output schemas:

pytest -v

Contributions, additional feeder/substation benchmarks, and MCP client integrations are welcome! Please read CONTRIBUTING.md before opening a pull request to ensure zero numerical drift and invariant preservation.

License

Released under the MIT License.

Available Tools

9 tools
classify_screening_regimeB
Read-onlyIdempotent

Apply the 3D Master Vertical Grid Matrix to determine which physical constraint binds first (Voltage, Thermal, or N-1 SCR).

Classifies Constraint-Decoupled Dominance across 415 V LV, 11-20 kV MV, and 132-500 kV Transmission. Does NOT run AC power flow.

NameRequiredDescriptionDefault
asset_typeNorooftop_pv
network_idYes
connection_nodeNo
proposed_capacity_kwYes

Output Schema

NameRequiredDescription
regime_idYes
voltage_tierYes
impedance_regimeYes
governing_scr_driverYes
power_flow_directionYes
valid_screening_ruleYes
voltage_only_error_riskYes
governing_thermal_driverYes
governing_voltage_driverYes
requires_scr_first_screenYes
primary_binding_constraintYes
requires_state_aware_screenYes
secondary_binding_constraintYes
topologically_voltage_immuneYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: it is a screening classifier, not an AC power-flow simulation, which sets correct expectations about fidelity and cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and compact: the core function plus scope plus one exclusion, with no filler. The trailing fragment is slightly awkward but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, for a non-trivial analytical tool with opaque network IDs and asset types, the description leaves the agent without guidance on parameter meaning or expected fidelity, which is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for 4 parameters (network_id, proposed_capacity_kw, asset_type, connection_node) and says nothing about any of them. The enums are somewhat self-describing, but the description adds no meaning about units, enum semantics, or how parameters interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (classify which physical constraint binds first: Voltage, Thermal, or N-1 SCR) and names the scope across LV/MV/Transmission. The verb+resource is clear enough that an agent can distinguish it from the AC-power-flow siblings, though the framing term '3D Master Vertical Grid Matrix' is unexplained jargon.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Does NOT run AC power flow' clause implicitly routes AC studies to run_tier2_ac_study, but usage is only implied rather than stated. There is no explicit 'use this when...' guidance versus siblings like run_tier1_screen or screen_connection_application.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_connection_pointA
Read-onlyIdempotent

Extract deterministic Thevenin impedance (R_th, X_th, Z_th), R/X ratio, fault level S_sc, dV/dP, and SHA-256 hash.

Call this tool FIRST to inspect electrical stiffness at the Point of Common Coupling (PCC). Does NOT run AC power flow.

NameRequiredDescriptionDefault
network_idYes
connection_nodeNo

Output Schema

NameRequiredDescription
r_th_ohmYes
rx_ratioYes
s_sc_mvaYes
x_th_ohmYes
xr_ratioYes
z_th_ohmYes
network_idYes
nominal_kvYes
descriptionYes
s_sc_n1_mvaYes
model_sha256Yes
voltage_tierYes
connection_nodeYes
dv_dp_pu_per_kwYes
electrical_rankNo
transformer_kvaNo
total_candidate_busesNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds that the computation is deterministic and emits a SHA-256 hash, which is genuine value for reproducibility, but says nothing about cost, failure modes when the node is unknown, or output size. A 3 against strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: the output list first, the usage rule and boundary second. No filler, nothing to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described, and annotations cover safety. However, the omittable connection_node parameter is undocumented in both the schema and the description, which is a real gap for a tool an agent is told to call first.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does not. network_id is self-evident from its enum values, but connection_node (nullable, default null) is never explained — the agent cannot tell whether omitting it inspects a default PCC or fails.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (extract) and a concrete set of outputs (Thevenin impedance, R/X ratio, fault level, dV/dP, hash) tied to a named location (PCC). The explicit 'Does NOT run AC power flow' separates it from run_tier1_screen and run_tier2_ac_study, so an agent can pick it apart from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call this tool FIRST' gives explicit ordering guidance, and the negative clause rules out the AC-power-flow path. It stops short of naming the specific sibling it precedes (run_tier1_screen / run_tier2_ac_study), so the routing is clear but not fully closed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_networksA
Read-onlyIdempotent

List all supported ARENA/CSIRO 415 V LV feeders, 11-20 kV MV benchmarks, and NEM 132-500 kV substations.

Catalog metadata lookup only. Does NOT run short-circuit or AC power-flow calculations.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
lv_feedersYes
mv_benchmarksYes
transmission_substationsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, closed-world, non-destructive behavior, so the safety profile is covered. The description adds genuine scope context beyond that: the result is catalog metadata only, with no computed study results, which prevents the agent from expecting analysis output. It could say more about what fields each catalog entry carries, but the output schema handles that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no waste. The enumeration of supported network classes comes first and the scope-limiting clause follows, so the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, rich annotations, and an output schema covering return values, the description supplies everything needed to decide to call it. The only small gap is that it does not hint at how many entries to expect or whether the list is exhaustive across all supported studies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline for a no-parameter tool is 4, and the description does not wrongly suggest any filtering options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and concrete resource scope: ARENA/CSIRO 415 V LV feeders, 11-20 kV MV benchmarks, and NEM 132-500 kV substations. This is clearly distinguishable from the sibling analysis tools (run_tier1_screen, run_tier2_ac_study, sweep_connection_capacities) because it explicitly frames itself as a catalog, not a computation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The exclusion sentence 'Does NOT run short-circuit or AC power-flow calculations' tells the agent when not to use it and implicitly routes calculation work to the run_*/sweep_* siblings. It stops short of naming the specific alternative to call instead, so it is clear context without an explicit routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_mitigationsC
Read-onlyIdempotent

Synthesize OpenDSS-verified Static Operating Envelopes (5kW/3kW), snapshot-bounded DOEs, or TX system-strength options.

Note: The Dynamic Operating Envelope (DOE_SNAPSHOT_ENVELOPE) is a static envelope derived from deterministic AC snapshot/diurnal bounds (telemetry_forecast_active=false), NOT a live SSID-Kalman predictive Warning Lead Time (WLT) forecast.

NameRequiredDescriptionDefault
asset_typeNorooftop_pv
network_idYes
study_typeNosnapshot
bess_power_kwNo
inverter_modeNoas4777_volt_var_watt
connection_nodeNo
proposed_capacity_kwYes
operating_load_factorNo
feeder_background_scaleNo

Output Schema

NameRequiredDescription
mitigation_optionsYes

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered structurally. The description adds useful domain context that results are OpenDSS-verified and that the DOE is deterministic snapshot-derived rather than live predictive, but does not describe runtime behavior, limits, or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main purpose is front-loaded, but the multi-line note is verbose domain jargon that consumes significant length without adding actionable clarity for selection. Structure is reasonable but the note is not tightly earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters at 0% schema description coverage, a complete description should explain at least the key inputs like proposed_capacity_kw and network_id usage. The presence of an output schema reduces the need to explain return values, but the input-side gap remains unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters; the schema only provides titles and enums. The description supplies essentially no parameter-level meaning—the '(5kW/3kW)' hint is ambiguous and does not explain proposed_capacity_kw, feeder_background_scale, or operating_load_factor. It fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ('Synthesize') and specific resources (Static Operating Envelopes, snapshot-bounded DOEs, TX system-strength options), but the heavy domain jargon makes it hard to map the name 'propose_mitigations' to a concrete action. It also does not distinguish this tool from siblings like sweep_connection_capacities or run_tier2_ac_study, leaving the agent to infer which to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as sweep_connection_capacities or run_tier2_ac_study. The note distinguishes a snapshot DOE from a predictive WLT forecast, but that clarifies terminology rather than when-to-invoke rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_tier1_screenA
Read-onlyIdempotent

Calculates fast short-circuit and voltage screening. Returns a pass/fail. Does NOT run full AC power flow.

Executes sub-10ms analytical screening using season-stratified voltage calibration (1.0752 pu), thermal margin, post-contingency N-1 Short Circuit Ratio (NER S5.2.5 SCR >= 2.0), and Pareto joint hosting capacity. Use fast_clear_eligible and flagged_for_tier2 to decide whether to escalate to run_tier2_ac_study.

NameRequiredDescriptionDefault
asset_typeNorooftop_pv
network_idYes
bess_power_kwNo
inverter_modeNoas4777_volt_var_watt
connection_nodeNo
proposed_capacity_kwYes
operating_load_factorNo
feeder_background_scaleNo

Output Schema

NameRequiredDescription
scr_n1Yes
scr_baseYes
execution_msYes
flag_reasonsNo
flagged_for_tier2Yes
predicted_min_v_puYes
fast_clear_eligibleYes
predicted_peak_v_puYes
voltage_limit_max_puYes
voltage_limit_min_puYes
system_strength_classYes
hard_escalation_reasonNo
pareto_joint_headroom_kwYes
voltage_only_headroom_kwYes
wilson_95ci_violation_pctNo
winter_biased_threshold_puYes
estimated_thermal_loading_pctYes
season_stratified_threshold_puYes
single_constraint_error_penalty_pctYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial operational context beyond them: sub-10ms runtime, season-stratified voltage calibration at 1.0752 pu, thermal margin checks, post-contingency N-1 SCR threshold (NER S5.2.5 SCR >= 2.0), and Pareto joint hosting capacity. It also names the two output flags that drive escalation decisions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly: what it does, what it returns, and what it is not, before the technical detail. The middle paragraph is dense with domain jargon and could be tightened, but nothing is clearly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not document return values, and the safety profile comes from annotations. However, for an 8-parameter tool with zero schema description coverage and multiple enums (network_id, asset_type, inverter_mode), leaving every parameter undocumented makes the definition only minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 8 parameters have 0% schema description coverage, so the description must supply meaning and it supplies none — asset_type, bess_power_kw, inverter_mode, connection_node, operating_load_factor, and feeder_background_scale are never mentioned or explained. The numeric thresholds quoted (1.0752 pu, SCR >= 2.0) are screening criteria, not parameter semantics, so they do not close the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Calculates fast short-circuit and voltage screening'), declares the output type ('Returns a pass/fail'), and explicitly negates the adjacent capability ('Does NOT run full AC power flow'). This cleanly separates it from run_tier2_ac_study without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit escalation rule: use `fast_clear_eligible` and `flagged_for_tier2` to decide whether to escalate to `run_tier2_ac_study`, naming the alternative directly. It stops short of stating preconditions (e.g., that network_id should come from list_networks) or cases where Tier 2 should be run first, so it is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_tier2_ac_studyA
Read-onlyIdempotent

Run isolated child-process unbalanced 3-phase OpenDSS AC power flow (LV) or exact 2-bus N-0/N-1 AC contingency solve (MV/TX).

Study scope: study_type='snapshot' evaluates selected worst-case seasonal peak states (17 LV / 8 MV-TX states); study_type='time_series' evaluates the chronological 30-min diurnal trajectory + seasonal peaks. Does NOT run a synchronous 17,520/35,040-interval full-year telemetry simulation. Enforces a hard subprocess timeout. By default, include_trajectory=False prunes the raw trajectory array to protect LLM context tokens and returns trajectory_resource_uri (grid://verdicts/{fingerprint}/trajectory) for on-demand inspection.

NameRequiredDescriptionDefault
asset_typeNorooftop_pv
network_idYes
study_typeNosnapshot
bess_power_kwNo
export_cap_kwNo
inverter_modeNoas4777_volt_var_watt
connection_nodeNo
include_trajectoryNo
solver_timeout_secNo
proposed_capacity_kwYes
operating_load_factorNo
feeder_background_scaleNo

Output Schema

NameRequiredDescription
executedYes
timed_outNo
study_typeNo
study_scopeNo
execution_msYes
worst_seasonYes
solver_engineYes
min_voltage_puYes
peak_voltage_puYes
solver_failuresYes
voltage_profileNo
worst_timestampYes
intervals_solvedYes
violations_countYes
thermal_compliantYes
as4777_q_saturatedNo
max_line_loading_pctYes
bess_cliff_delta_v_puNo
as4777_curtailment_pctNo
trajectory_resource_uriNoOff-context MCP Resource URI (`grid://verdicts/{fingerprint}/trajectory`) referencing the full time-series/snapshot trajectory when omitted to save LLM tokens.
transformer_loading_pctYes
statutory_voltage_compliantYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly/idempotent/non-destructive), the description discloses genuinely non-obvious behaviour: the solve runs in an isolated child process with a hard subprocess timeout, and by default the raw trajectory array is pruned to protect LLM context tokens with a `trajectory_resource_uri` returned for on-demand retrieval. It also bounds expectations by stating what the tool does not iterate over. This is exactly the operational context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core capability in the first sentence, then layers scope, exclusions and trajectory behaviour in descending order of importance. Every sentence carries information. Slightly dense with parenthetical state counts and backticked identifiers, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description does cover scope, exclusions and the trajectory URI pattern. However, for a 12-parameter simulation tool with zero schema coverage it leaves too much unexplained about how parameter values map to the two solver regimes (e.g. which network_ids are LV vs MV/TX, what connection_node expects, what feeder_background_scale=5 means). Adequate to invoke, risky to invoke correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 12 parameters at 0% schema description coverage, the description carries the full explanatory burden and only partially delivers: it explains study_type's two values and include_trajectory's pruning behaviour. It says nothing about network_id (10 opaque enum codes with no LV vs MV/TX mapping), proposed_capacity_kw, bess_power_kw, export_cap_kw, inverter_mode, connection_node, solver_timeout_sec, operating_load_factor, or feeder_background_scale (default 5). Roughly 10 of 12 parameters remain semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with real technical precision: 'Run isolated child-process unbalanced 3-phase OpenDSS AC power flow (LV) or exact 2-bus N-0/N-1 AC contingency solve (MV/TX)'. An agent knows exactly what computational work happens and that the model differs by voltage regime. It stops short of naming the obvious sibling (run_tier1_screen) or saying how this relates to it, so differentiation is implied only by the 'tier2' naming and the study-depth language.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly distinguishes the two study_type modes ('snapshot' evaluates 17 LV / 8 MV-TX worst-case seasonal peak states vs 'time_series' evaluating the chronological 30-min diurnal trajectory) and adds a clear when-not statement: it does NOT run the full-year 17,520/35,040-interval telemetry simulation. It also gives guidance on the include_trajectory default. What it does not give is any routing against siblings (run_tier1_screen, sweep_connection_capacities) or prerequisites for choosing a network_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screen_connection_applicationC
Idempotent

Execute end-to-end progressive-fidelity triage with Supervisory Sanity Gate, requires_human_review, regulatory_override, and SHA-256 AuditReceipt.

By default, include_trajectory=False omits raw Tier-2 voltage arrays to save LLM context tokens while preserving the exact reproducibility_sha256 digest and exposing grid://verdicts/{queue_fingerprint}/trajectory & plot.svg.

NameRequiredDescriptionDefault
asset_typeNorooftop_pv
network_idNoR
study_typeNosnapshot
force_tier2No
bess_power_kwNo
inverter_modeNoas4777_volt_var_watt
connection_nodeNo
include_trajectoryNo
solver_timeout_secNo
proposed_capacity_kwNo
operating_load_factorNo
feeder_background_scaleNo

Output Schema

NameRequiredDescription
tier1Yes
tier2No
regimeYes
decisionYes
headlineYes
applicationYes
mitigationsNo
sanity_gateYes
audit_receiptYes
connection_pointYes
engineering_memoYes
binding_constraintsNoExplicit decoupled physical/solver constraint codes explaining which limit bound.
regulatory_overrideNoExplicit regulatory override flag (e.g., 'NER S5.2.5 System Strength violation'), when applicable.
human_review_reasonsNoExplicit engineering or regulatory reasons requiring human-in-the-loop sign-off.
requires_human_reviewYesTrue when human engineering review is mandatory (e.g., >=132 kV tier, >=5 MW capacity, borderline SCR, conditional envelope, regulatory override, or solver fault).

TDQS

C2.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotent, non-destructive), the description discloses genuinely useful behavior: a supervisory sanity gate, a possible requires_human_review outcome, a regulatory_override path, and a SHA-256 AuditReceipt. It also explains the token-saving default and points to the trajectory resource and plot.svg when raw arrays are omitted. It still does not say anything about runtime cost, solver failure behavior, or what the verdict tiers mean.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with the operation and then the default-output behavior, with no filler sentences. Density of unexplained jargon costs some readability, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover the safety profile. But for a 12-parameter, zero-coverage, end-to-end orchestration tool, the description leaves the majority of inputs and the tier/human-review decision logic unexplained, so an agent cannot confidently call it with meaningful arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 12 parameters, so the description must compensate and it does not — only include_trajectory is explained. Key domain parameters (force_tier2, asset_type, network_id, inverter_mode, operating_load_factor, feeder_background_scale, solver_timeout_sec) are left entirely to bare enum values and defaults, with no explanation of what force_tier2 or the fidelity tiers actually mean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb is "execute" and the object is "end-to-end progressive-fidelity triage" of a connection application, so the general domain is inferable, but the phrasing is a noun pile of internal jargon ("progressive-fidelity triage", "Supervisory Sanity Gate") rather than a plain statement of what is computed. It never explicitly says it orchestrates Tier-1 + Tier-2 screening, which is what would distinguish it from siblings run_tier1_screen and run_tier2_ac_study.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus run_tier1_screen, run_tier2_ac_study, classify_screening_regime, or sweep_connection_capacities — all of which overlap heavily in intent. The only usage-like guidance is about the include_trajectory default, which is a parameter preference, not tool selection. An agent must guess that "end-to-end" means this is the umbrella call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_toolsB
Read-onlyIdempotent

Search available MCP screening tools by keyword, returning cost tier and scope metadata.

NameRequiredDescriptionDefault
queryNo

Output Schema

NameRequiredDescription
active_scopeYes
matched_toolsYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that results carry cost tier and scope metadata, which is real context, but it omits important behavior: what an empty query returns (the only parameter defaults to ""), how many results come back, and whether matching is prefix, substring, or fuzzy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and resource, with the return payload appended rather than buried. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is not needed, and annotations cover safety. What's missing is the operational context an agent needs: what "scope metadata" means for tool coverage, and the behavior of an empty query given the unlabeled default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter has no description, so the description carries the burden. It clarifies that matching is "by keyword" rather than exact or regex, but says nothing about the empty-string default — presumably listing everything — which is the most consequential semantic for this one parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ("search available MCP screening tools") and names the matching dimension (keyword) plus the payload returned. It is clear what the tool does, though it never makes explicit that this is the catalog/meta-tool as opposed to the domain tools (run_tier1_screen, classify_screening_regime) that appear as siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance: nothing says to call this before invoking a screening tool, whether discovery is required or optional, or how it relates to the sibling domain tools. An agent must infer that this is the entry point for finding tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sweep_connection_capacitiesB
Idempotent

Execute a server-side N-point hosting-capacity sweep to locate the exact constraint inflection point.

Shields the LLM context window from N sequential tool round-trips by evaluating candidate capacities natively in Python (1 <= steps <= 20) and returning a compact inflection table.

NameRequiredDescriptionDefault
stepsNo
end_kwYes
start_kwYes
asset_typeNorooftop_pv
network_idYes
bess_power_kwNo
inverter_modeNoas4777_volt_var_watt
connection_nodeNo
halt_on_violationNo
operating_load_factorNo
feeder_background_scaleNo

Output Schema

NameRequiredDescription
asset_typeYes
network_idYes
halted_earlyNo
sweep_resultsYes
connection_nodeYes
steps_evaluatedYes
max_compliant_kwYes
inflection_capacity_kwNo
first_binding_constraintNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=false, idempotent=true, openWorld=false, so the safety profile is covered. The description adds genuinely useful behavior: evaluation happens natively server-side in Python with the bound `1 <= steps <= 20`, and it returns a compact inflection table. However it omits cost/latency (each step appears to be a power-flow study) and how `halt_on_violation` changes the run, leaving meaningful behavioral gaps for a heavy operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and then the rationale for server-side execution. No filler, though the line break mid-sentence and the backtick bound make it slightly less tight than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, but for an 11-parameter, computationally heavy sweep tool with 0% schema coverage, the definition is thin. It gives no guidance on how the sweep relates to tier1/tier2 screening, no sense of runtime cost, and no clarification of the many numeric/enum knobs an agent must set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 11 parameters, so the description must compensate and largely doesn't: it only clarifies `steps` (the 1-20 bound). The sweep range (start_kw/end_kw), asset_type, network_id, bess_power_kw, inverter_mode, halt_on_violation, operating_load_factor and feeder_background_scale are left entirely to bare titles and enums.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Execute a server-side N-point hosting-capacity sweep' with the goal of locating 'the exact constraint inflection point'. That is clearly distinct from list_networks or inspect_connection_point, but the description never contrasts itself with run_tier1_screen or run_tier2_ac_study, which are the real alternatives for capacity studies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Shields the LLM context window from N sequential tool round-trips' implies the usage pattern (prefer this over looping a single-capacity call N times), but the competing tools are never named and there is no when-not guidance, e.g. when a full tier2 AC study is still required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedclassify_screening_regime
    • First observedinspect_connection_point
    • First observedlist_networks
    • First observedpropose_mitigations
    • First observedrun_tier1_screen
    • First observedrun_tier2_ac_study
    • First observedscreen_connection_application
    • First observedsearch_tools
    • First observedsweep_connection_capacities

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have clearly distinct roles: catalog lookup, connection-point inspection, regime classification, Tier-1 screening, Tier-2 AC study, mitigation proposal, end-to-end triage, and capacity sweep. There is some overlap between `screen_connection_application` and manually chaining `run_tier1_screen` / `run_tier2_ac_study`, and `search_tools` is a meta-tool that stands apart from the domain workflow, but descriptions make the progressive-fidelity boundaries understandable.

Naming Consistency5/5

All tools use snake_case with a clear verb-first pattern such as `list_networks`, `inspect_connection_point`, `classify_screening_regime`, `run_tier1_screen`, and `propose_mitigations`. Tier and domain qualifiers are used consistently enough that the naming remains predictable.

Tool Count5/5

Nine tools are well scoped for a grid-screening server, with each covering a distinct stage from catalog discovery through screening, detailed study, mitigation, end-to-end triage, and capacity sweep. The set is neither thin nor bloated.

Completeness4/5

The surface covers the core lifecycle: network catalog, PCC inspection, regime classification, fast and detailed screening, mitigation synthesis, end-to-end application screening, and hosting-capacity sweep. Minor gaps remain around explicit artifact/result retrieval or standalone audit/export operations, though the end-to-end tool returns audit receipts and resource URIs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables conversational power system analysis by connecting Claude AI with EPRI's OpenDSS simulator. Allows distribution planning engineers to perform sophisticated electrical grid studies through natural language instead of complex scripting.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Connects AI agents to energy infrastructure with 30+ tools for managing sites, assets, dispatch, settlements, compliance, and carbon tracking.
    34
    31 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides deterministic, standards-based calculations for data center critical power infrastructure. Enables site selection, generator sizing, UPS sizing, NFPA 110 compliance, and more via 50+ AI agents and 8 compound chains.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables multi-agent orchestration of distributed energy resources through MCP tools, including simulation, real-time telemetry, dispatch control, and deterministic safety gatekeeping for grid support and demand response.
    -