grid-screen-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@grid-screen-mcpscreen a 10 MW BESS at the 132 kV substation for N-1 and SCR compliance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Grid Connection Screening Agent (rt-grid-screening-agent)
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:
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.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).CLI Agent (
grid-screen) — Instant terminal triage (grid-screen triageandgrid-screen askwith--study-type snapshot | time_seriesand--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 --> OutRelated 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 msfast-pass for obvious cases, an isolated 3-phase AC study when needed, and a mandatory"requires_human_review"flag for>=132 kVor 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 kWSOE, 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-1contingencies.How this Agent Solves It: Exposes 9 precision-documented MCP tools and 4 off-context
@mcp.resourceURIs (grid://...). The LLM parses intent, callsrun_tier1_screen,run_tier2_ac_study, or server-sidesweep_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 ( |
AI Agent cannot solve AC power flow | MCP tools enforce deterministic calculation |
Regulatory Auditor cannot verify black boxes |
|
Engineering Safeguards & Scope Boundaries
Zero-Mutation Subprocess OpenDSS Isolation, Bounded Concurrency & Hard Timeout:
opendssdirect.pyuses a C-level process singleton and relative.dssredirects. All 415 V unbalanced 3-phase AC studies execute in an isolated child process (grid_screening_agent.physics._dss_runner) guarded byBoundedSemaphore(GRID_AGENT_MAX_DSS_WORKERS), withcwdscoped strictly to the worker, post-Volt-VAr reactive current (I_q) thermal re-measurement, and a hardsubprocess.run(..., timeout=solver_timeout_sec)guard. Any worker timeout or non-convergence routes deterministically toABSTAIN_DATA_OR_SOLVER_FAULT.Zero-Trust MCP & Subprocess Sandboxing:
Typed MCP
outputSchema, Tool Annotations & Dynamic Scope (GRID_AGENT_MCP_SCOPE): Every tool ongrid-screen-mcppublishes both strictLiteralJSON-Schema inputenums and explicit PydanticoutputSchemadefinitions (structuredContent) withopenWorldHint=false. SettingGRID_AGENT_MCP_SCOPE=tier1_onlyorreadonlydynamically omits child-process Tier-2 AC and batch sweep tools from untrusted agent registries.Off-Context
@mcp.resourceTrajectory Parking & Native Capacity Sweeps: Heavy interval voltage arrays are pruned from MCP tool payloads by default (include_trajectory=false) and served on-demand viagrid://verdicts/{fingerprint}/trajectoryandgrid://verdicts/{fingerprint}/plot.svg, whilesweep_connection_capacitiesruns 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-timeMCPAuthMiddlewareonsse/streamable-http) stay strictly in host memory/headers—stripped from child worker environments (build_sanitized_worker_env), whileopendss_worker.pydrops privileges (UID 10001gridagent) and_dss_runner.pylate-importsopendssdirectand disablessocket.socketat startup (install_network_socket_sandbox).Semantic Wash Air-Lock, Resilient Intake Bounce-Back & Instruction Sandwiching: Free-text inquiries are extracted via
GridConnectionIntent(intake.py3-attempt Pydantic cross-field bounce-back loop with deterministicparse_intent_airgappedfallback) andConnectionApplication, 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.InterconnectionQueueTrackercomputes a canonicalSHA-256queue_fingerprintover the physical inputs and intercepts backlog duplicates in<0.1 mswithout re-spawning child OpenDSS workers, while issuing a fresh timestampedAuditReceipt(cache_hit=true) with an identicalreproducibility_sha256.Decoupled Constraint Codes & Dual SHA-256 Reproducibility: Every
ScreeningVerdictreturns typedbinding_constraints(NONE,SYSTEM_STRENGTH_SCR_N1,THERMAL_AMPACITY,STEADY_STATE_VOLTAGE,SOLVER_OR_DATA_FAULT) alongside dual cryptographic digests inAuditReceipt:feeder_model_sha256(raw.dsstopology) andreproducibility_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 (
snapshotvstime_series):--study-type snapshot(default) checks selected worst-case seasonal peak states (17synchronized Ausgrid critical peaks on LV;8N-0/N-1seasonal states on MV/TX).--study-type time_seriesruns the chronological 48-interval (30-min) diurnal Summer peak-solar trajectory plus seasonal peaks (63–65LV states;96MV/TX contingency intervals).Transparency note: Neither synchronous mode runs a full 17,520- or 35,040-interval full-year telemetry simulation;
tier2.study_scopeexplicitly reports the exact state count evaluated on every call.
Snapshot-Bounded DOE vs Predictive WLT: In offline connection screening,
DOE_SNAPSHOT_ENVELOPEcomputes 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/XorX/RGoverning Physical Driver
Primary Binding Constraint
415 V LV (Suburban Radial)
CSIRO Network
R(3110858)Segment
R/X ≈ 4.04(Path0.97)Event Magnitude (
r = 0.902) forV; Operating State (r = 0.907) forISteady-State Over-Voltage (
>1.10 pu, AS/NZS 61000.3.100)415 V LV (Compact Urban)
CSIRO Network
H(08feeder)R_th < 0.08 ΩTopologically Voltage-Immune (
V ≈ 1.05 puat6.0x)Conductor / Transformer Thermal Ampacity
11–20 kV MV
CIGRE_MV_Rudolstadt,Aus_MV_11kV_SuburbanR/X ≈ 0.85–1.08Background 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.5Post-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_500kVX/R ≈ 12–14Regional Corridor Transfer State
N-1Thermal 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 8000Open
http://127.0.0.1:8000/dashboardin 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/queueor OpenAPI docs athttp://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— ExactZ_th,R/X,S_sc,dV/dP, andSHA-256feeder hash.classify_screening_regime— 3D Master Vertical Grid Matrix routing.run_tier1_screen— Fast<10 msshort-circuit, season-stratified voltage, and Pareto screen (does NOT run full AC power flow).run_tier2_ac_study— Isolated 3-phase OpenDSS (snapshotortime_series) /N-1AC contingency solver with hard timeout andinclude_trajectory=falsepruning.propose_mitigations— OpenDSS-verified5 kW/3 kWSOE, snapshot-bounded DOE, or TX remediation.screen_connection_application— Complete progressive-fidelity verdict withrequires_human_review,regulatory_override, andAuditReceipt.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, andgrid://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 viaOPENAI_BASE_URL)Override model name with
GRID_AGENT_MODEL. Without keys,--provider autoruns cleanly in zero-keydeterministicmode.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 loopback127.0.0.1/localhostendpoints 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 -vContributions, 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 toolsclassify_screening_regimeBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | rooftop_pv | |
| network_id | Yes | ||
| connection_node | No | ||
| proposed_capacity_kw | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| regime_id | Yes | |
| voltage_tier | Yes | |
| impedance_regime | Yes | |
| governing_scr_driver | Yes | |
| power_flow_direction | Yes | |
| valid_screening_rule | Yes | |
| voltage_only_error_risk | Yes | |
| governing_thermal_driver | Yes | |
| governing_voltage_driver | Yes | |
| requires_scr_first_screen | Yes | |
| primary_binding_constraint | Yes | |
| requires_state_aware_screen | Yes | |
| secondary_binding_constraint | Yes | |
| topologically_voltage_immune | Yes |
TDQS
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.
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.
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.
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.
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.
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_pointARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| network_id | Yes | ||
| connection_node | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| r_th_ohm | Yes | |
| rx_ratio | Yes | |
| s_sc_mva | Yes | |
| x_th_ohm | Yes | |
| xr_ratio | Yes | |
| z_th_ohm | Yes | |
| network_id | Yes | |
| nominal_kv | Yes | |
| description | Yes | |
| s_sc_n1_mva | Yes | |
| model_sha256 | Yes | |
| voltage_tier | Yes | |
| connection_node | Yes | |
| dv_dp_pu_per_kw | Yes | |
| electrical_rank | No | |
| transformer_kva | No | |
| total_candidate_buses | No |
TDQS
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.
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.
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.
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.
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.
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_networksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| lv_feeders | Yes | |
| mv_benchmarks | Yes | |
| transmission_substations | Yes |
TDQS
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.
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.
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.
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.
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.
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_mitigationsCRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | rooftop_pv | |
| network_id | Yes | ||
| study_type | No | snapshot | |
| bess_power_kw | No | ||
| inverter_mode | No | as4777_volt_var_watt | |
| connection_node | No | ||
| proposed_capacity_kw | Yes | ||
| operating_load_factor | No | ||
| feeder_background_scale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mitigation_options | Yes |
TDQS
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.
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.
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.
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.
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.
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_screenARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | rooftop_pv | |
| network_id | Yes | ||
| bess_power_kw | No | ||
| inverter_mode | No | as4777_volt_var_watt | |
| connection_node | No | ||
| proposed_capacity_kw | Yes | ||
| operating_load_factor | No | ||
| feeder_background_scale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| scr_n1 | Yes | |
| scr_base | Yes | |
| execution_ms | Yes | |
| flag_reasons | No | |
| flagged_for_tier2 | Yes | |
| predicted_min_v_pu | Yes | |
| fast_clear_eligible | Yes | |
| predicted_peak_v_pu | Yes | |
| voltage_limit_max_pu | Yes | |
| voltage_limit_min_pu | Yes | |
| system_strength_class | Yes | |
| hard_escalation_reason | No | |
| pareto_joint_headroom_kw | Yes | |
| voltage_only_headroom_kw | Yes | |
| wilson_95ci_violation_pct | No | |
| winter_biased_threshold_pu | Yes | |
| estimated_thermal_loading_pct | Yes | |
| season_stratified_threshold_pu | Yes | |
| single_constraint_error_penalty_pct | Yes |
TDQS
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.
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.
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.
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.
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.
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_studyARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | rooftop_pv | |
| network_id | Yes | ||
| study_type | No | snapshot | |
| bess_power_kw | No | ||
| export_cap_kw | No | ||
| inverter_mode | No | as4777_volt_var_watt | |
| connection_node | No | ||
| include_trajectory | No | ||
| solver_timeout_sec | No | ||
| proposed_capacity_kw | Yes | ||
| operating_load_factor | No | ||
| feeder_background_scale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| executed | Yes | |
| timed_out | No | |
| study_type | No | |
| study_scope | No | |
| execution_ms | Yes | |
| worst_season | Yes | |
| solver_engine | Yes | |
| min_voltage_pu | Yes | |
| peak_voltage_pu | Yes | |
| solver_failures | Yes | |
| voltage_profile | No | |
| worst_timestamp | Yes | |
| intervals_solved | Yes | |
| violations_count | Yes | |
| thermal_compliant | Yes | |
| as4777_q_saturated | No | |
| max_line_loading_pct | Yes | |
| bess_cliff_delta_v_pu | No | |
| as4777_curtailment_pct | No | |
| trajectory_resource_uri | No | Off-context MCP Resource URI (`grid://verdicts/{fingerprint}/trajectory`) referencing the full time-series/snapshot trajectory when omitted to save LLM tokens. |
| transformer_loading_pct | Yes | |
| statutory_voltage_compliant | Yes |
TDQS
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.
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.
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.
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.
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.
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_applicationCIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | rooftop_pv | |
| network_id | No | R | |
| study_type | No | snapshot | |
| force_tier2 | No | ||
| bess_power_kw | No | ||
| inverter_mode | No | as4777_volt_var_watt | |
| connection_node | No | ||
| include_trajectory | No | ||
| solver_timeout_sec | No | ||
| proposed_capacity_kw | No | ||
| operating_load_factor | No | ||
| feeder_background_scale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tier1 | Yes | |
| tier2 | No | |
| regime | Yes | |
| decision | Yes | |
| headline | Yes | |
| application | Yes | |
| mitigations | No | |
| sanity_gate | Yes | |
| audit_receipt | Yes | |
| connection_point | Yes | |
| engineering_memo | Yes | |
| binding_constraints | No | Explicit decoupled physical/solver constraint codes explaining which limit bound. |
| regulatory_override | No | Explicit regulatory override flag (e.g., 'NER S5.2.5 System Strength violation'), when applicable. |
| human_review_reasons | No | Explicit engineering or regulatory reasons requiring human-in-the-loop sign-off. |
| requires_human_review | Yes | True when human engineering review is mandatory (e.g., >=132 kV tier, >=5 MW capacity, borderline SCR, conditional envelope, regulatory override, or solver fault). |
TDQS
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.
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.
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.
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.
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.
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_toolsBRead-onlyIdempotent
Search available MCP screening tools by keyword, returning cost tier and scope metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| active_scope | Yes | |
| matched_tools | Yes |
TDQS
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.
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.
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.
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.
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.
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_capacitiesBIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | ||
| end_kw | Yes | ||
| start_kw | Yes | ||
| asset_type | No | rooftop_pv | |
| network_id | Yes | ||
| bess_power_kw | No | ||
| inverter_mode | No | as4777_volt_var_watt | |
| connection_node | No | ||
| halt_on_violation | No | ||
| operating_load_factor | No | ||
| feeder_background_scale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| asset_type | Yes | |
| network_id | Yes | |
| halted_early | No | |
| sweep_results | Yes | |
| connection_node | Yes | |
| steps_evaluated | Yes | |
| max_compliant_kw | Yes | |
| inflection_capacity_kw | No | |
| first_binding_constraint | No |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
classify_screening_regime - First observed
inspect_connection_point - First observed
list_networks - First observed
propose_mitigations - First observed
run_tier1_screen - First observed
run_tier2_ac_study - First observed
screen_connection_application - First observed
search_tools - First observed
sweep_connection_capacities
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Solar, weatherization, EV charging, battery and heat-pump decision tools for AI agents.
Live US power market prices, load, generation, weather and permits for AI agents.
EU power dispatch for wallet-enabled compute, DePIN, battery and trading agents.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables 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
- AlicenseBqualityDmaintenanceConnects AI agents to energy infrastructure with 30+ tools for managing sites, assets, dispatch, settlements, compliance, and carbon tracking.3431 npm1MIT

security-orchestraofficial
FlicenseNot gradedqualityCmaintenanceProvides 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.-- FlicenseNot gradedqualityCmaintenanceEnables 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.-