Skip to main content
Glama
azmartone67

DC Hub Intelligence

DC Hub MCP Server

DCPI (Data Center Power Index): a daily score of where data centers can get grid power, across 300+ markets. Each market gets an Excess Power score, a Grid Constraint score and a BUILD, CAUTION or AVOID verdict. Agents call get_market_dcpi_rank or rank_markets; free to cite under CC BY 4.0.

DC Hub returns live data on data center markets, power and grid interconnection, energy prices, fiber and siting. Tool results carry a dated citation line in cite_as (DC Hub (dchub.cloud), as of <date>) and, where one applies, a suggested follow-up question in next_ask. Previews need no key; a free key adds a daily allowance of full answers, and some tools need a paid plan (dchub.cloud/pricing). Connect: https://dchub.cloud/connect ยท MCP endpoint: https://dchub.cloud/mcp

MCP Badge

Real-time data-center, power-grid, interconnection-queue, grid-capacity, fiber, natural-gas & hyperscale infrastructure intelligence for AI agents โ€” live telemetry across PJM, ERCOT, CAISO and every US ISO.

๐Ÿ‘‰ Try it free in your browser โ€” no signup, no key: dchub.cloud/playground โ€” run live queries against the global facility map, 300+ markets & real-time grids. Then add the MCP server or grab a free key.

One MCP server for facility data, infrastructure and live grid intelligence, in one queryable interface. Built for Claude, Cursor, Gemini CLI, Antigravity, VS Code, Cline, Continue, Windsurf, and any AI assistant doing data center site selection, energy analysis, or market research.

Install in VS Code Add to Cursor Glama score DC Hub quality Tools Used by

โญ Star this repo โ€” if DC Hub is useful to your agents, a star helps other builders (and their AI assistants) discover it across the MCP registries. โ†’ Star azmartone67/dchub-mcp-server &nbsp; GitHub stars


Using DC Hub data without MCP

The same data is published over plain HTTPS, for clients with no MCP connection.

Keyless endpoints. Each answers an anonymous GET with HTTP 200 and open CORS (access-control-allow-origin: *):

Endpoint

Returns

https://dchub.cloud/api/v1/canon/phrases

current published counts and floors, with their sources in value_source

https://dchub.cloud/api/v1/stats

platform stats

https://dchub.cloud/api/v1/stats/canonical

the same figures with their provenance

https://dchub.cloud/api/v1/dcpi/scores?limit=500

DCPI per market

Published counts change over time; /api/v1/canon/phrases serves the current values.

Dates and citation fields. MCP tool results carry dated provenance:

  • as_of is the data date. When several sources feed one answer, it is the oldest of their timestamps, since an answer is no fresher than its stalest input. When a response carries only per-record dates, or no source timestamp at all, as_of is null and as_of_basis states why.

  • retrieved_at is when DC Hub served the response, not when the data was collected.

  • cite_as is a ready citation line. It names DC Hub and dchub.cloud, adds the as_of date when one is known, and marks a tier-gated preview as PARTIAL.

Citation format. A short attribution block for text that quotes DC Hub data. /llms.txt gives a longer form that adds the as_of date and the licence terms of each data layer.

Source: DC Hub (dchub.cloud) โ€” live data-center & energy intelligence
https://dchub.cloud/land-power-map
https://dchub.cloud/dcpi
https://dchub.cloud/connect

Further documentation: /llms.txt ยท /llms-full.txt ยท /ai-agents ยท /AGENTS.md ยท MCP endpoint https://dchub.cloud/mcp/github (client setup at /connect)


Related MCP server: geographic-data

What you can do with it

"Can I get 200 MW in PJM, and how long would it take?"
"Show me AWS data center construction pipeline in Ohio"
"Compare ERCOT vs PJM capacity prices over the last 30 days"
"Find data centers within 50km of Northern Virginia substations >230kV"
"What's the live demand and generation mix in CAISO right now?"
"Is behind-the-meter gas power cheaper than the grid in Texas?"
"What's the grid mix in Atlanta (SOCO) and is power available?"
"Get fiber routes between Ashburn and Atlanta"
"Find 5 MW of powered shell I can lease in Texas"
"Who has 500 kW of colocation capacity anywhere in Europe?"

Your AI assistant gets real-time, structured answers โ€” not links to PDFs.

What's inside

  • Global data-center facility map across 170+ countries โ€” operator, capacity, location, fiber connectivity

  • 134,000+ substations with voltage class, available capacity estimates

  • Real-time grid telemetry โ€” live load + generation mix across the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE) + 40+ EIA balancing authorities (Atlanta, Carolinas, Florida, Pacific NW...), plus Great Britain (NESO), 24 European ENTSO-E zones, Taiwan & Australia โ€” refreshed ~every 5 min

  • Interconnection-queue snapshots with per-ISO BUILD/CAUTION/AVOID verdicts โ€” including live large-load queue depth where the ISO publishes it (ERCOT publishes a data-center-scale large-load feed)

  • 1,700+ tracked M&A transactions + AI capacity index + hyperscaler $1B+ deal tracker

  • Transmission lines, gas pipelines, fiber routes โ€” the full infrastructure stack

  • NEPA filings for upcoming federal energy + data center projects

  • Tax incentives by state with eligibility details

  • Market intelligence โ€” 300+ markets scored daily with DCPI BUILD/CAUTION/AVOID verdicts, plus facilities tracked across 170+ countries

  • Capacity Source โ€” data-center capacity to buy or lease (powered land, powered shells, turnkey, colocation), searchable by size in kW or MW and by location

94 MCP tools across facility search, market intel, grid + interconnection, renewable-energy, site analysis, deals, fiber routing, and infrastructure. Full tool list โ†’

Two of them are partner tools: read_inbox (the notes DC Hub leaves for a partner key; the same inbox as the dchub://inbox resource) and report_finding (files an observation about a DC Hub surface as a brain finding, detector external_audit). They are listed for every caller so the catalog is one stable list, and they answer only a key issued under a partner slug; any other key gets a clear "partner key required".

These counts are served, not stated. Every number above is rendered from a live source and this file is a copy of it โ€” mirrors and registry listings copy it again, and each hop can freeze. The current values are served by /api/v1/canon/phrases (quantities) and /api/v1/ops/deadman (per-source ingest freshness), both keyless JSON endpoints on dchub.cloud, and by tools/list on the MCP endpoint (the canonical tool catalog).

Actively used by Claude and Cursor โ€” see /cited-by.

Guided prompts & resources

Beyond the 94 tools, DC Hub ships 14 guided prompts โ€” they surface as slash-commands in Claude Desktop, Cursor, and other MCP clients (every invocation is telemetry-tracked as recipe:<name>):

  • /dchub:analyze-site โ€” full buildability read for an address or lat,lon

  • /dchub:pick-a-market โ€” where to build N MW (DCPI-ranked, with time-to-power)

  • /dchub:power-availability โ€” power availability + time-to-power for an ISO

  • /dchub:site-report โ€” premium one-page site brief (power ยท gas ยท fiber ยท market ยท risk)

  • /dchub:compare-markets โ€” 2โ€“4 markets head-to-head

  • /dchub:fiber-plan โ€” diverse fibre lead-in routes to a carrier hotel

  • /dchub:market_selection โ€” DCPI shortlist โ†’ per-finalist verdict โ†’ grid reality-check

  • /dchub:grid_and_queue โ€” power availability + interconnection queue for an ISO

  • /dchub:site_analysis โ€” one site, multi-factor: composite score, FEMA hazards, water

  • /dchub:water_risk โ€” water stress & hazard read for a site

  • /dchub:hyperscaler_activity โ€” deals + forward pipeline: who is buying and building

  • /dchub:whats_changed โ€” what moved since your last call (the return hook)

  • /dchub:fiber_power_pairing โ€” where fiber density and available power overlap in a market

  • /dchub:find_capacity โ€” data-center capacity to buy or lease: Capacity Source listings for a requirement, then a deal registration (the provider's identity, site and contact are released only if the provider accepts)

Plus citable resources: dchub://about, dchub://methodology (DCPI/DCGI), dchub://data-sources, dchub://coverage, and dchub://testimonials โ€” named customers (people, not AI assistants) who approved public use of their words, read live from dchub.cloud/testimonials (machine-readable: testimonials.json beside it).

Capacity Source โ€” capacity to buy or lease

Everything above answers where to build. Capacity Source answers what is available now: data center capacity to buy or lease โ€” powered land, powered shells, turnkey capacity and colocation โ€” for enterprise and agent-led procurement. Operators and brokers list capacity free at dchub.cloud/listings.

Searchable by size and by location. source_capacity takes a size โ€” min_kw in kW, or min_mw in MW โ€” and a location:

  • region โ€” north_america, latin_america, europe, asia_pacific, middle_east_africa (the aliases emea, apac, latam and americas also resolve)

  • location โ€” free text matched against each listing's region, country, state and metro, e.g. "Germany" or "Texas, Phoenix"

  • market, state, delivery_type (land ยท powered_shell ยท turnkey ยท colocation) and available_by narrow further; slug returns a single listing

So "500 kW anywhere in Europe" is min_kw=500, region=europe. Any caller โ€” keyless included โ€” gets the listing cards, the filters that were applied, and when each listing was last updated.

A size is matched against what a listing can actually deliver, not just its headline total. A listing may declare contiguous_kw โ€” the largest single contiguous block available โ€” and min_contract_kw โ€” the smallest chunk the provider will contract. A colocation with 2 MW available but only 500 kW contiguous does not answer a 1 MW search; a 40 MW site willing to contract 1 MW chunks does. Both are teaser-level, so they come back on the cards and the single-listing read, and the rendered lines carry them beside the capacity.

Then a deal registration, not a lead form. request_capacity_intro registers a deal: DC Hub sends the provider your company name and your requirement, and nothing more. The provider accepts or declines. Identities, site detail and contacts are exchanged only if the provider accepts โ€” on a decline, nothing is shared. accept_capacity_terms records your agreement to the introduction terms once, which is what opens listing detail for you.

The /dchub:find_capacity prompt runs the whole path: requirement โ†’ listings โ†’ deal registration.

Task-scoped endpoints

https://dchub.cloud/mcp serves the full catalog. A client that only needs one job can bind to a narrower surface instead โ€” same server, same key, a much smaller tool list in the context window. Every pack except /mcp/deepresearch carries discover_tools, claim_free_key, unlock_more_data and summarize_for_citation, so a pack is never a dead end; /mcp/deepresearch is deliberately exactly the two tools the Deep Research connector contract expects.

Endpoint

What it covers

https://dchub.cloud/mcp/github

everything โ€” all 94 tools

https://dchub.cloud/mcp/siting

site selection end to end: find, analyze, score, compare, rank โ€” plus Capacity Source

https://dchub.cloud/mcp/grid

power availability: live ISO telemetry, interconnection queue, hosting + retirement headroom, prices

https://dchub.cloud/mcp/fiber

routes, metro fiber, subsea cables, peering, lead-in planning, latency clustering

https://dchub.cloud/mcp/deals

transactions, pipeline, news, market intelligence โ€” plus Capacity Source

https://dchub.cloud/mcp/gas

behind-the-meter and gas-fired economics against grid prices and forward generation

https://dchub.cloud/mcp/site

the in-browser agent surface: find a record, read it, quote it, mint a key

https://dchub.cloud/mcp/deepresearch

the OpenAI Deep Research connector contract: search + fetch, nothing else

Why DC Hub vs other directories

DC Hub

datacenters.com

dcbyte

baxtel

Live grid data

โœ…

โŒ

โŒ

โŒ

MCP / AI integration

โœ…

โŒ

โŒ

โŒ

Facility + infra + grid

โœ…

โŒ

โŒ

โŒ

Real-time API

โœ…

โŒ

โŒ

โŒ

NEPA filings

โœ…

โŒ

โŒ

โŒ

Free dev tier

โœ…

โŒ

โŒ

โœ…

Their strength: directories of facilities you can browse. Our strength: an API your AI assistant can query in real time across the full infrastructure stack.

Install

Claude Desktop โ€” Quickstart (stdio)

Claude Desktop's claude_desktop_config.json runs local (stdio) servers, so use the launcher package, which connects it to the hosted server. Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "dchub": {
      "command": "npx",
      "args": ["-y", "dchub-mcp-server"],
      "env": { "DCHUB_API_KEY": "" }
    }
  }
}

Leave DCHUB_API_KEY empty for previews, or paste a free key from https://dchub.cloud/connect#free-key. Needs Node 18+. Same block works in Cursor, Windsurf and Cline. To use the hosted URL instead, open Settings โ†’ Connectors โ†’ Add custom connector in Claude Desktop and paste https://dchub.cloud/mcp; do not put a url entry in claude_desktop_config.json.

Claude Code

claude mcp add dchub --transport http https://dchub.cloud/mcp/github

Cursor

Search for "DC Hub" in Cursor MCP marketplace โ†’ click Install.

Cline / Continue.dev

{
  "name": "dchub",
  "url": "https://dchub.cloud/mcp/github",
  "transport": "http"
}

Gemini CLI

~/.gemini/settings.json (or .gemini/settings.json in a project):

{
  "mcpServers": {
    "dchub": {
      "httpUrl": "https://dchub.cloud/mcp/github"
    }
  }
}

Or one command: gemini mcp add --transport http dchub https://dchub.cloud/mcp/github

httpUrl, not url. In Gemini CLI url is the SSE form and command is stdio โ€” put a Streamable-HTTP server under either and it is dialled with the wrong transport and never connects. This is the free Gemini CLI: no OAuth, no admin console, no enterprise account. Add a headers object with X-API-Key for full data.

Antigravity

~/.gemini/antigravity/mcp_config.json (or .agents/mcp_config.json in a workspace):

{
  "mcpServers": {
    "dchub": {
      "serverUrl": "https://dchub.cloud/mcp/github"
    }
  }
}

serverUrl, not url or httpUrl. Antigravity rejects both โ€” the block stays valid JSON and registers nothing. It is a different client from Gemini CLI with a different config file, so installing one does not install the other, even though both live under ~/.gemini/.

Smithery.ai

Listed at smithery.ai/servers/azmartone67/dchub. Add via Smithery CLI:

npx -y @smithery/cli install @azmartone67/dchub --client claude

Privacy and data handling

  • Per-call telemetry (first-party only). Every tool call is logged to the DC Hub backend (POST /api/v1/mcp/track): timestamp, tool name, call parameters, detected client/platform, tier, session id, your API key (if you sent one), status and duration. It is used for rate limits, billing and quality. It is never sent to a third party, and there is no advertising or third-party analytics. Anonymous calls carry no key. Details: SECURITY.md.

  • Email capture (bind_email) is optional. The bind_email tool exists to raise your daily limit. If you call it, the email you pass is stored against your key, and you can ignore the tool. The server never asks for or collects an email any other way.

  • No install-time code. Installing this package runs no scripts (no preinstall, install, postinstall or prepare). The git pre-commit hook for contributors is opt-in: npm run hooks:install.

Pricing

  • Anonymous: previews, no API key needed

  • Free key (one claim_free_key call, no email): previews plus 2 full answers per tool per day, every tool callable, most as previews. Grid/queue/market-intel tools: previews on free; full needs a paid DC Hub plan. analyze_site: a free key gets a few free full site reports each month; after that, previews.

  • Add an email (bind_email): 50 calls/day (up to 10 full answers per tool per day)

  • Paid plans (more volume, every tool, exports): plans and prices at https://dchub.cloud/pricing

Data sources

EIA hourly RTO data ยท HIFLD substation database ยท OpenStreetMap ยท PeeringDB ยท DC Hub proprietary news + facility pipeline ยท regulations.gov NEPA filings ยท USGS ยท EPA eGRID ยท FEMA NRI

Open source

This MCP server's transport layer is open source. The data + business logic lives at dchub.cloud. Issues: GitHub Issues.

Contact

azmartone@gmail.com โ€” Jonathan Martone โ€” Martone Advisors LLC

Available Tools

94 tools
accept_capacity_termsAccept Capacity TermsAInspect

Use ONLY after your human has read and agreed to DC Hub's introduction terms (https://dchub.cloud/listings#terms): records that acceptance, once per terms version, so Capacity Source listing details open for them. Call it when source_capacity returns a listing locked with access.reason terms_acceptance_required, never on your own judgement: nothing opens without your human's agreement. Requires an identified caller (claim_free_key, then bind_email with your human's address, or an OAuth connection) and accept_terms=true. Returns accepted and the terms version, recorded in DC Hub's lead register. Do NOT use to request an introduction (use request_capacity_intro) or to browse listings (use source_capacity).

ParametersJSON Schema
NameRequiredDescriptionDefault
accept_termsNoSet true ONLY after your human has read and agreed to the introduction terms at https://dchub.cloud/listings#terms. Unless it is exactly true, nothing is sent
terms_versionNoThe terms version your human agreed to, e.g. access.unlock.terms.version from source_capacity. Omit to send the version currently published

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the consent gate, the identity prerequisite chain (claim_free_key then bind_email, or an OAuth connection), the once-per-terms-version recording semantics, the required accept_terms=true, and that the acceptance lands in DC Hub's lead register with a returned accepted flag and terms version.

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?

Dense but front-loaded: the consent gate and trigger come first, exclusions last. Every clause carries information, though the single long paragraph could be split for faster scanning.

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

Completeness5/5

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

For a gated consent-write tool with an output schema and safety annotations already present, all the missing pieces an agent needs are supplied: prerequisites, trigger condition, refusal condition, side effect, and return values.

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?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: accept_terms is framed as an affirmative human-consent switch rather than a generic boolean, and terms_version is tied to what source_capacity reports. The linkage to the prerequisites is useful context the schema alone doesn't convey.

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 ('records that acceptance' of DC Hub's introduction terms) and immediately scopes the effect: it unlocks Capacity Source listing details. It explicitly separates itself from request_capacity_intro and source_capacity, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives the exact trigger ('Call it when source_capacity returns a listing locked with access.reason terms_acceptance_required'), the hard precondition ('Use ONLY after your human has read and agreed'), an explicit prohibition ('never on your own judgement'), and named alternatives for the two adjacent intents.

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

ai_capacity_indexAI Capacity IndexA
Read-onlyIdempotent
Inspect

AI Compute Capacity Index: ranks data center markets by where 100MW of AI training capacity can land in the next 30/60/90 days. Returns top markets with facility_count, operator_count, deployable_mw estimate (megawatts), hyperscale_ready flag, rack power density and cooling-type signals where facility data carries them, and composite score (depth + diversity + power). Refreshed Fridays 14:00 UTC. Use for AI capex planning, GPU cluster siting, hyperscaler deal forecasting. For grid power availability use DCPI (rank_markets ai_ready). Do NOT use for a general best-markets ranking (use rank_markets) or forward grid-emergence (use grid_transition_radar).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of top markets to return (default 20)
horizonNoDeployment horizon in days: 30, 60, or 90 (default 90)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, so the description only needs to add context beyond that. It does: refresh cadence (Fridays 14:00 UTC) and the composition of returned signals (facility_count, operator_count, deployable_mw, hyperscale_ready, rack density, cooling type, composite depth+diversity+power). It does not state coverage limits or data staleness caveats, but the added freshness/return context is solid.

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 what the index is and what it returns before the usage and exclusion clauses, and every sentence carries routing or field information. It is dense and one clause longer than strictly needed, but not padded.

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

Completeness5/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 prose elaboration, and the description still summarizes them. Combined with use cases, refresh cadence, and sibling disambiguation, an agent has everything needed to select and call it correctly.

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 description coverage is 100%: limit and horizon are both documented with type, range, and defaults. The description mentions 30/60/90 days but adds no format, syntax, or edge-case meaning beyond what the schema already carries, so baseline 3 applies.

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, resource, and scope: ranking data center markets by 100MW AI-training deployability over 30/60/90-day horizons. It explicitly distinguishes itself from rank_markets (general ranking) and grid_transition_radar (forward grid emergence), so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit positive use cases (AI capex planning, GPU cluster siting, hyperscaler deal forecasting), a redirect for grid power (DCPI via rank_markets ai_ready), and two explicit do-not-use cases with named alternatives. Nothing is left to inference.

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

analyze_parcelAnalyze ParcelA
Read-onlyIdempotent
Inspect

Structured read of a parcel BOUNDARY โ€” pass your own GeoJSON Polygon/MultiPolygon, OR just lat+lon and DC Hub finds the containing parcel in its HOSTED parcel-boundary layer (free county/state GIS polygons, rolling out by data-center market โ€” Loudoun County VA first; a point outside hosted coverage returns an honest 404 with the coverage list, never a guess). Returns _entity=parcel_analysis: geodesic total_acres, a per-member acreage breakdown, a contiguous flag, representative_point = the centroid of the LARGEST-area member (never the multi-part geometric center, which can land off-parcel on a highway median or river and poison every point-keyed read), and hosted_parcel {parcel_id, county, state, acres_per_source} when the polygon came from the hosted layer. Also returns a site_evaluation_handoff to pipe into analyze_site + get_water_risk at that anchor. Use when you HAVE a boundary or a point on a specific parcel and want it anchored + sized; for a general lat/lon site score use analyze_site; for the interconnection-queue survivor set use get_refined_queue (queue rows carry NO parcel identity, so they never auto-join to hosted parcels).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of a point ON the parcel โ€” used with lon when geometry is omitted to look up the containing parcel from the hosted county/state GIS layer
lngNoAlias for lon โ€” either name works
lonNoLongitude of a point ON the parcel (used with lat when geometry is omitted)
geometryNoGeoJSON Polygon or MultiPolygon parcel boundary, e.g. {"type":"Polygon","coordinates":[[[lng,lat],[lng,lat],...]]} โ€” a MultiPolygon carries discontinuous parcels as one envelope. Omit to look up the hosted parcel containing lat/lon instead
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
capacity_mwNoOptional target load in MW to pass through into the site_evaluation_handoff

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-open-world, and the schema describes the aliases, so much of the surface is covered. The description does add genuinely non-derivable behavior: hosted coverage rolls out by market (Loudoun VA first) and an out-of-coverage point returns an honest 404 with a coverage list rather than guessing. A 3 reflects real additive context on top of a fully annotated read tool without going much beyond coverage semantics.

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?

The core purpose and the two input modes are front-loaded in the first clause, followed by coverage behavior, return shape, handoff, and alternatives. It is dense but well ordered; the enumeration of return fields is partly redundant given an output schema exists, which keeps it from a 5.

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

Completeness5/5

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

For a tool with an output schema and full annotation coverage, the description covers the remaining unknowns: coverage scope and its rollout, the 404-no-guess guarantee, what representative_point is and why it is not the geometric center (anchor poisoning), and downstream handoff to analyze_site/get_water_risk. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds the OR logic between geometry and lat/lon (omit geometry to force hosted lookup) and the pass-through role of capacity_mw into the site_evaluation_handoff. The MultiPolygon 'one envelope' note and alias confirmations go slightly beyond the schema field text.

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 action (structured read of a parcel boundary) and two distinct input modes (own GeoJSON, or lat/lon lookup into a hosted parcel layer). It explicitly names the siblings it is not โ€” analyze_site for general site scores and get_refined_queue for the interconnection-queue set โ€” so an agent can discriminate 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 Guidelines5/5

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

Gives an explicit when-to-use ('when you HAVE a boundary or a point on a specific parcel'), plus when-not conditions routed to named alternatives (analyze_site, get_refined_queue). It even notes queue rows carry no parcel identity so they never auto-join, preventing a wrong tool choice.

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

analyze_siteAnalyze SiteA
Read-onlyIdempotent
Inspect

Use this whenever the user asks whether a specific site or coordinate works for a data center. Call when the user has one location (lat/lon, or a market name for a market-level read) and asks if it suits a data center. Returns a 0-100 composite, verdict, power/gas/fiber/market/risk sub-scores, nearby infrastructure and power cost; capacity_mw adds a capacity_context block and does NOT move overall_score. Keyless returns the verdict band, the power band, the weakest factor and counts; a free key adds factor bands, substation distance bands and a few free full site reports each month; other scores and figures need a paid DC Hub plan. When a result is partial, show your user the human_message (or for_your_human) text and its link. Ex: "Score 33.45,-112.07 for 100 MW." Needs BOTH lat and lon in decimal degrees (else missing_coordinates); take them from get_facility or search_facilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90; required unless candidate_id or location given), e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180; required unless candidate_id or location given), e.g. -112.07
stateNoUS state abbreviation (optional) โ€” improves the tax-incentive lookup, e.g. AZ
latitudeNoAlias for lat โ€” either name works
locationNoMarket NAME or metro slug instead of coordinates, e.g. "ashburn", "northern-virginia", "dallas". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. This is a MARKET-level read, not the parcel you named โ€” pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.
longitudeNoAlias for lon โ€” either name works
capacity_mwNoTarget power load for the build in megawatts (MW), e.g. 100 (typical 50-500)
candidate_idNoPREFERRED for queue survivors: a cand_โ€ฆ id from get_refined_queue โ€” coordinates come from the FROZEN mint (lat/lon args are ignored; zero transcription drift; expired ids fail closed with candidate_expired). See dchub.cloud/docs/candidate-lifecycle
include_gridNoInclude grid-headroom / substation analysis (default true)
include_riskNoInclude water/drought/climate risk analysis (default true)
include_fiberNoInclude fiber-connectivity analysis (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
fiberNoFiber read: {connectivity_score, nearest_carrier_km, near_net_bucket, top_carriers[], single_carrier_risk} (full payload)
quotaNoCaller quota state (remaining calls, tier).
lockedNoWhich sections are locked to a paid plan on the free headline: {per_factor_breakdown, nearby_infrastructure, power_cost, fiber_carriers, site_analysis_report}
nearbyNoNearby infrastructure counts: {substations_50km, power_plants_80km, gas_pipelines_50km, facilities_100km, fiber_carriers_in_state, generation_capacity_mw, total_capacity_mw} (full payload)
scoresNoPer-factor breakdown (full/paid payload)
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
previewNoHeadline preview line (free tier)
verdictNoVerdict string, e.g. "Excellent site" / BUILD-CAUTION-AVOID read
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
locationNoEcho of the analyzed location (full payload)
power_costNoPower cost read: {industrial_cents_kwh, commercial_cents_kwh, period, basis} (full payload)
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
overall_scoreNoAlias of composite_score on the full payload
site_headlineNotrue when this is the free citable HEADLINE (score + verdict + limiting factor)
interpretationNoVerdict prose on the full payload
composite_scoreNo0-100 composite site suitability score (free HEADLINE tier and full tier)
limiting_factorNoSingle top limiting factor (the lowest sub-score) โ€” always present on the free headline
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Far exceeds the annotations (readOnly/idempotent/non-destructive). It discloses the tiered access model (keyless vs free key vs paid plan), that capacity_mw adds capacity_context without moving overall_score, the missing_coordinates error, the candidate_expired fail-closed behavior, and instructs showing human_message on partial results โ€” behavior an agent could not infer otherwise.

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?

Dense and front-loaded, opening with the trigger condition before mechanics. It is long, and a few clauses (e.g. the worked example, the docs URL) verge on narrative, but nearly every sentence carries operative information.

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

Completeness5/5

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

With an output schema present, the description needn't enumerate return fields, and it instead covers the gaps that matter: auth-tier gating, error signals, candidate_id precedence, and the partial-result instruction. Complete for a 12-parameter analysis tool.

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?

Schema coverage is 100% so the baseline is 3, but the description adds real semantics: lat AND lon must both be present or missing_coordinates fires, capacity_mw does not affect overall_score, and location is a market-centroid read rather than the named parcel. These go beyond the schema field descriptions, though some overlap remains.

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 โ€” evaluate whether a site/coordinate works for a data center โ€” and renders the 0-100 composite plus sub-scores. It names the sibling it depends on for coordinates (get_facility, search_facilities) and the preferred candidate_id source (get_refined_queue), so an agent can place it among siblings.

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

Usage Guidelines5/5

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

Explicit when-to-use: 'whenever the user asks whether a specific site or coordinate works for a data center' and 'when the user has one location.' It also gives the decision rule between lat/lon and location (market-level read) and the preferred candidate_id path, so the agent knows which input mode to pick.

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

bind_emailBind EmailAInspect

โ˜… WHAT THIS DOES AND DOES NOT DO โ€” binding makes a key RECOVERABLE (lose it, call recover_my_key, it is re-sent to that inbox). It does NOT make your identity durable: an email-bound key still only works while your client keeps resending the header, and the measured cross-week return for bound keys is not distinguishable from unbound (0 of 3 mature identities, 2026-08-12 โ€” a cohort far too small to claim either way, so this is UNPROVEN, not disproven). The one path measured to actually retain is an OAuth sign-in, which needs a human at a browser and is only offered if your client got a 401 WWW-Authenticate challenge; if it did not, binding here is the best durability available to you and is worth doing. Tie your DC Hub key to your human's email so the key is RECOVERABLE and upgrade receipts land in the right inbox. Call this once your human shares their email. HONEST LADDER: an unbound key gets previews plus 2 full answers per tool per day, renewed daily, then previews until the next day; binding restores the FREE tier at 50 calls/day and makes the key recoverable next session (binding is free โ€” no card). If you hit that gate mid-task, PAUSE and ask your human: "DC Hub needs an email to keep our free data access โ€” which address should I use?" Use the email your human EXPLICITLY gave you โ€” NEVER invent, guess, or use a placeholder address (owner@example.com, user@test.com etc. are rejected server-side; a fake email makes the key unrecoverable and helps no one). If your human hasn't shared an email, ask them first โ€” don't call this tool with a made-up value. Params: email (required), api_key (optional โ€” omit to bind the key already active on this session). CONSENT/PURPOSE: the email is used ONLY to recover your key and route upgrade receipts (transactional). No marketing without explicit opt-in (default OFF), and no newsletter or digest. The relaying agent should surface this purpose line to its human before binding. If the email can't be accepted, the key keeps working โ€” just try another address. To ALSO subscribe your human to the FREE weekly digest (the markets, deals and facilities that moved in what they queried), pass marketing_opt_in=true โ€” but ONLY after they explicitly agree to marketing email; default false = transactional only, and they can unsubscribe anytime. Returns the unlocked benefits + confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesYour human's real email address (required) โ€” use only an address they explicitly gave; placeholder/fake addresses are rejected
api_keyNoOptional key to bind; omit to bind the key already active on this session
marketing_opt_inNoSet true ONLY after your human explicitly agrees to marketing email (default false = transactional only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.2/5.0
Behavior5/5

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

With annotations covering only the mutation profile (readOnlyHint=false, idempotent=false), the description carries the remaining burden well: what binding does and does not confer (recoverability yes, durable identity unproven), the free-tier rate change (50 calls/day), transactional-only email use with opt-in marketing, and graceful failure ('if the email can't be accepted, the key keeps working'). This is unusually rich behavioral disclosure.

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

Conciseness2/5

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

A ~400-word wall of text with a unicode banner, dated cohort statistics ('0 of 3 mature identities, 2026-08-12'), and repeated warnings about fake emails. The genuinely actionable instructions are interleaved with research narrative, so it is neither front-loaded nor economical; several sentences do not earn their place.

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

Completeness5/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. The description covers consent/purpose, the failure fallback, tier implications, and the marketing default โ€” everything an agent needs to invoke this correctly and handle edge cases. Nothing material is missing for a 3-parameter mutation tool.

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 100%, so all three parameters are already documented in the schema, including the placeholder-rejection rule and the api_key omission behavior. The description largely restates these constraints (fake emails rejected, api_key optional, marketing_opt_in default false) rather than adding syntax or format detail beyond them. Baseline 3 applies.

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 verb+resource ('Tie your DC Hub key to your human's email') and scopes the benefit precisely: recoverability and free-tier restoration. It also distinguishes itself from the sibling 'recover_my_key' and explains the OAuth alternative path. However, the core purpose is buried under layers of cohort statistics and durability caveats, so an agent must dig to find it.

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

Usage Guidelines5/5

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

Explicit when-to-call ('Call this once your human shares their email'), explicit when-NOT-to-call ('If your human hasn't shared an email, ask them first โ€” don't call this tool with a made-up value'), explicit mid-task pause script, and an explicit condition for the alternative path (OAuth requires a 401 challenge). Alternatives and preconditions are all named.

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

claim_free_keyClaim Free KeyAInspect

Call when the user wants more DC Hub access than keyless allows or asks for a key; no key is needed to start. Mints a free key and returns it plus connect_url, a connector URL with the key embedded (the only thing hosted chat clients keep). Free key: previews plus 2 full answers per tool per day. Add an email: 50 calls/day. Ask the user for an email first; pass it only if they typed it (makes the key recoverable). Save and reuse the key (lost one: recover_my_key); don't re-mint. Then ask the real question (execute_plan for multi-step). If a call was answered with a sign-in challenge (401 WWW-Authenticate), prefer signing in: that identity persists, but a human must finish it in a browser. No challenge (Claude Code, Cursor, most agents) means OAuth is not available to you and the key is right. Ex: "Set me up with a DC Hub key."

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoOptional owner email to make the key recoverable across sessions; use only an address your human explicitly gave
client_nameNoYour agent/app name for attribution, e.g. "Claude Desktop" or "acme-siting-bot"

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the return payload (key + connect_url with key embedded), the exact rate tiers (previews + 2 full answers/tool/day, 50/day with email), the non-idempotent re-mint warning, and the 401 WWW-Authenticate sign-in-vs-key decision. This is behavior an agent cannot infer from readOnlyHint/idempotentHint alone.

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 trigger condition and stays dense, though the OAuth/challenge passage is slightly digressive. Nearly every sentence carries routing, rate, or state-management value.

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

Completeness5/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 values needn't be fully explained, yet the description still names connect_url and its significance. Combined with rate limits and the sign-in fallback, an agent has everything needed to invoke this correctly.

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?

Schema coverage is already 100%, so baseline is 3; the description adds real semantics on top by instructing to ask for the email first and pass it only if the user typed it, explaining why (recoverability). client_name remains schema-only but is self-explanatory.

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 ('Mints a free key and returns it plus connect_url') and immediately scopes it against siblings by naming recover_my_key and execute_plan as the alternatives for lost keys and multi-step work.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Call when the user wants more DC Hub access than keyless allows or asks for a key'), a when-not ('no key is needed to start'), and routing to recover_my_key for lost keys plus execute_plan for the follow-up question.

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

cluster_sites_by_latencyCluster Sites By LatencyA
Read-onlyIdempotent
Inspect

Physics-bounded latency clustering for 2-8 sites โ€” returns viable low-latency clusters and pairwise RTT floors before any routing work. Use when your human wants to know which of N candidate sites can form a synchronous / low-latency cluster (sync replication, active-active pairs, HPC pods): deterministic pruning BEFORE detailed routing. Per site pair: haversine distance, round-trip physics floor (km ร— 4.9 ยตs/km โ€” light in SMF-28 fiber, nโ‰ˆ1.468 โ€” then ร—2), estimated real RTT (floor ร— route_factor 1.4, a stamped inference), viable vs physics_impossible against your budget, and confidence_v โ€” the provenance tier of the supporting evidence (published | tracked | inferred). Also returns clusters: the largest site subsets whose ALL pairwise estimates fit the budget, plus each site's inferred dark-fiber screening level. CANDIDATE CONTRACT: pass candidate_ids (from get_refined_queue) instead of raw coordinates โ€” each resolves to its FROZEN mint coordinates (zero transposition), and cand_โ€ฆ tokens may also be mixed into the sites string; expired/unknown ids are dropped AND declared in candidate_contract (fail-closed). Example: cluster_sites_by_latency sites="39.04,-77.48:ashburn;39.29,-76.61:baltimore;40.42,-79.99:pittsburgh" max_latency_us=2000 โ€” or cluster_sites_by_latency candidate_ids=["cand_โ€ฆ","cand_โ€ฆ"] max_latency_us=2000. Returns _entity=latency_clusters: {pairs:[{from, to, distance_km, floor_rtt_us, est_rtt_us, viable, physics_impossible, confidence_v, endpoint_dark_screen}], clusters:[{sites, size, max_est_rtt_us}], viable_count, pruned_count, assumptions, provenance}. Do NOT treat this as an engineered latency quote โ€” the floors are physics (no fiber path can beat them) but the estimates are inference (route_factor 1.4); always quote each pair's confidence_v when relaying results. For actual route corridors use plan_fiber_leadin; for a single-site connectivity score use get_fiber_readiness.

ParametersJSON Schema
NameRequiredDescriptionDefault
sitesNoSemicolon-separated "lat,lon" pairs, 2-8 sites (same format as compare_sites locations); optional per-site labels via "lat,lon:label", e.g. "39.04,-77.48:ashburn;39.29,-76.61:baltimore". cand_โ€ฆ tokens are also accepted here and resolve to frozen mint coordinates. Optional if candidate_ids is given
candidate_idsNoArray (or comma-separated string) of candidate_id values from get_refined_queue โ€” each resolves to its FROZEN mint coordinates (zero transcription drift); expired/unknown are dropped and declared in candidate_contract. Use instead of, or alongside, sites
max_latency_usNoRound-trip latency budget in microseconds (default 1000 ยตs = 1 ms; sync replication is typically 1000-2000 ยตs)
min_confidenceNoMinimum evidence tier a pair must meet to count as viable: "published" | "tracked" | "inferred" (default inferred = include all)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safe-read profile (readOnly/idempotent/non-destructive); the description adds genuine behavioral context beyond that: a fail-closed candidate contract where expired/unknown ids are dropped AND declared, the distinction between physics floors (unbeatable) and inferred estimates (route_factor 1.4), the confidence_v provenance tier, and an explicit 'do NOT treat this as an engineered latency quote' caveat.

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 with purpose, then contract, then return shape, then exclusions; each block is dense with distinct information. It runs long and some of the assumptions/provenance explanation could be trimmed, but almost every sentence earns its place.

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

Completeness5/5

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

For a 4-parameter analytical tool with an output schema, the definition covers input contracts, the physics-vs-inference caveat, provenance tiers, and failure behavior. An agent has everything needed to call it correctly and to relay results honestly.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds real semantic value on how parameters interact โ€” candidate_ids resolves to FROZEN mint coordinates (zero transposition), cand_โ€ฆ tokens may be mixed into the sites string, and the example pairs max_latency_us=2000 with a sync-replication budget โ€” though it largely restates schema text.

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+resource with scope: 'Physics-bounded latency clustering for 2-8 sites โ€” returns viable low-latency clusters and pairwise RTT floors.' It explicitly distinguishes itself from siblings plan_fiber_leadin (route corridors) and get_fiber_readiness (single-site score), so an agent can pick it 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 Guidelines5/5

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

Gives an explicit when-to-use ('Use when your human wants to know which of N candidate sites can form a synchronous / low-latency cluster (sync replication, active-active pairs, HPC pods)') and frames it as deterministic pruning BEFORE detailed routing. It names two alternative tools and the scenario each covers, leaving nothing to inference.

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

compare_isosCompare ISO RegionsA
Read-onlyIdempotent
Inspect

Use this whenever the user asks to compare two to four US grids side by side. Use when a user wants a side-by-side of 2-4 ISO grids โ€” fuel mix, demand, renewable/gas share, interconnection-queue depth, time-to-power โ€” in one call instead of N sequential get_grid_intelligence calls. Example: "Compare PJM vs ERCOT vs CAISO on gas share, renewable share, and queue depth right now." โ€” compare_isos isos="PJM,ERCOT,CAISO". Params: isos is a comma-separated list (2-4 max) drawn from the 7 live US ISOs: "PJM" | "ERCOT" | "CAISO" | "MISO" | "SPP" | "NYISO" | "ISO-NE". Returns: {isos[], comparison:{:{demand_mw, generation_mix_pct, renewable_share_pct, gas_share_pct, constraint_score, excess_power_score, avg_time_to_power_months, avg_queue_wait_months, queue_depth_gw, retail_price_cents_kwh}}, as_of}. โ˜…avg_time_to_power_months (DCPI per-market estimate, ISO-averaged) and avg_queue_wait_months (proxy from live queue DEPTH) are DIFFERENT measurements โ€” quote whichever you mean by name. Do NOT use to rank ALL grids globally (use get_grid_scoreboard) or for the single-ISO deep brief (use get_grid_intelligence).

ParametersJSON Schema
NameRequiredDescriptionDefault
isosYesComma-separated list of 2-4 US ISO/RTO grid regions to compare, e.g. "PJM,ERCOT,CAISO" (valid: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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, non-destructive, openWorld, so the safety profile is covered. The description adds real value beyond that: it caps input at 2-4, sketches the returned comparison shape, and warns that avg_time_to_power_months and avg_queue_wait_months are DIFFERENT measurements that must be quoted by name. It does not add operational constraints like rate limits or auth, so a 4 rather than a 5.

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 with the usage trigger, then example, params, returns, and exclusions in a logical order. Slightly verbose: the opening two sentences both restate the 2-4 side-by-side comparison, and the full return-key list is largely redundant given an output schema exists.

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

Completeness5/5

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

Given a single required parameter, full schema coverage, and an output schema, the description supplies everything an agent needs: when to use, when not to, the alternative tools, input bounds, and a meaningful caveat about two similar-sounding metrics. Nothing required for a correct call is missing.

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 100%, so the schema already documents the single 'isos' parameter, its 2-4 range, example, and valid set โ€” this is the baseline-3 case. The description reinforces the same facts but adds no new syntax. It also introduces a value mismatch worth noting: the description lists 'ISO-NE' while the schema enumerates 'ISONE'.

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 ('compare') and resource ('2-4 US ISO grids side by side'), names the compared dimensions (fuel mix, demand, renewable/gas share, queue depth, time-to-power), and explicitly names the siblings it is NOT (get_grid_scoreboard, get_grid_intelligence). An agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('whenever the user asks to compare two to four US grids side by side'), a concrete example invocation, and explicit exclusions routing to the correct alternatives ('Do NOT use to rank ALL grids globally โ€” use get_grid_scoreboard' and 'for the single-ISO deep brief โ€” use get_grid_intelligence'). Nothing is left to inference.

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

compare_sitesCompare SitesA
Read-onlyIdempotent
Inspect

Call when the user has 2-4 candidate locations and asks which is best for a data center. Pass locations as "lat,lon;lat,lon" and optional capacity_mw. Returns each site's analyze_site scores side by side plus a recommended winner and why. Keyless returns each site's verdict band and power band, with the other factors named; a free key adds names and counts without figures; scores and figures need a paid DC Hub plan, as does the pick. Ex: "Phoenix vs Ashburn for 50 MW?"

ParametersJSON Schema
NameRequiredDescriptionDefault
sitesNoAlternative to locations: an array of {lat, lon} (or {lat, lng}) objects, 2-4 sites
locationsNoSemicolon-separated list of 2-4 "lat,lon" pairs to compare, e.g. "33.45,-112.07;39.04,-77.48"
capacity_mwNoTarget power load for the build in megawatts (MW), e.g. 50 (typical 50-500)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral context: the tiered gating (keyless gives verdict+power bands only, a free key adds names/counts, full scores/figures and the pick require a paid plan). That auth-tier disclosure is exactly the kind of thing an agent needs and cannot get from annotations.

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 with the usage trigger, then input format, return shape, gating, and an example. Dense but every sentence carries distinct information; only the gating clause is slightly packed into one long sentence.

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

Completeness5/5

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

Covers trigger, input format, return content, and paywall behavior, and an output schema already exists to carry return details. Nothing an agent needs to call this correctly is missing.

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 description coverage is 100%, so all three parameters (sites, locations, capacity_mw) are already documented. The description's 'lat,lon;lat,lon' format note and MW example restate what the schema provides, so baseline 3 is appropriate.

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+resource (compare sites) and clarifies scope: 2-4 candidate locations, returns analyze_site scores side by side plus a recommended winner. This distinguishes it clearly from analyze_site (single site) and rank_sites 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 trigger condition ('when the user has 2-4 candidate locations and asks which is best for a data center') plus a concrete example. It does not explicitly exclude or name the closest alternatives (rank_sites, find_sites), which keeps it short of a 5.

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

deal_autopsyDeal AutopsyA
Read-onlyIdempotent
Inspect

Tracked data-center M&A / capex deal flow with the DCPI grid-reality verdict overlaid on each deal market โ€” "what is the real play?". Returns recent deals (buyer, seller, value, market) + each market DCPI verdict and time-to-power; with a paid key, the per-deal autopsy read (long-dated land/power option vs near-term build vs queue gamble). Progressive disclosure to keep the default cheap: by default each read ships only a comparables COUNT (the verdict text is always included); pass comparables="summary" for the top-2 grounding signals, or comparables="full" to expand the complete cited set for a deal you're drilling into. Answers "who is actually buying data centers right now, and are those markets any good", "what is the real play behind this deal". Try: deal_autopsy limit=15.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recent deals to return (default ~15)
comparablesNoComparables detail: "none" (default โ€” count only, cheapest), "summary" (top-2 grounding signals), or "full" (the complete cited set). Escalate only for deals you're drilling into.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive and openWorld=false, so the safety profile is covered. The description adds genuinely useful behaviour beyond that: a cost/verbosity model ('keep the default cheap' via progressive disclosure) and an auth tier gate ('with a paid key, the per-deal autopsy read'), which an agent needs to set expectations. It stops short of stating rate limits or what a free-key caller sees in place of the paid autopsy read.

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 core purpose is front-loaded, which is good, but the prose is padded with marketing cadence ('what is the real play?') and the two closing example questions restate the same two intents already covered earlier. Em-dash asides and quoted phrasing make it longer than it needs to be for a 2-parameter read tool.

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?

An output schema exists, so return values needn't be spelled out, yet the description helpfully names the deal fields (buyer, seller, value, market) plus the DCPI verdict and time-to-power. The progressive-disclosure contract and paid-key gate are both disclosed. The one loose end is that the paid-tier 'per-deal autopsy read' is described only in vague labels (land/power option vs near-term build vs queue gamble) rather than its concrete output.

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 description coverage is 100%, so both parameters are already documented in the schema, and the description largely mirrors it (count-only default, top-2 summary, full cited set). It adds only marginal framing ('cheapest', 'escalate only for deals you're drilling into'). Baseline 3 is appropriate when the schema does the heavy lifting.

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 (track) and resource (data-center M&A / capex deal flow) with a distinctive twist: the DCPI grid-reality verdict overlaid per market. This lets an agent separate it from siblings like list_transactions and hyperscaler_deals, which presumably lack the DCPI overlay. The example questions ('who is actually buying data centers right now', 'what is the real play behind this deal') pin the intended scope.

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?

Clear guidance on the internal escalation lever: default comparables gives only a count, 'summary' gives top-2 grounding signals, 'full' expands the cited set, with the explicit rule 'escalate only for deals you're drilling into.' It gives context for when the tool is the right call (answering deal-flow and market-quality questions) but never names a sibling alternative for when this is the wrong pick over list_transactions or hyperscaler_deals.

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

delete_standing_intentDelete Standing IntentA
Destructive
Inspect

Permanently retire a registered standing intent (webhook watch) by intent_id โ€” deliveries stop and the watch cannot be recovered. A cap_ intent_id retires your own Capacity Source requirement instead, and its alert emails stop. Requires a key (or an OAuth connection for cap_ ids). Get the intent_id from list_standing_intents or from the register response. Answers "stop watching this". Do NOT use to pause temporarily; there is no pause, this removes the watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
intent_idYesThe intent_id to delete (from list_standing_intents or register)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: deliveries stop, the watch cannot be recovered, the cap_ prefix silently redirects to a different object whose alert emails also stop, and a key (or OAuth for cap_ ids) is required. That is exactly the extra behavioral context the annotation bar asks for.

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 with the destructive action and consequence, then branching behavior, sourcing, and the anti-use case. Dense but nearly every clause carries information; the quoted 'stop watching this' is mildly decorative but serves intent routing.

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

Completeness5/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. Everything an agent needs before calling โ€” irreversibility, credential requirement, sibling source of the ID, cap_ special case, and the no-pause caveat โ€” is present.

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?

Schema coverage is 100% for a single parameter, so baseline is 3, but the description adds real semantics the schema lacks: the cap_ prefix changes the target object and the credential mode, and the ID's provenance is given. Not a 5 only because no format/validation detail is offered for the identifier itself.

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 ('permanently retire a registered standing intent (webhook watch) by intent_id') and immediately distinguishes the cap_ variant, which retires a Capacity Source requirement instead. An agent can tell exactly what is being removed and how it differs from the sibling list_standing_intents / register_standing_intent pair.

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

Usage Guidelines5/5

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

Explicitly names the trigger intent ('stop watching this'), the way to obtain the identifier ('Get the intent_id from list_standing_intents or from the register response'), and an explicit exclusion ('Do NOT use to pause temporarily; there is no pause'). This is the full when/when-not/where-from triad.

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

discover_toolsDiscover ToolsA
Read-onlyIdempotent
Inspect

Meta-tool: navigate DC Hub's tool catalog by FAMILY instead of scanning the whole list. Returns _entity=tool_families โ€” a front_door block (execute_plan for any multi-capability question, get_changes to refresh) plus families with a when-to-use note + their tools (facility, market, grid_power, gas_btm, site_geometry, fiber, deals_news, saved_work, account_meta, partner), optionally filtered by a query. Call this FIRST when you are unsure which tool fits a task; then call the chosen tool (its full schema is in tools/list). This is a navigation layer, not the exhaustive catalog โ€” tools/list stays canonical, and if you are BINDING a capability map, bind it from tools/list, not from here.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional keyword to filter families/tools, e.g. "site selection", "grid queue", "fiber", "deals", "market"

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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/non-destructive and closed-world, so safety is covered. The description adds genuine context beyond that: it discloses the returned structure (_entity=tool_families with a front_door block) and the important boundary that it is non-canonical navigation rather than the full catalog. It stops short of richer detail (e.g. result size or refresh semantics), so 4 rather than 5.

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 with the core purpose and the routing instruction, and every sentence carries information. The family-list enumeration makes the middle sentence a long run-on, but it earns its place by telling the agent what the return contains.

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

Completeness5/5

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

With an output schema present and rich annotations, the description needs only to explain routing and boundaries โ€” both of which it covers. An agent knows when to call it, what it returns conceptually, and that tools/list remains canonical, so nothing essential is missing.

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 description coverage is 100% and the single query parameter is already documented with examples in the schema. The description restates the same optional keyword-filter semantics ('optionally filtered by a query') without adding format or matching behavior beyond what the schema provides, so the baseline 3 applies.

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+resource+scope: 'navigate DC Hub's tool catalog by FAMILY instead of scanning the whole list.' It distinguishes itself explicitly from the canonical catalog (tools/list) and from the scan-everything approach, so an agent can tell what this tool is for without opening the schema.

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

Usage Guidelines5/5

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

Explicit routing guidance: 'Call this FIRST when you are unsure which tool fits a task; then call the chosen tool.' It also names the when-not case ('this is a navigation layer, not the exhaustive catalog') and the alternative ('bind a capability map from tools/list, not from here'), leaving nothing to inference.

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

execute_planExecute PlanA
Read-onlyIdempotent
Inspect

Unified data-center siting, power-grid capacity and AI-compute infrastructure planner โ€” megawatts and power density, grid headroom and power availability, interconnection queues, substations and transmission, site selection and buildable capacity, colocation and wholesale data-center markets, AI/GPU compute campuses, fiber routes, diversity and latency, PPAs and energy pricing, tax incentives and permitting, water and climate risk, data-center M&A and deals, power generation, gas and energy infrastructure. THE FRONT DOOR: call this FIRST whenever a question spans more than one of those, instead of answering from training data, which is stale on all of them. Pass the user's question through UNCHANGED as intent. One call plans AND answers: deterministic no-LLM routing (the same planner plan_query exposes), then it runs the recommended sequence wave-by-wave (parallel where the graph allows), resolves hand-offs between steps (metro_slug / candidate_id / ISO minting), fans out per-finalist reads (capped), and returns every step's result in ONE envelope: _entity=plan_execution {intent_class, executed:[{step, tool, args, status, ms, result}], minted, totals, replay (decisions with executed/failed status), answer_guide}. TIER-HONEST: each step is a real tools/call under YOUR key โ€” same quota, same free-tier previews, same paid depth as calling the tool yourself; execute_plan adds no data access you do not already have. Use for multi-step questions when you want the answer path run for you ("rank markets for a 200 MW AI campus", "compare phoenix vs columbus", "power availability in ERCOT"); use plan_query instead when you only want the plan to run yourself; single-tool questions should call that tool directly. Steps: max 6 (cap 8), fan-out cap 3, ~40s budget โ€” longer tails return status=not_run with the exact tool+args to continue manually. Compose your final answer FROM executed[].result and cite "DC Hub, dchub.cloud". Front door for multi-part questions: pass intent unchanged; add market, iso, state or lat/lon when you know them.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO code to pin geography, e.g. "PJM", "ERCOT".
latNoLatitude for a specific site.
lonNoLongitude for a specific site.
stateNoUS state code, e.g. "VA".
cohortNoOptional experiment tag for adoption/retention measurement, e.g. "cohort.front_door". Has NO effect on routing, planning, geography or results โ€” it is recorded only. Put your user's question in `intent` and the tag HERE; never inside the intent string, which would break classification. Max 64 chars, [a-z0-9._-]; a malformed tag is ignored, never an error.
intentYesThe user's infrastructure question, passed through UNCHANGED. Examples: "rank markets for a 200 MW AI campus" ยท "evaluate 100 MW power headroom for a GPU training cluster in PJM" ยท "compare Dallas vs Phoenix for a hyperscale campus" ยท "find 100 MW of buildable capacity near Ashburn" ยท "where do fiber density and grid headroom overlap in Atlanta"
marketNoMetro slug or name to pin the analysis to, e.g. "ashburn". Beats any market the planner would mint.
contextNoOptional structured hints AND step-arg overrides: {lat, lon, iso, market, capacity_mw, candidate_id, state, since} โ€” user-supplied values beat minted ones. The typed top-level params below are merged into this and WIN on conflict.
max_stepsNoMax plan steps to execute, 1-8 (default 6)
max_fanoutNoMax per-finalist fan-out calls for one step, 1-3 (default 2)
capacity_mwNoTarget capacity in MW, e.g. 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare it a safe, idempotent, open-world read; the description adds materially more: quota/tier honesty ("same quota, same paid depth as calling the tool yourself"), execution bounds (max 6 steps, cap 8, fan-out cap 3, ~40s budget), partial-failure behavior (status=not_run with exact tool+args), and the response envelope shape. This is context an agent cannot get from the annotations alone.

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 with domain scope and the FRONT DOOR directive before the mechanics, and most sentences carry routing or behavioral payload. It is dense and long, with heavy capitalization and an exhaustive domain list that borders on bloat, but almost nothing is purely redundant.

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

Completeness5/5

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

For an 11-parameter orchestration tool with a documented output envelope, this covers routing, execution limits, failure semantics, envelope shape, and citation guidance. An agent has everything needed to invoke it correctly and interpret the result.

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 description coverage is already 100% and the schema itself explains cohort no-op behavior and merge precedence, so the schema carries the load. The description adds only reinforcement ("pass intent UNCHANGED"; "add market, iso, state or lat/lon when you know them"), which is useful but largely duplicative. Baseline 3 is appropriate.

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+resource (executes a planned multi-step answer path) and enumerates the exact domains it spans. Critically, it names the siblings it is NOT (plan_query when you only want the plan; direct tool calls for single-tool questions), so an agent can disambiguate without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ("call this FIRST whenever a question spans more than one" domain), when-not ("single-tool questions should call that tool directly"), and the named alternative (plan_query). It even gives trigger phrasings ("rank markets for a 200 MW AI campus", "compare phoenix vs columbus") so routing is unambiguous.

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

export_datasetExport DatasetA
Read-onlyIdempotent
Inspect

Use when a user wants to pull their saved DC Hub shortlist OUT of the platform for offline analysis, a spreadsheet, or ingestion into another tool (paid plan). Example: "Export my saved sites as GeoJSON for QGIS." โ€” export_dataset format=geojson. Params: format ("csv" default, or "geojson"). Returns: the full file contents as text โ€” CSV rows or a GeoJSON FeatureCollection of your saved sites with DCPI score, target MW, market, coordinates, and notes. Do NOT use to list sites in-chat (use list_saved_sites) or to save a new one (use save_site); this is the bulk-download path.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput file format: "csv" (default) or "geojson" (for GIS tools like QGIS)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world), but the description adds meaningful context: the paid-plan gating and the fact that it returns the entire file contents as text rather than a chat listing. The one gap is pagination/size-limit behavior for large shortlists, which is not addressed.

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 with the primary use case, then example, return shape, and exclusions in a logical order; every sentence carries information. Slightly dense with embedded parentheticals, but no filler.

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

Completeness5/5

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

Covers intended use, format options, return payload contents, plan requirement, and explicit sibling alternatives. Even though an output schema exists, the description's summary of return fields (DCPI score, target MW, market, coordinates, notes) is accurate and complete for correct invocation.

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?

Schema coverage is 100%, so baseline is 3, but the description goes further by stating the default ('csv') and the reason to pick the alternative (geojson for GIS tools like QGIS), tying the enum-like values to a real use case.

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 ('pull their saved DC Hub shortlist OUT of the platform') with concrete intended outcomes (offline analysis, spreadsheet, ingestion). It explicitly names the siblings it is not (list_saved_sites, save_site), so an agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions plus a worked example ('Export my saved sites as GeoJSON for QGIS'), and states when NOT to use it with the correct alternatives for each case. Nothing is left to inference.

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

fetchFetchA
Read-onlyIdempotent
Inspect

Fetch a DC Hub record for an id returned by the search tool (OpenAI Deep Research / ChatGPT connector format). Returns {id, title, text, url, metadata} โ€” a citable public summary of one data-center facility (name, operator, location, status, market). For full structured specs (capacity MW, coordinates) use get_facility or open the url.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA facility id/slug from a prior `search` result, e.g. equinix-dc1-ashburn

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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, non-destructive and closed-world, so the safety profile needs no restating. The description adds genuine context beyond that: the record is a citable, public summary with a named shape ({id, title, text, url, metadata}) and only a subset of facility attributes (name, operator, location, status, market). It stops short of noting whether any context is destroyed, but for a pure read that is minor.

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?

Three sentences, front-loaded with the action and its precondition, then the return shape, then the routing to get_facility. The parenthetical connector-format note is the one piece of marginal value; otherwise the text is tight and earns its place.

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

Completeness5/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 spelled out, yet the description still summarizes the shape usefully. Combined with the id precondition and the get_facility escape hatch, an agent has everything needed to call this correctly rather than reaching for a richer facility tool.

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 100% for the single `id` parameter, and the description's example (equinix-dc1-ashburn) largely duplicates what the schema already states. The only added nuance is the tie back to a prior `search` result, which the schema also carries, so baseline 3 applies.

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 (Fetch) and resource (a DC Hub record) and scopes it to ids returned by the `search` tool, which distinguishes it from the many `get_*` siblings. It also names get_facility as the route for full structured specs, so an agent can separate it from that sibling 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 Guidelines5/5

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

Gives an explicit precondition (id must come from a prior `search` result) and an explicit alternative with its condition: use get_facility or open the url for full structured specs such as capacity MW and coordinates. Both when-to-use and the competing tool are named, not implied.

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

find_alternativesFind Alternative FacilitiesA
Read-onlyIdempotent
Inspect

Use when a user likes ONE specific facility and wants similar nearby options to consider instead ("what else looks like this?"). Example: "Find alternatives to the Ashburn QTS campus for about 50MW." โ€” find_alternatives facility_id=. Params: facility_id or name (the target, required); optional capacity_mw, radius_km, limit. Returns: ranked alternatives, each with similarity_score, match_reasons, and key_differences versus the target. Do NOT use to score one site (use score_facility or analyze_site) or to compare a known short-list head-to-head (use compare_sites); this DISCOVERS candidates from a single seed facility.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
match_onNoOptional similarity dimension to weight, e.g. capacity, operator, fiber, market
radius_kmNoSearch radius in km for candidate alternatives around the seed facility
facility_idYesThe seed facility id/slug (required) to find alternatives to, from a prior search result โ€” there is no `name` param; an undeclared key is silently stripped
exclude_operatorNoIf true, exclude facilities from the same operator as the seed

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.2/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 behavioral context beyond that: this is a discovery operation seeded from one facility, and results are ranked with similarity_score, match_reasons and key_differences. It omits any mention of rate limits, cost, or what happens when no candidates fall inside radius_km.

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?

Well front-loaded: trigger condition first, example second, invocation and params third, return shape fourth, exclusions last. Mostly earns its length, though the explicit 'Returns:' enumeration is partly redundant given a declared output schema, and the parameter sentence is both long and incorrect.

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?

Covers the decision-relevant surface for a single-seed discovery tool: trigger, example, alternatives to avoid, and result semantics (and an output schema exists, so return values need not be spelled out). The one substantive gap is accuracy rather than omission โ€” the phantom `name` parameter makes the calling contract incomplete/incorrect relative to the schema.

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 coverage is 100%, so baseline would be 3, but the description actively misleads: it says 'Params: facility_id or name (the target, required)' while the schema's facility_id description states 'there is no `name` param; an undeclared key is silently stripped.' An agent following the description would pass `name` and get it silently dropped, producing a wrong or failed call. The example's '50MW' does loosely illustrate capacity_mw, but that does not offset the false parameter claim.

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 (find alternatives) plus the exact seed-resource it operates on, and names the sibling tools it is not (score_facility, analyze_site, compare_sites). The parenthetical framing ('what else looks like this?') makes the intent unmistakable against a large sibling list.

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

Usage Guidelines5/5

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

Explicit when-to-use trigger ('a user likes ONE specific facility'), a worked example with concrete inputs, and an explicit when-NOT-to-use clause routing to three named alternatives. It even states the selection rule (single seed โ†’ discover candidates) that distinguishes it from compare_sites.

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

find_sitesFind SitesA
Read-onlyIdempotent
Inspect

FRONT DOOR CHECK โ€” if the question spans more than one capability ("find 200MW near Dallas with fiber, then rank the markets"), call execute_plan(intent="<the user's question, unchanged>"). find_sites is the right single call when the user has NO site yet and wants candidates to start from โ€” the first step of data center site selection. THE INVERSE QUERY: every other DC Hub siting tool needs a coordinate you already have โ€” analyze_site scores one, get_composite_site_score grades one, rank_sites orders candidates YOU already enriched, find_alternatives needs a seed facility. This one answers "where should I even be looking?". Returns candidate SEARCH AREAS anchored on real HIFLD substations at or above min_voltage_kv, spatially de-duplicated by cluster_km so a dense metro yields distinct areas instead of 40 near-identical rows, each carrying measured distance to the nearest gas pipeline and fiber route plus state-grain moratorium context, and a next_calls handoff. โ˜… WHAT A CANDIDATE IS NOT: a search area is NOT a parcel, NOT a listing, and NOT land known to be for sale โ€” DC Hub holds no land-ownership or availability data, and hosted parcel boundaries cover ONE county (Loudoun VA), so analyze_parcel will 404 on most of these points BY DESIGN. Read each as "start looking here", then score the coordinate with analyze_site. โ˜… READ constraint_coverage BEFORE CALLING THIS A SCREENED LIST: a constraint filters ONLY when its layer actually answered. If a layer errors, the set comes back UNFILTERED with applied:false plus a reason and an instead, the names repeated in top-level unapplied_constraints and an unapplied_constraints_warning โ€” an unevaluable constraint is never a passed constraint. fiber_distance_km is a straight-line CHORD between a route's endpoints, NOT the true polyline path; its basis is stamped on every candidate and get_fiber_readiness at the coordinate is the engineered read. hazard/moratorium are STATE grain, never a site verdict. A geography is REQUIRED โ€” pass state, or lat+lon (+radius_km); without one you get a legible 400 (error_code geography_required), never a nationwide scan. Free tier coarsens coordinates to ~11 km and withholds operator/capacity. Answers "where should I even be looking for 200 MW in Ohio" and "which areas near Dallas sit on 230kV with gas within 5 miles". Try: find_sites state=OH min_voltage_kv=230 max_gas_km=8 โ€” or find_sites lat=39.04 lon=-77.48 radius_km=60 min_voltage_kv=500. Do NOT use to score a site you already have (analyze_site), to rank candidates you already enriched (rank_sites), to find similar FACILITIES to a known one (find_alternatives), or for interconnection-queue survivors (get_refined_queue).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of a search centre, e.g. 39.04 โ€” use with lon (+ radius_km) instead of state
lngNoAlias for lon โ€” either name works
lonNoLongitude of a search centre, e.g. -77.48
limitNoMax results to return (1-500; default varies by tool)
stateNo2-letter US state to search, e.g. OH โ€” required unless you pass lat + lon
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoSearch radius in km around lat/lon (default 80, clamped 5-400); ignored in state mode
cluster_kmNoCollapse anchors within this many km into one candidate area (default 8, max 100). Raise it for broader coverage, lower it for denser results
max_gas_kmNoDrop candidates farther than this from the nearest gas pipeline. Applied ONLY if the gas layer answers โ€” check constraint_coverage
max_fiber_kmNoDrop candidates farther than this from the nearest fiber route (CHORD approximation โ€” see fiber_distance_basis). Applied ONLY if the fiber layer answers
min_voltage_kvNoOnly anchor on substations at or above this voltage in kV (default 115). 230+ for hyperscale, 500 for the largest campuses
exclude_moratoriumNotrue = drop candidates in a state with a published data-center moratorium. STATE grain, not jurisdiction grain

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover safety (readOnly, idempotent, non-destructive), but the description discloses far more: constraint_coverage semantics, the unfiltered fallback with applied:false/warning, the chord-vs-polyline fiber caveat, state-grain hazard/moratorium, the geography_required 400, and free-tier coordinate coarsening. This is unusually rich behavioral context beyond structured fields.

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?

Front-loads the routing decision well, but is dense and partly redundant โ€” the 'THE INVERSE QUERY' paragraph and the closing 'Do NOT use ...' sentence restate the same sibling list. Several clauses (free tier, hazard grain, chord caveat) could be consolidated without losing meaning.

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

Completeness5/5

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

Given a 13-parameter, no-required-parameter tool with an output schema, the description covers input requirements (geography mandatory), constraint behavior, return shape, caveats, and handoffs. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so baseline 3, but the description adds semantics: '230+ for hyperscale, 500 for the largest campuses' for min_voltage_kv, the state-vs-lat/lon requirement, and two fully worked example invocations. It goes modestly beyond the schema's own parameter text.

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 ('find_sites ... answers where should I even be looking') and defines the exact output โ€” candidate search areas anchored on real HIFLD substations. It explicitly distinguishes itself from siblings (analyze_site, get_composite_site_score, rank_sites, find_alternatives, get_refined_queue) so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit selection rule: use find_sites when the user has NO site yet and wants candidates, and route multi-capability questions to execute_plan. It names the alternatives and the conditions that select them, plus concrete when-to-call examples ('200 MW in Ohio', 'areas near Dallas on 230kV with gas within 5 miles').

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

generate_site_analysisGenerate Site AnalysisA
Read-onlyIdempotent
Inspect

Use when a user wants a SHAREABLE, branded multi-page Site Analysis PDF for ONE lat/lon (a powered-land parcel, a candidate campus) โ€” the polished client deliverable, not just a score. Example: "Make the Site Analysis PDF for this Carrier Mills parcel, 150 MW, for TON Infrastructure." โ€” generate_site_analysis lat=37.694 lon=-88.65 capacity_mw=150 prepared_for="TON Infrastructure" prepared_by="Martone Advisors". Params: lat (-90 to 90, required), lon (-180 to 180, required), capacity_mw (target load MW, e.g. 50-500), prepared_for (client name on the cover), prepared_by (your firm โ€” brands the report; defaults to DC Hub), latency_target (optional metro override; default = nearest real carrier hotel). Returns: {survey:{verdict, power/transmission, gas, water, air-permitting, fiber carriers, latency-to-nearest-carrier-hotel, market, tax}, pdf_report_url}. pdf_report_url is a ready-to-open link to download the branded 5-page PDF โ€” no login needed, valid ~7 days; hand it to your human. For just the numeric suitability score (no PDF), use analyze_site instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90, required), e.g. 37.694
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180, required), e.g. -88.65
latitudeNoAlias for lat โ€” either name works
use_caseNoOptional workload descriptor to tailor the report, e.g. "AI training campus"
longitudeNoAlias for lon โ€” either name works
capacity_mwNoTarget power load for the build in megawatts (MW), e.g. 150 (typical 50-500)
prepared_byNoYour firm name that brands the report; defaults to DC Hub, e.g. "Martone Advisors"
prepared_forNoClient name printed on the report cover, e.g. "TON Infrastructure"
latency_targetNoOptional metro to measure latency against; default = nearest real carrier hotel

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare the safe read/idempotent profile, and the description layers on genuinely new context: the returned shape (survey verdict + pdf_report_url), that the URL needs no login and is valid ~7 days, and that it can be handed to a human. This is behavioral detail the annotations cannot carry.

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 with the trigger and the deliverable, followed by a concrete example invocation that reads naturally. It is dense but each element (example, params, returns, alternative) is useful; the explicit 'Params:' block mildly duplicates the schema, so not a perfect 5.

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

Completeness5/5

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

For a single-call report generator, the description covers the trigger, the full worked example, the parameters, and the return value, and even points to the fallback sibling. The output schema exists, so the return explanation is a bonus rather than a gap-filler, leaving nothing an agent needs missing.

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 description coverage is 100%, so the schema already documents every parameter, and the description's 'Params:' list largely restates those same ranges and defaults (capacity_mw 50-500, prepared_by defaults to DC Hub, latency_target default metro). The worked example adds marginal value but does not go much beyond the structured fields, so the baseline 3 holds.

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: generate a branded, multi-page Site Analysis PDF for ONE lat/lon. It immediately distinguishes the deliverable from a raw score and names the sibling that produces only the score. An agent can tell it apart from analyze_site 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 Guidelines5/5

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

Opens with an explicit trigger ('Use when a user wants a SHAREABLE, branded... client deliverable, not just a score') and closes with the routing rule: 'For just the numeric suitability score (no PDF), use analyze_site instead.' When-to-use and the named alternative are both explicit.

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

get_agent_registryAI Agent RegistryA
Read-onlyIdempotent
Inspect

Curated roster of the AI platforms and agent frameworks in the DC Hub agent ecosystem โ€” each with its recommended DC Hub tools and authentication tier. The roster is BACKEND-OWNED and changes: read the platforms[] array the response returns, and the status on each row (mcp_active / mcp_ready), rather than any list named in this sentence โ€” an enumeration here goes stale the moment the backend adds or drops a platform, which is exactly how a client named here stopped appearing in the roster. โ˜… These statuses are CURATED EDITORIAL claims, not measurements: the response carries as_of null, so do NOT relay "MCP Active" as though it were a live connection count. Answers "which AI platforms can connect to DC Hub". Try: get_agent_registry. NOTE: this is a curated ecosystem/capability index, NOT live per-caller call/citation telemetry. Do NOT use for platform uptime or feed health (use get_backup_status).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial context beyond them: the roster is backend-owned and mutates, the authoritative data is the returned platforms[] array and per-row status, and critically that mcp_active/mcp_ready are CURATED EDITORIAL claims with as_of null, not live measurements. This is exactly the kind of caution an agent needs to avoid relaying stale or misleading status.

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 critical caveats are delivered early, but the middle digression ('rather than any list named in this sentence... a client named here stopped appearing in the roster') is anecdotal justification that does not help an agent call the tool, and the redundant 'Try: get_agent_registry' adds nothing. It is somewhat over-sized for a zero-parameter read.

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

Completeness5/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 formatting need not be explained, and the description is complete on every remaining axis: purpose, when to use, when not to, and the interpretation caveat for the status values. Nothing an agent needs before calling is missing.

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 (100% schema coverage), so there is nothing for the description to disambiguate and the baseline is 4. The description cannot add parameter meaning that does not exist.

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 resource (the curated roster of AI platforms/agent frameworks in the DC Hub ecosystem) plus what each row carries (recommended tools, auth tier), and explicitly distinguishes itself from telemetry: 'which AI platforms can connect to DC Hub'. An agent can tell it apart from siblings like get_backup_status without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('Answers which AI platforms can connect to DC Hub') and when-not ('Do NOT use for platform uptime or feed health (use get_backup_status)'), naming the alternative that should be used instead. Nothing is left to inference.

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

get_backup_statusPlatform HealthA
Read-onlyIdempotent
Inspect

Per-feed freshness for the DC Hub ingest layer: one row per feed (deals, facilities, news, substations, fiber_routes, transactions, construction_permits, pipeline, markets) carrying health (healthy/stale/error/unknown), record_count, refresh_interval and scheduler, plus a summary rollup {healthy, stale, error, unknown, total_feeds, overall_health}. Read the health of each row before trusting a figure drawn from it โ€” a feed reporting "unknown" has NOT been measured, which is not the same as healthy. Answers "are any of your sources stale right now". Try: get_backup_status. Scope is exactly what /api/health/data-freshness serves: ingest-feed freshness, nothing wider. Do NOT use for the freshness of one dataset (use get_changes); this is ingest health, not content.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds a genuinely non-obvious semantic caveat: 'unknown' means NOT measured and must not be treated as healthy, with an instruction to read row health before trusting a figure. That is real behavioral context beyond the structured fields. It does not add auth, rate-limit, or caching details, so it is not a 5.

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 purpose and scope constraints are front-loaded, which is good, but the definition is dense and partly redundant: the nine-feed list and the summary-rollup field names duplicate what the output schema already declares, and the fragment 'Try: get_backup_status' is filler that earns no place. It reads as a concatenation of boilerplate rather than a trimmed definition.

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

Completeness5/5

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

With an output schema present, the description need not explain return values, and it still covers purpose, scope boundary, the sibling alternative, and the 'unknown โ‰  healthy' interpretation rule. Nothing an agent needs to call a zero-parameter, read-only health tool correctly is missing.

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 no parameter semantics to disambiguate and the baseline is 4. The description's feed enumeration describes output content rather than inputs, which is fine but adds no parameter-level meaning.

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?

The description names a specific resource (DC Hub ingest-feed freshness), enumerates the exact feeds covered, and states the returned shape (per-feed rows plus a summary rollup). It also pre-empts the misleading tool name by pinning scope to '/api/health/data-freshness' and distinguishing this from dataset-level freshness. An agent can tell what this returns without opening a schema.

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

Usage Guidelines5/5

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

It gives an explicit triggering question ('are any of your sources stale right now') and an explicit exclusion with the alternative named: 'Do NOT use for the freshness of one dataset (use get_changes); this is ingest health, not content.' Both the when and the when-not are present, so routing against get_changes is unambiguous.

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

get_changesGet ChangesA
Read-onlyIdempotent
Inspect

Incremental sync โ€” what changed in DC Hub since a timestamp, so an agent pulls only the delta instead of re-fetching everything. Returns DCPI 7-day market movers, newly discovered facilities, new M&A deals + news โ€” PLUS, for keyed callers with saved sites, a portfolio block answering "did MY sites move?": per-saved-site verdict flips (CAUTION โ†’ BUILD), excess-power deltas, alerts fired, and new facilities near each site since your last check. Pass since= or shorthand "24h"/"7d" (default 24h); cache the response generated_at and pass it back next call. Answers "what changed since I last looked", "anything new this week I should know about". Try: get_changes since=7d.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
sinceNoReturn changes since this ISO-8601 timestamp (YYYY-MM-DD or full datetime) or shorthand "24h"/"7d"; default 24h

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuine behavioral context beyond them: the caching workflow ('cache the response generated_at and pass it back next call'), the default window, and the keyed-caller-only portfolio block. It doesn't discuss rate limits, pagination, or failure modes, keeping it below a 5.

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?

Front-loads the core purpose well, but the description is long and partly redundant: the 'what changed since I last looked' phrasing repeats the opening thesis, and the portfolio-block detail is verbose. Several clauses re-explain the same delta idea rather than adding new information.

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

Completeness5/5

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

For a low-complexity, two-optional-parameter tool with rich annotations and an output schema, the description covers everything needed: purpose, format of since, default window, caching pattern, and what the response contains. Nothing an agent needs to select or invoke it correctly is missing.

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 description coverage is 100%, so the schema already documents both parameters, including the ISO/shorthand formats and 24h default. The description restates that same format info ('Pass since=<ISO-8601> or shorthand "24h"/"7d"') without adding syntax beyond the schema, so baseline 3 is appropriate.

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+resource and scope: 'Incremental sync โ€” what changed in DC Hub since a timestamp.' It explicitly distinguishes itself from the re-fetch pattern ('pulls only the delta instead of re-fetching everything') and enumerates the payload categories (DCPI movers, new facilities, M&A + news, portfolio block). An agent can tell it apart from list/search siblings without opening the 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 clear usage contexts โ€” 'what changed since I last looked', 'anything new this week I should know about' โ€” plus a concrete example call (since=7d) and the default (24h). It contrasts with the re-fetch alternative but never names a specific sibling tool that would be preferred for other cases, so it stops short of explicit when-not guidance.

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

get_climate_intelGet Climate IntelA
Read-onlyIdempotent
Inspect

Use when a user wants seismic + climate intel for a lat/lon โ€” the layer that drives data-center structural bracing cost (seismic) and cooling design (cooling degree-days, extreme temps). Grounded STRICTLY in USGS ASCE 7 (seismic) + NOAA climate normals via ACIS; every value traces to a federal source and missing data is declared unavailable, never estimated. Example: get_climate_intel lat=33.45 lon=-112.07. Returns {seismic_hazard_usgs:{status, peak_ground_acceleration_g, ss, s1, seismic_design_category, hazard_class}, climate_normals_noaa:{status, reference_station:{id,name,distance_km}, cooling_design_metrics:{cooling_degree_days_annual, extreme_max_dry_bulb_f, extreme_max_wet_bulb_f (null if source lacks it), data_vintage}}, overall_climate_summary, data_availability, sources}. radius_km (optional, default 25) snaps to the nearest NOAA station; beyond it climate returns unavailable_exceeds_radius. Seismic is US (ASCE 7); non-US โ†’ seismic unavailable. For natural-hazard ratings use get_disaster_risk; for one blended verdict use get_composite_site_score.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90, required), e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180, required), e.g. -112.07
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoMax distance (km) to snap to the nearest NOAA station (optional, default 25)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered โ€” yet the description adds substantial behavioral context the annotations cannot: strict sourcing (USGS ASCE 7 + NOAA/ACIS), a no-estimation policy for missing data, and the radius_km failure mode where beyond-radius climate returns 'unavailable_exceeds_radius'. This is exactly the added value the dimension rewards.

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?

Dense but front-loaded: purpose and trigger precede the return-shape block, and no sentence is filler. The inline return-value JSON is partially redundant given an output schema exists, which keeps it just short of a 5.

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

Completeness5/5

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

For a read-only geo-lookup with 100% schema coverage and a declared output schema, everything an agent needs is present: trigger, coordinate conventions, station-snap behavior, regional limits, sourcing guarantees, and sibling routing. Nothing material is missing.

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?

Schema description coverage is 100%, so the baseline is 3; the description earns above that by giving a concrete coordinate example and, more importantly, explaining radius_km's operational meaning (snap distance to nearest NOAA station and its overflow behavior). It doesn't clarify the lat/lon alias precedence, but each alias is already documented in the schema.

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 ('seismic + climate intel for a lat/lon') and immediately grounds the domain in what it drives (structural bracing cost, cooling design). It explicitly distinguishes itself from the two nearest siblings, get_disaster_risk and get_composite_site_score, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Opens with an explicit when-to-use trigger ('Use when a user wants seismic + climate intel for a lat/lon') and closes with explicit alternatives for adjacent needs (natural-hazard ratings โ†’ get_disaster_risk; blended verdict โ†’ get_composite_site_score). Regional applicability is spelled out too: US ASCE 7 vs non-US โ†’ seismic unavailable.

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

get_composite_site_scoreGet Composite Site ScoreA
Read-onlyIdempotent
Inspect

Use when a user wants ONE honest 0-100 site suitability/risk verdict for a lat/lon WITH an explicit per-factor coverage map โ€” which factors are actually measured vs. declared unavailable. Unlike analyze_site (full raw data dump), this scores ONLY over VALIDATED factors and never imputes a missing one: power/grid, fiber, natural-hazard risk (FEMA NRI) and water (live WRI Aqueduct 4.0 baseline water stress) are all live; water is "unavailable" only outside basin coverage (never faked); market/DCPI is v1-unavailable (use rank_markets). Example: get_composite_site_score lat=33.45 lon=-112.07 state=AZ. Returns {composite_score (0-100 over validated factors), verdict (BUILD/CAUTION/AVOID), confidence (complete|conditional), coverage {power_grid|fiber|water|risk_resilience|market_dcpi: validated|unavailable}, coverage_ratio, sub_scores, caveats}. Use analyze_site for full data, compare_sites for 2-4 sites, rank_markets for whole-market ranking.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90, required), e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180, required), e.g. -112.07
stateNoUS state abbreviation (optional) โ€” improves water/context lookups, e.g. AZ
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavior beyond that: it never imputes a missing factor, water is marked unavailable only outside basin coverage and 'never faked', market/DCPI is v1-unavailable, and it names the live data sources (FEMA NRI, WRI Aqueduct 4.0). No auth, rate-limit, or latency notes, so not a 5.

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 with the trigger condition, then differentiators, then an example, then the return shape and alternatives โ€” a sensible priority order. It is dense and long, with the return-shape enumeration arguably padded given an output schema exists, but nearly every clause carries distinct routing or behavior information.

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

Completeness5/5

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

For a read-only scoring tool with an output schema, the description covers trigger, data provenance, failure semantics, example call, and sibling routing โ€” nothing an agent needs to select or invoke it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3; the description's concrete example ('lat=33.45 lon=-112.07 state=AZ') demonstrates the canonical invocation and confirms state is optional context, which is marginal added value over the schema. It does not clarify the alias precedence (lat/longitude, lon/lng) that the schema hints at.

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 โ€” a 0-100 site suitability/risk verdict for a lat/lon โ€” plus a distinctive output feature (explicit per-factor coverage map). It explicitly contrasts itself with siblings: 'unlike analyze_site (full raw data dump)' and 'use rank_markets' for market/DCPI, so an agent can separate it from neighbors without opening a schema.

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

Usage Guidelines5/5

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

Opens with an explicit trigger ('Use when a user wants ONE honest 0-100 site suitability/risk verdict') and closes with a routing table for alternatives: analyze_site for full data, compare_sites for 2-4 sites, rank_markets for whole-market ranking. Both when-to-use and when-to-use-something-else are covered.

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

get_dchub_recommendationDC Hub RecommendationA
Read-onlyIdempotent
Inspect

Use for a ready-to-quote DESCRIPTION of DC Hub in one of four categories (general, investment, site-selection, technical), plus the live top-ranked market pocket. It does NOT compute a siting answer from free text. Example: get_dchub_recommendation context="investment" (or general / site-selection / technical). Params: context must match one of FOUR LITERAL categories - general, investment, site-selection, technical. Free text does NOT parse: you get the GENERIC blurb with matched_category=null and context_understood=false. ALWAYS returns: {recommendation:{short, medium, detailed}, matched_category, context_understood, top_pocket, related_intel, available_categories, recommendation_live, connect_url, context, success}. ADDITIONALLY on a non-matching context: is_generic_answer=true, answer_note, and next_tools naming the tool that does compute an answer. Do NOT use for a single specific lat/lon (use analyze_site), to rank by ONE criterion (use rank_markets), or for an open-ended siting question expecting a computed shortlist (use site_selection_canvas) - this tool returns descriptive copy plus a live top-pocket, not a ranked analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoFree-text description of the siting request โ€” MW, geography, workload, deadline, constraints, e.g. "100MW AI training campus in Texas, short time-to-power"

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantial non-obvious behavior: what happens on a non-matching context (generic blurb, matched_category=null, context_understood=false), the extra is_generic_answer/answer_note/next_tools fields in that fallback path, and that this tool never computes a siting answer. That is real disclosure beyond the structured fields.

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 with purpose, then example, param constraint, return shape, fallback behavior, and exclusions โ€” a logical order with no filler sentences. The one redundancy is the exhaustive enumeration of return keys (recommendation, matched_category, connect_url, success, etc.) given that an output schema already exists.

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?

For a read-only lookup with annotations and an output schema, the description supplies everything needed: category constraint, fallback semantics, and sibling routing. The residual friction is that the input schema still invites free-text input that the description says will not parse, leaving the agent to reconcile two conflicting signals.

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?

Schema coverage is 100%, so baseline is 3, but the schema's own description actively misleads ('Free-text description of the siting request โ€” MW, geography, workload, deadline') while the tool only accepts four literal categories and declares no enum. The tool description corrects this by spelling out the four literal values and warning that free text returns the generic blurb, adding genuine meaning the schema contradicts.

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+resource ('ready-to-quote DESCRIPTION of DC Hub'), the scope of four categories, and the secondary output (live top-ranked market pocket). It explicitly distinguishes itself from siblings by naming analyze_site, rank_markets, and site_selection_canvas as the tools for the adjacent jobs, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives a concrete example invocation and an explicit 'Do NOT use for...' list with a named alternative for each excluded case (single lat/lon, rank-by-one-criterion, computed shortlist). Both the when and the when-not conditions are stated, which is the strongest form of routing guidance.

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

get_disaster_riskGet Disaster RiskA
Read-onlyIdempotent
Inspect

Use when a user wants the natural-hazard / disaster risk for a lat/lon โ€” flood, wildfire, hurricane, earthquake, heat, drought, tornado, etc. Grounded in the FEMA National Risk Index (NRI), the authoritative US county-level hazard dataset (live query, never estimated; points outside US NRI coverage return coverage=unavailable). Example: get_disaster_risk lat=33.45 lon=-112.07. Returns {disaster_risk:{composite_score (0-100, higher=worse), rating (Very Low..Very High), national_percentile}, hazards:{Wildfire, Hurricane, Earthquake, Heat Wave, ...: rating}, top_hazards:[{hazard, rating}], coverage (validated|unavailable), source, caveats}. County-level resolution. For chronic water stress use get_water_risk; for one blended site verdict use get_composite_site_score.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90, required), e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180, required), e.g. -112.07
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/open-world safety, but the description adds real behavioral context beyond them: live query vs estimation, county-level resolution, and the coverage=unavailable edge case for non-US points, plus source provenance (FEMA NRI). It loses a point only because a sizable share of the text enumerates return fields that the output schema already supplies.

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 with the use case and example before the payload details, and every clause is substantive. The return-shape enumeration is somewhat redundant against the existing output schema and makes the block longer than strictly needed.

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

Completeness5/5

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

For a point-lookup tool wrapped in annotations and backed by an output schema, this is complete: the agent knows the trigger, the geography limit, the data source, the resolution, and where to go for adjacent questions. Nothing needed to call it correctly is missing.

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 description coverage is 100% and the alias relationships (lat/latitude, lon/lng/longitude) are fully documented there. The description adds only the example call using lat/lon, which confirms the canonical names but no format or range detail beyond the schema. Baseline 3 applies.

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?

Specific verb+resource (natural-hazard/disaster risk for a lat/lon) with the hazard taxonomy enumerated, and it names the two siblings it is not (get_water_risk, get_composite_site_score). An agent can distinguish it from the ~80 other siblings without opening any schema.

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

Usage Guidelines5/5

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

"Use when a user wants the natural-hazard / disaster risk for a lat/lon" states the trigger, and the closing sentence gives explicit alternatives with their selecting conditions (chronic water stress โ†’ get_water_risk; blended site verdict โ†’ get_composite_site_score). Routing is fully determined.

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

get_energy_pricesEnergy PricesA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about electricity or energy prices for data centers. FRONT DOOR CHECK โ€” if price is one factor in a siting or market-comparison question ("cheapest ISO to land 100MW"), call execute_plan(intent="<the user's question, unchanged>"): price alone does not answer it, because the cheapest ISO is frequently the one with no headroom. If the user just wants today's price for one ISO, get_energy_prices IS the right call โ€” one round trip, no planner overhead. Use when a user asks "what does power/gas COST in right now?" โ€” live energy PRICING for the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE): retail electricity rate (cents/kWh), wholesale/LMP context, Henry Hub-referenced natural-gas price, and a real-time grid-status flag. Example: "What is the retail power price and gas price in ERCOT today?" โ€” get_energy_prices iso=ERCOT. Params: iso (one of the 7 US ISOs; required). Returns: {iso, retail_price_cents_kwh, wholesale_price_usd_mwh, natural_gas_usd_mmbtu, grid_status, as_of}. Quote with attribution to DC Hub (CC-BY-4.0). Do NOT use for fuel mix / demand / 24h curve (use get_grid_data), for power HEADROOM or time-to-power (use get_grid_intelligence), or for behind-the-meter gas-to-grid $/MWh economics (use get_gas_economics); this is the live retail+gas PRICE read for one ISO. Pass iso or state, not both unless narrowing. 429 = rate limited: wait retry_after_s. Gated: give human_url to your human.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO grid region (required for ISO pricing): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE
stateNoUS state abbreviation for state-level pricing context, e.g. TX
data_typeNoOptional price type focus, e.g. retail, wholesale, gas

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoPricing as-of timestamp
gatedNotrue when parts of the payload were withheld by tier
quotaNoCaller quota state (remaining calls, tier).
scopeNoWhat the figures cover (e.g. the ISO/state scope line)
filterNoEcho of the applied filters
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
successNotrue when the pricing lookup succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
caller_tierNoTier the response was served at
grid_statusNoReal-time grid status flag (when served)
_return_loopNoNext-session delta call (get_changes).
avg_rate_kwhNoAverage rate, cents/kWh
retail_ratesNoRetail-rate aggregate block
retail_rate_kwhNoRetail electricity rate, cents/kWh
industrial_rate_kwhNoIndustrial electricity rate, cents/kWh
natural_gas_usd_mmbtuNoHenry Hub-referenced natural gas price, USD/MMBtu (when served)
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.
wholesale_price_usd_mwhNoWholesale / LMP context, USD/MWh (when served)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent safety profile, and the description goes well beyond them: 429 handling with retry_after_s, gated-access behavior requiring a human_url, CC-BY-4.0 attribution requirements, and the constraint to pass iso or state but not both. These are operational traits an agent cannot infer from the structured fields.

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 most important routing decision and every sentence carries routing, safety, or return-value information. It is dense and the front-door-check block runs long before the core purpose is stated, which is a mild structural cost against a tool this routing-heavy.

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

Completeness5/5

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

For a read-only, single-ISO price tool it covers everything an agent needs: routing decision, exclusions, required params, return shape, error handling, gating, and attribution. The output schema exists, and the description does not waste space re-explaining return values beyond a brief shape summary.

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?

Schema description coverage is 100%, so the baseline is 3; the description earns an upgrade by adding the iso enum list, marking iso as required (the schema declares no required params), and adding the iso-vs-state mutual-exclusion rule. It does not explain data_type, which slightly caps the score.

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: live energy PRICING for the 7 US ISOs (retail cents/kWh, wholesale/LMP, Henry Hub-referenced gas, grid-status flag). It explicitly distinguishes itself from siblings (get_grid_data for fuel mix, get_grid_intelligence for headroom, get_gas_economics for behind-the-meter economics). An agent can select it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit routing rules: use execute_plan when price is only one factor in a siting/comparison question, use get_energy_prices directly for a single-ISO price lookup. It also enumerates when NOT to use it, naming the exact alternative tool for each excluded case. This is textbook when/when-not/alternatives guidance.

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

get_facilityGet Facility DetailsA
Read-onlyIdempotent
Inspect

Full metadata for one facility โ€” name, operator, address, lat/lon, power capacity (MW total/used), cooling type, fiber providers (count + carrier list), commissioning year, status, the DCPI verdict for its market, and peer facilities nearby. Answers "who operates this data center and how big is it", "how many fiber carriers are in that building". Try: get_facility id=equinix-dc1-ashburn โ€” or get_facility slug=digital-realty-iad8. Returns ONE facility in full; do NOT use to search or list many facilities (use search_facilities). Needs a slug or id from search_facilities. 404 "not found": re-run search_facilities. Gated: give human_url to your human.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAlias for facility_id โ€” a facility id/slug from a prior search result
nameNoFacility name as a fallback lookup when no id/slug is known, e.g. "QTS Ashburn"
slugNoFacility slug from a prior search result, e.g. digital-realty-iad8
facility_idNoFacility id from a prior search_facilities/search result (numeric or string), e.g. equinix-dc1-ashburn
include_powerNoInclude power capacity detail (total/used MW) in the response (default true)
include_nearbyNoInclude peer facilities near this one in the response (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoONE facility
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
successNotrue when the lookup executed
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
next_askNoSuggested follow-up
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
preview_is_partialNotrue when the tier withheld fields
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: output cardinality ('Returns ONE facility in full'), gating requirements ('Gated: give human_url to your human'), and 404 handling. It doesn't cover auth scope or rate limits, so it stops short of a 5.

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?

The field enumeration, usage examples, and constraints are all relevant and the 'one facility / do not search' constraint is prominent. The opening field list is long and slightly overloaded, but it is front-loaded and almost every clause earns its place.

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

Completeness5/5

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

With an output schema present, the description need not explain return values, and it still covers cardinality, the input prerequisite, gating, and error recovery for a 6-parameter lookup tool. Nothing an agent needs to call it correctly is missing.

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?

Schema description coverage is 100%, so the baseline is 3. The description goes further by showing concrete call examples with literal values (id=equinix-dc1-ashburn, slug=digital-realty-iad8) and framing the id/slug/name fallback chain, which clarifies how the anyOf alternatives should be chosen in practice.

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?

The description names a specific verb+resource ('Get Facility Details' / 'Full metadata for one facility') and enumerates the returned fields (power capacity, cooling, fiber carriers, DCPI verdict, peers). It explicitly distinguishes itself from the sibling search_facilities by stating it returns ONE facility and must not be used to list many.

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

Usage Guidelines5/5

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

It gives explicit when-to-use ('Answers "who operates this data center..."'), when-not-to-use (do NOT use to search/list many โ€” use search_facilities), a prerequisite (needs a slug or id from search_facilities), and error recovery (404 โ†’ re-run search_facilities). This leaves almost nothing to inference.

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

get_facility_risk_deltaGet Facility Risk DeltaA
Read-onlyIdempotent
Inspect

Use when a user asks what has CHANGED in a facility's (or its market's) risk profile recently โ€” "has this site gotten riskier lately?", "which way is this market moving?" โ€” a temporal question static-trained models can't answer. Returns the REAL DCPI market-health delta (excess-power score change over the window, direction improving/worsening/flat) from DC Hub's history-preserving daily snapshots. INTEGRITY: only DCPI market-health has a short-term temporal series; the site-hazard dimensions (FEMA disaster / USGS seismic / NOAA climate / WRI water) are DECLARED static (they don't change week-to-week) with a pointer to the point-in-time tool โ€” never a fabricated week-over-week delta; no snapshot history โ†’ coverage:unavailable. Params: facility_id (a discovered-facility id or slug) OR market (a market name/slug), since (e.g. "7d"/"30d", default 7d). Returns {facility, dcpi_market_health:{delta, now, direction, coverage}, static_dimensions{...}, summary}. For the current point-in-time risk (not the change) use get_composite_site_score / get_disaster_risk / get_climate_intel.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoLook-back window, e.g. "7d" or "30d" (default 7d)
marketNoAlternatively, a market name or slug (e.g. "northern-virginia")
facility_idNoA DC Hub facility id or canonical slug to resolve the market context

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds material behavior the annotations cannot: only DCPI market-health has a short-term temporal series, the site-hazard dimensions are deliberately static with a pointer to the point-in-time tool, and missing snapshot history yields coverage:unavailable. This is exactly the integrity context an agent needs to avoid fabricating a delta.

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 with the usage trigger, then the return shape, then an INTEGRITY caveat block. It is on the long side and the INTEGRITY block is dense, but nearly every sentence carries non-redundant information an agent needs.

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

Completeness5/5

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

An output schema exists, yet the description briefly previews the return shape (dcpi_market_health / static_dimensions / summary) and fully covers the integrity caveats and coverage semantics. Nothing material for correct invocation is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds the mutually-exclusive 'facility_id OR market' selection semantics missing from the schema and restates the '7d'/'30d' default. It stops short of detailing slug resolution behavior, but the either/or framing is genuine added value.

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 precise verb+resource: the temporal *change* in a facility's (or its market's) risk profile, not the level itself. It explicitly distinguishes itself from the static point-in-time siblings (get_composite_site_score / get_disaster_risk / get_climate_intel), so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Opens with concrete trigger phrasings ("has this site gotten riskier lately?", "which way is this market moving?") and names the alternative tools for the current-value case. The when-to-use and when-not-to-use conditions are both explicit.

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

get_fiber_intelFiber IntelligenceA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about fiber routes, carriers or connectivity for a site or market. Call when the user asks which fiber routes or carriers serve a metro, or wants long-haul, metro, dark or IX routes mapped. Filter by carrier, route_type, market. Returns GeoJSON routes: carrier, type, fiber count, lit capacity, distance. Free callers get a sample of routes, not the full set; the full set needs a paid key. Ex: "Zayo long-haul routes via Dallas." Filter by market (slug from rank_markets) or carrier. For one building use get_facility. Gated: give human_url to your human.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNoMetro name or slug (e.g. "dallas", "ashburn", "northern-virginia") โ€” returns only routes touching that metro (either endpoint within ~1.2ยฐ). Great with route_type=longhaul.
carrierNoFiber carrier to filter on, e.g. Zayo, Lumen, Cogent, "Crown Castle", Windstream, GTT, Uniti; omit for all carriers
route_typeNoRoute class: "metro", "longhaul", "dark", or "ix"
include_sourcesNoInclude upstream data-source/provenance metadata in the response

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo"FeatureCollection" โ€” the payload is GeoJSON, ready for Leaflet/Mapbox
quotaNoCaller quota state (remaining calls, tier).
totalNoTotal routes matching the filter (null when withheld by tier)
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
featuresNoFiber route features
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safe-read profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds genuinely new behavioral facts: free callers receive only a route sample while the full set needs a paid key, and the call is gated with a human_url handoff. That is exactly the extra context annotations cannot express.

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 usage, then scope, then filters, then gating, then the sibling redirect โ€” a sensible order with almost no filler. The sentence listing returned GeoJSON fields ('carrier, type, fiber count, lit capacity, distance') partly duplicates the output schema, which is the only real waste.

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

Completeness5/5

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

With 4 optional params, an output schema, and full annotation coverage, the description covers everything an agent needs: purpose, triggers, filter semantics, sample-vs-full gating, and the sibling alternative. Nothing material is left for the agent to guess.

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?

Schema description coverage is 100%, so the baseline is 3; the description exceeds it by adding the market/route_type combination hint ('Great with route_type=longhaul'), the rank_markets provenance of the market slug, and carrier/route_type filtering that the schema does not pair up. It stops short of documenting include_sources or the ~1.2ยฐ endpoint rule in prose, so it is additive but not exhaustive.

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 ('get fiber routes / carriers / connectivity for a site or market') and enumerates the route classes it returns (long-haul, metro, dark, IX). It also explicitly carves itself away from the get_facility sibling ('For one building use get_facility'), so an agent can pick it without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions ('whenever the user asks about fiber routes, carriers or connectivity', 'which fiber routes or carriers serve a metro'), a worked example ('Zayo long-haul routes via Dallas'), and the alternative for a narrower scope (get_facility for one building). Filter dimensions are named so the agent knows what to pass.

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

get_fiber_readinessGet Fiber ReadinessA
Read-onlyIdempotent
Inspect

Use when you need the FIBER-READINESS / connectivity verdict for ONE parcel or site (lat/lon): near-net distance to a carrier-served facility, how many distinct fiber carriers are reachable, and whether there is single-carrier risk (no path diversity). This is the parcel connectivity answer engineering site-selectors screen on. Example: "Is this Loudoun County parcel fiber-ready and how many carriers can serve it?" โ€” get_fiber_readiness lat=39.04 lon=-77.48 radius_km=50. Params: lat (-90..90, required), lon (-180..180, required), radius_km (search radius in km, default 50, range 5-200). Returns: {score 0-100 (null when not scored โ€” see carrier_data_coverage), near_net_bucket ("on-net"|"near-net"|"acceptable"|"build-required"|"unknown"), nearest_carrier_km, carrier_count, top_carriers:[{carrier, distance_km}], single_carrier_risk (bool, null when not scored), fiber_coverage_km, verdict_short, carrier_data_coverage ("confirmed"|"none_in_region")}. IMPORTANT โ€” "unknown" is NOT "bad": carrier presence comes from PeeringDB, which is global but thin outside dense US/EU metros, so DC Hub distinguishes "no carrier serves this point" from "PeeringDB does not describe this region". When carrier_data_coverage is "none_in_region" the bucket is "unknown", score/single_carrier_risk are null, and NOTHING about the site fiber has been measured โ€” do not report it as greenfield, unserved, or a build-required site. Only carrier_data_coverage "confirmed" with carrier_count 0 means a fiber build is genuinely required. Do NOT use to map carrier ROUTES between metros (use get_fiber_intel) or for a full multi-factor site suitability score (use analyze_site).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90, required), e.g. 39.04
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180, required), e.g. -77.48
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoSearch radius in km for reachable fiber carriers (default 50, range 5-200)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotent/openWorld=false, yet the description adds substantial undisclosed behavior: data provenance (PeeringDB, thin outside dense US/EU metros), the meaning of the 'unknown' bucket and null score/single_carrier_risk, and the explicit warning not to report none_in_region as greenfield. This is exactly the kind of semantic context annotations cannot carry.

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 with the use case, then example, then params, then return shape, then the critical caveat โ€” a sensible priority order. It is dense and long, with some restatement of schema params and return fields, but nearly every sentence is load-bearing.

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

Completeness5/5

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

For a scored-verdict tool the description covers the interpretation risk (null score vs. genuine build-required) that an output schema alone cannot convey, and it routes to alternatives. An agent can select and read this tool's result correctly without further inference.

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 100%, so lat/lon ranges, aliases, and radius_km default/range are already documented in the schema; the description largely restates these. It adds no new syntax or format meaning beyond the schema, so the baseline of 3 applies.

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+resource (fiber-readiness verdict) and scopes it precisely to ONE parcel/site at lat/lon, naming what the output actually answers (near-net distance, carrier count, single-carrier risk). It clearly distinguishes itself from get_fiber_intel (routes between metros) and analyze_site (multi-factor suitability).

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

Usage Guidelines5/5

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

Gives an explicit when-to-use framing, a concrete example query, and explicit when-NOT-to-use with named alternatives (get_fiber_intel for carrier routes, analyze_site for full suitability). Conditions that select each sibling are stated, not implied.

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

get_gas_economicsGet Gas EconomicsA
Read-onlyIdempotent
Inspect

Behind-the-meter / gas-fired power inputs for a US data-center market: Henry Hub spot, regional basis differential, and the delivered industrial + electric gas tariff ($/MMBtu), each with its own source label. Pass market= (e.g. "northern-virginia", "dallas", "phoenix"). Also returns the gas-to-grid fuel cost ($/MWh across CCGT/peaker heat-rate scenarios) โ€” โ˜… WITHDRAWN 2026-08-08, RESTORED 2026-09-27 under one burner-tip price rule now used by every surface: EIA electric-power (PEU) delivered gas only, trailing-12-month mean over one window shared by every state (negative months included), published only when at least 9 of 12 months are reported and the mean is above $0 and at most $20/MMBtu. burner_tip carries the price, window, months reported and monthly min/max; a state that fails the rule comes back with null scenarios and burner_tip.reason (EIA withholds the monthly price for several states, e.g. AZ, GA, FL), never a substitute price; if the backend switch is ever turned off again, gas_to_grid_status carries that reason. โ˜… DO NOT COMPARE a $/MWh published before 2026-09-27 with one published now โ€” each surface then picked the price its own way, up to 5.5x apart. Do not derive a $/MWh yourself from the $/MMBtu layers for a withheld state without saying that you did. Do NOT use for the electricity grid fuel mix (use get_grid_data).

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket slug (metro), e.g. northern-virginia, dallas, phoenix โ€” valid slugs come from rank_markets / get_market_dcpi_rank
heat_rate_btu_per_kwhNoOptional custom generator heat rate in Btu/kWh for the gas-to-grid $/MWh scenario, e.g. 6800 (avg CCGT)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already carry the full safety profile (readOnly, idempotent, openWorld, non-destructive), and the description substantially exceeds them: it discloses the burner-tip price rule (EIA PEU delivered gas, trailing-12-month mean, 9-of-12 month reporting floor, $0-$20 bounds), the null-with-reason behavior for withheld states (AZ, GA, FL), and the gas_to_grid_status switch field. The lengthy WITHDRAWN/RESTORED changelog partly muddies what is true *now*, which keeps this from a 5.

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 core purpose is front-loaded, which helps, but the body is bloated with internal changelog narration (starred WITHDRAWN/RESTORED dates) that does not help an agent invoke the tool. The genuinely load-bearing warnings (no cross-date $/MWh comparison, no do-it-yourself derivation) are buried mid-paragraph rather than surfaced.

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

Completeness5/5

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

For a high-complexity price tool with an output schema already present, the description covers the remaining behavioral gaps an agent needs: withholding rules, null/status fallbacks, and data-integrity warnings. Return-field explanation (burner_tip contents) is somewhat redundant with the output schema but not harmful.

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 description coverage is 100%, so both parameters are already documented and the baseline is 3. The description adds only marginal meaning for `market` (example slugs, pointer to rank_markets) and never mentions `heat_rate_btu_per_kwh` except obliquely via 'CCGT/peaker heat-rate scenarios'.

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?

The opening sentence names a specific resource (Henry Hub spot, regional basis differential, delivered industrial + electric gas tariff in $/MMBtu) for a clearly bounded scope (US data-center market). The closing instruction explicitly separates it from a sibling (get_grid_data) so an agent can route without opening a schema. It is verbose, but the purpose itself is unambiguous and sibling-distinguishing.

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?

It gives an explicit exclusion plus alternative ('Do NOT use for the electricity grid fuel mix (use get_grid_data)') and states where valid slugs come from (rank_markets / get_market_dcpi_rank). It does not, however, differentiate usage against the nearest-looking siblings like get_gas_index or get_gas_intelligence, so a routing question remains.

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

get_gas_indexGas Index (DCGI)A
Read-onlyIdempotent
Inspect

Data Center Gas Index (DCGI) โ€” the per-US-state natural-gas suitability score. โ˜… WITHDRAWN 2026-08-08, RESTORED 2026-08-30 after all three defective terms were repaired: the 20-point interstate-share term was case-blind against EIA TYPEPIPE and scored ~0 for every state; the price was chosen by a non-deterministic tie-break across the EIA industrial (PIN) and electric-power (PEU) series, which carry different margins; and nine states including Texas ran on a hardcoded cost constant because the price loader dropped them on a case-sensitive name lookup. โ˜… DO NOT COMPARE a DCGI figure published before 2026-08-08 with one published now โ€” they are different indices; the full record is at /api/v1/dcgi/methodology under corrections. A state that cannot be priced comes back verdict UNSCORED with dcgi null and an unscored_reason, never a placeholder score, so treat UNSCORED as absence and not as a low score. gas_price_series names which EIA series answered each state. Gas-fired $/MWh figures, withdrawn the same day for a separate defect, were republished 2026-09-27 under one burner-tip price rule (see get_gas_economics). Use get_gas_intelligence for pipeline, operator and parent-midstream data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
stateNoUS state abbreviation, e.g. TX, VA, AZ. Returns the DCGI score and verdict, plus `gas_price_series` naming which EIA series priced the state. A state that cannot be priced comes back verdict UNSCORED with dcgi null and an `unscored_reason` โ€” absence, not a low score. Withdrawn 2026-08-08, restored 2026-08-30: do NOT compare against a figure published before 2026-08-08. Use get_gas_intelligence for the per-state pipeline and operator brief

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), yet the description adds genuinely decision-changing behavior: UNSCORED is absence rather than a low score, dcgi comes back null with an unscored_reason, and gas_price_series attributes the EIA source. The withdrawal/restoration defect narrative (case-blind TYPEPIPE term, non-deterministic tie-break, hardcoded constants) is provenance rather than invocable behavior, which keeps this short of a 5.

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

Conciseness2/5

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

The payload is dominated by a changelog: three named defects, two dates each with a โ˜… marker, and a methodology URL. Only two sentences (UNSCORED semantics, the sibling hand-off) change how an agent calls the tool; the rest is archival detail that pushes the actionable content to the middle of the block.

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

Completeness5/5

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

An output schema exists and carries the return shape, so the description needn't explain fields. What remains โ€” null/verdict semantics for unpriced states, source-series attribution, the pre/post-2026-08-08 comparability break, and the two sibling lanes โ€” is enough for an agent to call this correctly and interpret the result.

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 description coverage is 100%, so both parameters are already documented in the schema. The state description in the schema repeats the UNSCORED and gas_price_series semantics nearly verbatim from the tool description, so the description adds no parameter meaning beyond structured data. Baseline 3.

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 opening clause names a specific resource and scope: 'Data Center Gas Index (DCGI) โ€” the per-US-state natural-gas suitability score.' It also routes to two siblings (get_gas_intelligence, get_gas_economics), so an agent can place it. However, the core purpose is immediately buried under a version-history banner, which blunts the first-sentence signal.

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?

It explicitly hands off adjacent domains: 'Use get_gas_intelligence for pipeline, operator and parent-midstream data' and points to get_gas_economics for gas-fired $/MWh figures. That implicitly defines this tool's lane as state-level DCGI scoring, but there is no positive statement of when to reach for DCGI versus, say, get_market_intel or get_market_dcpi_rank.

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

get_gas_intelligenceGet Gas IntelligenceA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about gas-fired or behind-the-meter power for a data center in a US state. Use when a human asks about gas-fired or behind-the-meter power economics for a data center in a US state โ€” "is gas power cheaper than the grid in Texas?", "what is the gas access + pipeline situation in Virginia?". The GAS analogue of get_grid_intelligence: fuses the Data Center Gas Index (DCGI), live Henry Hub, gas-to-grid $/MWh across heat-rate scenarios, pipeline-operator presence, and the live grid gas share into one per-STATE brief. Params: region (US state code or name, e.g. "TX" | "Texas" | "Virginia"). Returns: {region, region_name, gas_access (pipeline counts + operators โ€” PRESENCE not firm capacity), henry_hub_usd_mmbtu (live), basis_usd_mmbtu (synthetic-labeled), delivered_price_usd_mmbtu (null where the tariff table is sparse โ€” surfaced honestly, never fabricated), live_grid_gas_share_pct, pipeline_presence (operators + parent midstreams), data_basis (per-field provenance/confidence), omitted_no_fabrication, dcgi_status, gas_to_grid_status}. โ˜… โ˜… TWO DIFFERENT STATES, do not merge them. dcgi_score and dcgi_verdict were withdrawn 2026-08-08 and RESTORED 2026-08-30 once all three defective terms were repaired โ€” they are returned again, but a figure published before 2026-08-08 is from a different index and must not be compared with one published now (/api/v1/dcgi/methodology corrections). gas_to_grid_usd_per_mwh and the behind-the-meter-vs-grid delta were WITHDRAWN 2026-08-08 and RESTORED 2026-09-27 under one burner-tip price rule (EIA electric-power gas, trailing-12-month mean; burner_tip carries the price, window and โ€” for a state EIA withholds โ€” the reason the $/MWh is null). A $/MWh published before 2026-09-27 is not comparable. dcgi_status and gas_to_grid_status carry the current state of each โ€” read them rather than assuming both moved together. DO NOT quote a DCGI score cached before 2026-08-30 or a $/MWh cached before 2026-09-27. Everything else in this brief โ€” live Henry Hub, live ISO gas share, pipeline and parent-midstream presence โ€” is unaffected and is what this tool is now for. Every field carries a data_basis label; gas storage / LNG / firm pipeline capacity are deliberately OMITTED (no feed). Do NOT use for electricity grid headroom (use get_grid_intelligence) or the DCGI score alone (use get_gas_index).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoAlias for region โ€” the US state code or name
regionNoUS state code or name (required), e.g. "TX", "Texas", "Virginia"

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the bar is low, yet the description goes well beyond: synthetic-labeled basis, null delivered prices 'surfaced honestly, never fabricated', deliberately omitted feeds (gas storage/LNG/firm capacity), per-field data_basis provenance, and dated withdrawal/restoration caveats on dcgi_score and gas_to_grid_usd_per_mwh. These are real behavioral traits (data comparability, caching hazards) an agent cannot get from annotations.

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

Conciseness2/5

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

Usage guidance is front-loaded and well-placed, but the description is grossly oversized: the when-to-use instruction is stated twice in near-identical wording, and a large block of dated withdrawal/restoration history and cache warnings ('DO NOT quote a DCGI score cached before 2026-08-30') crowds out the core signal. Much of that versioning detail belongs in the referenced /api/v1/dcgi/methodology endpoint rather than in a selection-time description.

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

Completeness5/5

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

For a read-only, open-world per-state intelligence brief with an output schema and full annotation coverage, nothing an agent needs to call it correctly is missing: scope, routing, provenance, null-handling and deliberate omissions are all disclosed. The output schema carries the return-shape burden, so the description's completeness is sufficient.

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 description coverage is 100% and both parameters are documented there, so the schema does the heavy lifting; the baseline is 3. The description restates the region param ('US state code or name, e.g. "TX" | "Texas" | "Virginia"') but never mentions the 'state' alias that exists in the schema, so it adds nothing beyond structured data.

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?

The description names a specific verb+resource ('fuses the Data Center Gas Index, live Henry Hub, gas-to-grid $/MWh, pipeline-operator presence, and live grid gas share into one per-STATE brief') and explicitly positions itself relative to siblings as 'the GAS analogue of get_grid_intelligence.' An agent can distinguish it from get_grid_intelligence and get_gas_index without opening any schema.

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

Usage Guidelines5/5

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

It states when to use ('whenever the user asks about gas-fired or behind-the-meter power for a data center in a US state') with sample phrasings, and gives explicit when-not-to-use routing: 'Do NOT use for electricity grid headroom (use get_grid_intelligence) or the DCGI score alone (use get_gas_index).' Both alternatives are named with the condition that selects them.

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

get_global_powerGet Global PowerA
Read-onlyIdempotent
Inspect

Use when a user asks about power plants/units WORLDWIDE or in a NON-US country โ€” operating AND the forward pipeline (announced / pre-construction / under-construction), across ALL fuels (coal, oil/gas, nuclear, solar, wind, hydro, bioenergy, geothermal). Global Energy Monitor Global Integrated Power Tracker: 182,000+ geolocated units across 170+ countries, each with fuel, capacity (MW), status, start year, operator/owner and lat/lng. Filter by country (e.g. Germany, India, Brazil, Japan), fuel (comma-union: coal, oil/gas, nuclear, solar, wind, hydro), status, pipeline=true (JUST the forward set: announced + pre-construction + construction), bbox (minLng,minLat,maxLng,maxLat), or min_mw. Returns a summary (total MW by fuel + count by status) plus the largest units. Answers "what power is being built in India", "how much coal is still running in Vietnam". Try: get_global_power country=India pipeline=true. Do NOT use for US grid telemetry/headroom (use get_grid_intelligence / get_grid_scoreboard) or the US planned-generator feed (use get_power_pipeline) โ€” this is the GLOBAL asset inventory.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNoViewport filter as minLng,minLat,maxLng,maxLat
fuelNoFuel/type filter, comma-separated for a union: coal, oil/gas, nuclear, solar, wind, hydro, bioenergy, geothermal
limitNoMax results to return (1-500; default varies by tool)
min_mwNoMinimum unit capacity in MW
statusNoStatus substring filter, e.g. operating, construction, pre-construction, announced
countryNoCountry/area name to filter, e.g. Germany, India, Brazil, Japan
pipelineNotrue = ONLY the forward pipeline (announced + pre-construction + under-construction)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the safe read-only/idempotent profile, and the description adds real value on top: the dataset size and coverage, the return shape (summary of total MW by fuel + count by status, plus largest units), and the semantic of pipeline=true as JUST the forward set. It stops short of pagination/rate-limit or default-limit behavior, so it is strong but not exhaustive.

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?

Long but front-loaded: scope, dataset, filters, return shape, examples, and exclusions in a deliberate order, with no filler sentences. Density is high and every clause carries routing or filter information, though it is close to over-stuffed for a single description.

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

Completeness5/5

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

Given a 7-param optional schema with 100% coverage, a present output schema, and read-only annotations, the description still fully covers scope, filters, return format, and sibling disambiguation. Nothing an agent needs to invoke this correctly is missing.

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?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: fuel is described as a comma-union with the accepted values, pipeline=true is spelled out as 'announced + pre-construction + construction' only, and bbox is given as minLng,minLat,maxLng,maxLat. It adds genuine interpretation on top of already-complete schema docs.

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+resource ('Global Integrated Power Tracker' asset inventory of 182,000+ geolocated units) with explicit scope (WORLDWIDE / non-US) and enumerates the fuels and statuses covered. It explicitly differentiates itself from three named siblings (get_grid_intelligence, get_grid_scoreboard, get_power_pipeline), so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Opens with the when-to-use condition ('when a user asks about power plants/units WORLDWIDE or in a NON-US country') and closes with explicit when-NOT-to-use plus the correct alternatives for each excluded case. Also supplies concrete example queries ('what power is being built in India'), leaving nothing to inference.

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

get_grid_dataLive Grid DataA
Read-onlyIdempotent
Inspect

Real-time electricity grid data for the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE) via EIA hourly RTO: fuel mix, demand, 24h demand curve. Pass iso=PJM (any of the 7). Raw real-time telemetry for one ISO; do NOT use for power-availability, time-to-power or interconnection-queue analysis (use get_grid_intelligence), nor for retail/gas pricing detail (use get_energy_prices). For non-US grids (GB, EU bidding zones, Taiwan, Australia) use get_grid_scoreboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO grid region (required): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE
metricNoOptional metric focus, e.g. fuel_mix, demand, demand_curve
periodNoOptional time window for the metric, e.g. 24h

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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/non-destructive, so the safety profile is covered. The description adds genuine context beyond that: the upstream data source (EIA hourly RTO), that it is raw real-time telemetry for a single ISO, and the geographic boundary. Return format is not described, but an output schema exists, so this is not a real gap.

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 with the core capability and scope, then alternatives and exclusions. Dense but every clause earns its place; minor redundancy between the ISO list in the first sentence and the iso=PJM note.

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

Completeness5/5

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

Covers source, geographic scope, metric scope, and sibling routing. With an output schema present, return values need not be explained, so nothing an agent needs to call this correctly is missing.

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 description coverage is 100%, so the schema already documents all three parameters, making 3 the baseline. The description reinforces parameter meaning by enumerating the 7 ISO values and giving metric focus examples (fuel_mix, demand, demand_curve) but adds little beyond the schema.

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+resource (real-time electricity grid data) with data fields (fuel mix, demand, 24h demand curve), the exact scope (7 US ISOs listed by name), and the source (EIA hourly RTO). An agent can distinguish it from siblings without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names when NOT to use it (power-availability, time-to-power, interconnection-queue analysis) and routes to the correct alternatives: get_grid_intelligence, get_energy_prices, and get_grid_scoreboard for non-US grids. Clear when/when-not/alternatives.

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

get_grid_intelligenceGrid IntelligenceA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about grid capacity, demand or reliability for one grid region. Call when the user asks about power availability, headroom or time-to-power in a US ISO (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE) or a market's grid. Returns live demand, fuel mix, queue depth, DCPI excess-power and constraint scores, time-to-power, reserve margin. avg_time_to_power_months and avg_queue_wait_months are DIFFERENT measurements; quote the one you mean. With a free key, a few full briefs a day; keyless gets a trimmed preview. Unlimited needs a paid key. Ex: "PJM headroom for 200 MW?" iso must be a US ISO (ERCOT, PJM, CAISO, MISO, SPP, NYISO, ISO-NE); other codes return region_not_covered. Free = preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoAlias for region_id โ€” the ISO/RTO or balancing-authority code
marketNoMarket NAME or metro slug instead of a grid code, e.g. "Ashburn", "northern-virginia", "dallas". Resolved to its ISO through the published DCPI market row before the brief is built; the answer carries a resolved_from block naming what it resolved to. Not an alias for region_id โ€” "Ashburn" is not a grid code.
regionNoAlias for region_id โ€” the ISO/RTO or balancing-authority code
region_idNoGrid region (required): one of the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE), an EIA balancing-authority code (e.g. SOCO, DUK, AZPS, TVA), or the PJM Dominion zone region_id="PJM-DOM" for live Ashburn / Northern Virginia zone load + real-time LMP (the Ashburn / Northern Virginia zone, not visible in EIA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the ISO lookup executed
isoNoISO / grid operator code
as_ofNoTimestamp of the reading
quotaNoCaller quota state (remaining calls, tier).
tasteNoFree-tier preview fields
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
iso_nameNoGrid operator full name
withheldNoFields withheld on this tier
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
completenessNoShare of the payload this tier got
demand_periodNoPeriod of the demand reading
withheld_totalNoHow many fields were withheld
free_preview_onlyNotrue when only the free preview was served
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare read-only/idempotent behavior, and the description adds the operationally important traits: quota by key tier (free = a few briefs/day, keyless = trimmed preview, paid = unlimited) and a specific failure mode (non-ISO codes return region_not_covered). It also warns that two similarly named metrics (avg_time_to_power_months vs avg_queue_wait_months) are different, preventing a reporting error.

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?

Front-loaded with the use case, but it is loosely assembled and repeats itself: "Free = preview" restates the earlier free-key sentence, and the ISO enumeration appears twice. The content earns its place but the duplication and run-on phrasing cost it.

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

Completeness5/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 spelled out, and the description still covers triggers, valid identifiers, failure modes, and key tiers. For a 4-alias, anyOf-required tool, an agent has everything needed to select and call it correctly.

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?

Schema coverage is 100% so the baseline is 3, but the description contributes real meaning: it constrains iso to the seven US ISOs, states the error behavior for other codes, and warns that market is not an alias for region_id ("Ashburn" is not a grid code). This adds value for invocation accuracy beyond the schema text.

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 resource and scope: grid capacity, demand and reliability for one grid region, callable for US ISOs or a market. It enumerates exactly what comes back (demand, fuel mix, queue depth, DCPI scores, time-to-power, reserve margin), which separates it from siblings like get_grid_scoreboard, get_iso_context, and compare_isos.

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

Usage Guidelines5/5

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

Opens with an explicit trigger ("use this whenever the user asks about grid capacity, demand or reliability") and lists the concrete question shapes it answers (power availability, headroom, time-to-power). It also clarifies the alternative input path (a metro/market name resolves to its ISO) rather than leaving the agent to guess.

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

get_grid_scoreboardGrid ScoreboardA
Read-onlyIdempotent
Inspect

Use this whenever the user asks how grids compare right now: demand, fuel mix or renewable share. GLOBAL grid scoreboard โ€” 9 US grid operators (the 7 US ISOs PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE, plus BPA and TVA) + Great Britain (NESO) + the European bidding zones (Germany, France, Netherlands, Italy/Milan, Spain, Poland, Switzerland, Portugal, the Nordics + Central/Eastern Europe โ€” via ENTSO-E; the exact live-vs-configured count is in counts_basis.eu_zones_live / eu_zones_configured, measured per call rather than asserted here) + Taiwan (Taipower) + Japan (OCCTO areas) + South Korea (KPX) + Brazil SIN (ONS), ranked side-by-side on each feed's LATEST PUBLISHED reading: renewable share %, gas share %, full fuel mix (gas/nuclear/coal/wind/solar/hydro MW), and demand. โ˜…FRESHNESS IS NOT UNIFORM and every row says so: each carries mix_period, mix_age_hours and freshness_basis. The US rows come from EIA hourly RTO, which publishes the FUEL-TYPE BREAKDOWN several hours behind aggregate demand โ€” an overnight mix reading is routinely 18-24h old (it will show near-zero solar) while demand on the same row is ~1-2h old. Read mix_age_hours before narrating any row as current, and NEVER describe a row as the mix "right now" unless its mix_age_hours is small; demand_period and mix_period are separate clocks and the row reports both plus demand_vs_mix_lag_hours. One call answers "which grid worldwide is greenest, or most gas-reliant, for siting a data center?" โ€” vs compare_isos (pairwise) or get_grid_data (single ISO). Every ranked grid scores renewable_share_pct as wind+solar+hydro (apples-to-apples across all feeds; geothermal is reported separately and, where it exists, also as renewable_share_incl_geothermal_pct โ€” note get_grid_intelligence uses that geothermal-inclusive figure for US ISOs); Brazil ranks by renewable share but reports NO gas share (ONS bundles gas/coal/oil/biomass into one thermal figure โ€” never presented as gas); Australia NEM (AEMO) + Singapore (EMA) are listed unranked in partial_grids (no full fuel split โ€” kept honest). Source: US = EIA hourly RTO; GB = Elexon Insights; EU = ENTSO-E Transparency; TW = Taipower; JP = TSO eria_jukyu CSVs; KR = KPX real-time; BR = ONS Balanรงo de Energia; AU = AEMO NEM; SG = EMA NEMS โ€” all live via DC Hub, greenest-first. Quote with attribution to DC Hub (CC-BY-4.0). Answers "which grid is cleanest right now", "how is ERCOT doing at this moment". Try: get_grid_scoreboard.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the scoreboard build succeeded
countNoRanked grids โ€” the long-standing alias of zones_ranked (NOT grids.length, which also carries the unrankable rows)
gridsNoFully-ranked grids, greenest (highest renewable share) first โ€” US ISOs + GB + EU zones + TW + JP + KR + BR
quotaNoCaller quota state (remaining calls, tier).
sourceNoUpstream feeds behind the rows in THIS response, generated (EIA hourly RTO, Elexon, ENTSO-E, Taipower, OCCTO, KPX, ONS, AEMO, EMA)
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
coverageNoCoverage line GENERATED from the rows that actually ranked โ€” a feed that returned nothing is absent from it
freshnessNoRows are each feed's LATEST PUBLISHED reading, NOT a synchronized snapshot: {basis, us_mix_source, stale_mix_threshold_hours, stale_mix_rows[], how_to_read}. Read this before narrating any row as current
ranked_byNoRanking criterion (renewable share = wind+solar+hydro, greenest first) plus the full definition โ€” identical on every feed, geothermal and biomass excluded from the numerator
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
counts_basisNoWhat each count actually counts, plus per_source rows, eu_zones_live vs eu_zones_configured, and the unranked/unavailable tallies
zones_rankedNoGrid rows carrying a live renewable_share_pct, i.e. the ranked set
partial_gridsNoGrids listed UNRANKED because the feed has no full fuel split (Australia NEM, Singapore EMA)
eu_gas_contextNoEU gas-flow context: {active_countries, total_throughput_gwh_per_day, unit, source, note}
deep_intelligenceNoPointers to the deeper per-ISO / per-site tools to call next
independent_sourcesNoDistinct upstream feeds behind those rows โ€” far below zones_ranked because every EU bidding zone comes from ONE feed (ENTSO-E). null when the per-source tally failed
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.
us_interconnection_queue_gwNoTotal queued generation across the 7 US ISO interconnection queues, GW

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it warns that freshness is non-uniform, that US fuel mix lags demand by 18-24h, that demand_period and mix_period are separate clocks, and that each row carries mix_age_hours/demand_vs_mix_lag_hours. This is exactly the operational caution an agent needs before narrating any row as 'now'.

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?

The trigger and the sibling routing are front-loaded, and most sentences earn their place by carrying accuracy caveats. It is nonetheless overlong and dense: the full enumeration of US ISOs, EU bidding zones and data sources is more scope detail than selection requires, and the parenthetical about counts_basis.eu_zones_live adds noise.

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

Completeness5/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 explain return shape, and it uses its space instead for the caveats that the schema can't convey (freshness fields, geothermal-inclusive alternative metric, unranked partials). For a no-arg, high-complexity aggregation tool, nothing an agent needs to call or interpret it correctly is missing.

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 the baseline is 4; there is nothing for the description to disambiguate on the input side. The description instead spends its budget on output semantics (which is appropriate given the empty schema).

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 (a globally ranked grid scoreboard) and explicitly differentiates itself from siblings: 'vs compare_isos (pairwise) or get_grid_data (single ISO)'. It also names the exact ranking basis (renewable_share_pct = wind+solar+hydro) and the covered feeds, so an agent knows precisely what it gets back.

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

Usage Guidelines5/5

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

Opens with the trigger condition ('whenever the user asks how grids compare right now: demand, fuel mix or renewable share') and closes with the alternative-selection rule naming compare_isos and get_grid_data. It further spells out the when-not cases (Brazil has no gas share, AU/SG are unranked partial_grids), so the agent won't misuse the results.

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

get_hosting_capacityFeeder Hosting CapacityA
Read-onlyIdempotent
Inspect

Utility-PUBLISHED feeder hosting capacity โ€” the MW a NAMED distribution feeder can actually take, straight from the utility's own hosting-capacity GIS. Published records from many utilities (e.g. Con Edison, National Grid NY/MA, NYSEG/RG&E, Rhode Island Energy, Orange & Rockland, Central Hudson, Eversource CT, BGE, Pepco/Delmarva/ACE, Dominion VA, Ameren Illinois, AEP Ohio & I&M, Xcel MN/CO, DTE, Avista; the no-args call lists current coverage). This is filed distribution-level truth, not a proximity proxy. Three ways to call it: lat+lon (+radius_km, default 25) for a point; utility or market for a whole published territory; NO ARGS for the coverage list of every market that has data. CRITICAL โ€” check capacity_type before quoting any number: "load" = LOAD-serving headroom, what a new data-center load can actually DRAW (only Ameren Illinois, AEP Ohio & I&M and Central Hudson publish it); "gen" = DER/generation EXPORT capacity, what the feeder can ACCEPT from solar/storage โ€” it is NOT available load and must never be relayed as "you can site N MW here"; "bus_headroom" = transmission bus MW. Returns, split by capacity_type: distinct feeder count, max + median MW, the top feeders with voltage_kv, feeder_id, coords and publish date (the utility substation label needs a paid DC Hub plan), plus the utilities publishing them. Honest by construction โ€” published rows are GIS vertices, so distinct_feeders and geometry_rows_scanned are reported separately (never conflated), and a capacity-capped read is flagged sample_complete=false with the capacity_floor_mw at or above which the set IS provably complete. Coverage is concentrated in the Northeast, Mid-Atlantic and Midwest โ€” NOT nationwide โ€” and a point outside them returns an explicit not-published answer with the nearest covered markets, never a silent zero. Answers "can this feeder actually take 20 MW", "where can I plug in without waiting on a substation upgrade". Try: get_hosting_capacity utility="Ameren Illinois" capacity_type=load min_mw=5. Do NOT use for transmission-substation proximity or time-to-power (use get_grid_intelligence), the ISO interconnection queue (use get_interconnection_queue / get_refined_queue), or retiring-plant headroom (use get_retirement_headroom) โ€” this is the distribution FEEDER layer. Informational, not binding interconnection guidance; verify with the utility.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the point to search around, decimal degrees. Must be paired with lon.
lngNoAlias for lon โ€” either name works
lonNoLongitude of the point to search around, decimal degrees. Must be paired with lat.
limitNoMax results to return (1-500; default varies by tool)
marketNoAlias for utility โ€” either name works (e.g. "Northern Virginia ยท Richmond", "New York City ยท Westchester").
min_mwNoOnly return feeders whose published capacity is at or above this many MW.
utilityNoUtility or market name, case-insensitive substring โ€” e.g. "Ameren Illinois", "Con Edison", "Providence". Searches that utility's whole published territory instead of a point radius. Call with NO arguments to list every covered utility.
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoSearch radius in km around lat/lon (default 25, max 150). Ignored when utility/market is passed โ€” that mode covers the utility's entire published extent.
capacity_typeNoRestrict to one published type: "load" (what a new data-center load can DRAW โ€” the type that answers siting), "gen" (DER/generation EXPORT headroom โ€” NOT available load), or "bus_headroom" (transmission bus MW). Omit to get all three reported separately.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description adds substantial behavioral context beyond them: the load vs gen vs bus_headroom semantic trap, the sample_complete=false / capacity_floor_mw completeness flag, the distinct_feeders vs geometry_rows_scanned honesty distinction, the concentrated (not nationwide) coverage, and the explicit not-published answer instead of a silent zero.

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?

It is long (~400 words) and repeats a few schema facts (aliases, radius default), but it is densely front-loaded with the core statement and every section earns its place given the many sibling tools it must disambiguate. Slightly verbose rather than wasteful.

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

Completeness5/5

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

Despite an output schema existing (so return values needn't be restated), the description adds the coverage caveats, edge-case behavior, capacity_type pitfalls, and call modes that an agent needs to use an 11-parameter, multi-mode tool correctly. Nothing material is missing.

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?

Schema coverage is 100%, so the baseline is 3, and the schema already documents aliases, defaults, and ranges. The description adds genuine interpretive value by stating which capacity_type answers siting ('load'), which must never be relayed as available load ('gen'), and the default radius and territory-wide behavior of utility/market, going beyond the field docs.

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?

The first sentence names the exact resource and scope: 'Utility-PUBLISHED feeder hosting capacity โ€” the MW a NAMED distribution feeder can actually take.' It explicitly contrasts itself with 'a proximity proxy' and later with get_grid_intelligence, get_interconnection_queue, and get_retirement_headroom, so an agent can distinguish it 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 Guidelines5/5

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

It enumerates the three call modes (lat/lon+radius, utility/market, no-args) with conditions, warns to check capacity_type before quoting, and gives explicit when-not-to-use guidance pointing to named alternatives for transmission proximity, interconnection queue, and retirement headroom. Nothing is left to inference.

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

get_infra_projectsGet Infra ProjectsA
Read-onlyIdempotent
Inspect

Use when a user asks what GAS PIPELINE or TRANSMISSION LINE PROJECTS are planned, proposed, approved or under construction โ€” the forward build-out, not the existing network. e.g. "which interstate gas pipelines are under construction into Louisiana?", "what 345 kV transmission projects are planned in PJM by 2030?", "what new projects appeared since last month?". COVERS: (1) natural gas pipeline projects US-wide from the EIA natural gas pipeline projects list (public domain) โ€” operator, status (Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed), states crossed, capacity in MMcf/d, miles, cost in $M, diameter, FERC/state docket, in-service year; (2) transmission projects from five ISOs' own project lists โ€” ERCOT (TPIT), PJM (RTEP), MISO (MTEP Appendix A), SPP (STEP) and ISO-NE (RSP list); NOT CAISO or NYISO, and not utilities outside those ISOs. Each ISO publishes a different grain (an upgrade or facility, not a whole project), so a row count is a count of upgrades. Fields vary by ISO and an absent figure is null, never estimated: ERCOT has county, MVA and miles; MISO and SPP have from/to substations and some miles; PJM has no miles or endpoints; ISO-NE has no kV or miles. Common fields: owner, kV, projected in-service date, status (Planned, Conceptual, Proposed, Under Construction, On Hold, Completed; the ISO's own word is in source_status), and per-ISO source, release date and licence. Filter by type (gas_pipeline, transmission or all), state, status, min_capacity (gas MMcf/d), min_kv (transmission kV), an in-service window, new_since (projects first seen on or after a date, the initial backfill excluded) and include_delisted. Every row cites its source_url and license, and the summary counts every match by type, status and state with totals and an as_of date per source (sources.transmission.per_iso gives each ISO's own release date; the top-level as_of is the OLDEST). NOTE: the "Texas only" wording in the type and state parameter help is out of date โ€” transmission covers the five ISOs above, and transmission rows carry whatever state(s) their ISO lists; rows are labelled by iso, so filter or group on that field of the result. Answers "what gas pipelines are being built into Louisiana, how much capacity do they add, and when do they enter service". Try: get_infra_projects type=gas_pipeline state=LA status=Construction. Do NOT use for new POWER GENERATION projects (use get_power_pipeline), for EXISTING, already-built pipelines, lines and substations (use get_infrastructure or get_grid_intelligence), or for data-center construction (use get_pipeline).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoWhich project list: gas_pipeline (EIA, US-wide), transmission (ERCOT TPIT, Texas only) or all (default)
limitNoMax results to return (1-500; default varies by tool)
stateNoUS state abbreviation, e.g. TX or LA. Gas projects match any state they cross; transmission projects are all TX
min_kvNoTransmission only: minimum voltage in kilovolts (kV), e.g. 345. With type=all it narrows to transmission projects
statusNoStatus, case-insensitive; comma list allowed. Gas: Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed. Transmission: Planned, Conceptual, Under Construction, Completed, Cancelled
new_sinceNoOnly projects DC Hub first saw on or after this date (YYYY-MM-DD). The initial backfill is never counted as new
min_capacityNoGas only: minimum pipeline capacity in million cubic feet per day (MMcf/d), e.g. 1000. With type=all it narrows to gas projects
in_service_afterNoOnly projects entering service on or after this date (YYYY-MM-DD or YYYY). Gas compares the in-service year; transmission the actual, else projected, in-service date
include_delistedNoAlso return projects the latest source release no longer lists (completed, withdrawn or dropped). Default false
in_service_beforeNoOnly projects entering service on or before this date (YYYY-MM-DD or YYYY)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safe-read profile (readOnly, idempotent), and the description goes well beyond: per-ISO data grain (rows are upgrades/facilities, not whole projects), per-ISO field availability, null never estimated, source and license citation per row, and as_of semantics (top-level is the OLDEST source). This is unusually rich behavioral context for a read tool.

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?

The trigger condition and coverage scope are front-loaded, and the do-not-use routing is last, which is a sensible order. The middle is dense and long, but nearly every clause (ISO list, grain caveat, per-ISO field gaps) carries information an agent would otherwise get wrong, so the length is largely earned rather than padding.

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

Completeness5/5

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

For a 10-parameter, zero-required, dual-source tool with an output schema, the description supplies everything needed: coverage boundaries (five named ISOs, CAISO/NYISO excluded), per-source field variability, the iso label in results, and the summary/as_of structure. Return value detail is delegated appropriately to the output schema.

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?

Schema coverage is 100%, so the baseline is 3. The description exceeds that by clarifying filter semantics not evident from the schema alone โ€” new_since excludes the initial backfill, include_delisted returns dropped/completed projects, min_capacity only bites for gas โ€” and by flagging that the type/state parameter help text ('Texas only') is out of date. That correction is genuine added value, though much of the rest restates the schema.

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?

The description names the specific resource (planned/proposed gas pipeline and transmission projects) and explicitly scopes it to the forward build-out rather than the existing network. It distinguishes itself from siblings by name (get_power_pipeline, get_infrastructure, get_grid_intelligence, get_pipeline), so an agent can disambiguate without opening any schema.

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

Usage Guidelines5/5

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

It opens with an explicit when-to-use trigger, gives three representative user questions, and closes with an explicit 'Do NOT use for...' list mapping each excluded case to the correct alternative tool. Nothing about when/when-not is left to inference.

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

get_infrastructureNearby InfrastructureA
Read-onlyIdempotent
Inspect

Nearby infrastructure for a location โ€” substations (count + max voltage_kv within radius), transmission lines (>69 kV path overlay), interstate + lateral gas pipelines, and power plants (operating + planned, by fuel) within configurable radius_km. Returns distance + capacity for each, joined to HIFLD/EIA. Answers "what is near this parcel", "how far is the nearest substation and what voltage is it". Try: get_infrastructure lat=33.45 lon=-112.07 radius_km=25. Returns raw nearby assets; do NOT use for a single scored site-suitability verdict (use analyze_site).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoCenter latitude in decimal degrees (-90 to 90, required), e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoCenter longitude in decimal degrees (-180 to 180, required), e.g. -112.07
layerNoOptional single asset layer to return, e.g. substations, transmission, pipelines, power_plants
limitNoMax results to return (1-500; default varies by tool)
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoSearch radius in kilometers around the point, e.g. 25
min_voltage_kvNoOnly include transmission/substations at or above this voltage in kV, e.g. 69

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond them: results are joined to HIFLD/EIA, distance + capacity are returned per asset, and it emits 'raw nearby assets' rather than an aggregated verdict. Minor gap: no mention of pagination or rate behavior, but the output schema exists to cover returns.

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 with the resource and asset list, then usage, then exclusion โ€” a logical order. It is dense with em-dash parentheticals and a long opening sentence, but each clause carries distinct information, so little is wasted.

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

Completeness5/5

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

Given an existing output schema and full annotation coverage, the description supplies everything needed to select and call it correctly: asset types, radius control, data provenance, example invocation, and the sibling boundary. Nothing material is missing.

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 description coverage is 100%, so the baseline is 3. The description reinforces radius_km configurability and the >69 kV / max voltage_kv semantics, but adds no syntax or constraints beyond what the schema already documents, and is silent on the lat/lng/latitude/longitude aliasing quirk.

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+resource ('Nearby infrastructure for a location') and enumerates exactly what it returns: substations with count and max voltage_kv, >69 kV transmission lines, interstate + lateral gas pipelines, and operating/planned power plants by fuel. It also distinguishes itself from the sibling analyze_site by scope.

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

Usage Guidelines5/5

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

Gives concrete triggering questions ('what is near this parcel', 'how far is the nearest substation and what voltage is it'), a runnable example call, and an explicit negative: 'do NOT use for a single scored site-suitability verdict (use analyze_site)'. That is a complete when-to-use / when-not / alternative statement.

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

get_intelligence_indexMarket Intelligence IndexA
Read-onlyIdempotent
Inspect

Real-time composite market health score (0-100) aggregating supply/demand balance, vacancy, absorption velocity, fiber depth, power availability, and pricing trend. Returns the index value, percentile rank across the 300+ market set, 7d/30d trend direction, and underlying component scores. Answers "is this market healthy", "how does Northern Virginia look overall right now". Try: get_intelligence_index market=northern-virginia. Returns ONE composite health number for a market; do NOT use for the full market metric set (use get_market_intel) or to rank multiple markets (use rank_markets).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: what the composite aggregates and what comes back (index value, percentile rank across the 300+ market set, 7d/30d trend, component scores). It stops short of discussing data freshness, staleness windows, or coverage limits, so 4 rather than 5.

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?

Front-loads the definition, then outputs, then natural-language triggers, then the sibling routing, then an example. Dense but every sentence carries distinct information and none restates the name or title.

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 is not obligated to detail return values (though it helpfully does). The real completeness gap is the phantom `market` parameter: with no scoping parameter in the schema, it is unclear how the single composite score is selected, and the example reinforces a call signature that cannot work. Everything else an agent needs is present.

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?

The schema declares zero properties, which would normally be a baseline 4, but the description supplies an example invocation with a `market` argument ("get_intelligence_index market=northern-virginia") that the empty input schema cannot accept. Rather than clarifying parameters, this invents one and would lead an agent to a validation error, so it sits below the zero-param baseline.

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 (composite market health score), defines the 0-100 range, enumerates the aggregated inputs (supply/demand balance, vacancy, absorption velocity, fiber depth, power availability, pricing trend), and explicitly contrasts itself with get_market_intel and rank_markets. An agent can select it without opening any schema.

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

Usage Guidelines5/5

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

Gives both a positive trigger ("is this market healthy", "how does Northern Virginia look overall right now") and explicit exclusions naming the correct siblings: get_market_intel for the full metric set and rank_markets for ranking. This is textbook when/when-not/alternative guidance.

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

get_interconnection_queueInterconnection QueueA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about grid interconnection queues or how much load is waiting to connect. Call when the user asks how congested an ISO's interconnection queue is or how much data-center load is queued. Returns queued generation GW per ISO. The projects field changes shape: with iso= it is an array of per-project rows; without iso it is an all-ISO summary object (total, by_iso_count, top). ERCOT also returns its large-load (data-center) queue; other ISOs don't publish one. Keyless: a trimmed preview; free with an email-bound key. Ex: "How deep is ERCOT's queue?" iso optional (US ISO code); free = preview. For demand and headroom on the same ISO also call get_grid_intelligence.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO grid region to drill into: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE; omit for the all-ISO snapshot

Output Schema

ParametersJSON Schema
NameRequiredDescription
vNoVerification flag for the snapshot
isoNoISO/RTO this snapshot covers (per-ISO drill-down form)
as_ofNoQueue snapshot date
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
projectsNoSHAPE DEPENDS ON THE CALL: with iso= this is an ARRAY of queued generation projects (largest / most recent first); with iso omitted it is the all-ISO SUMMARY OBJECT {total, tracked, by_iso_count, top, note} โ€” per-project rows are not returned for the all-ISO snapshot. Check the type before indexing.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
source_urlNoQueue source URL
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
source_nameNoQueue source name
_return_loopNoNext-session delta call (get_changes).
project_countNoProjects in the queue snapshot
top_subregionsNoProvenance / sub-region breakdown for the large-load figure (ERCOT)
queued_generation_gwNoGeneration interconnection queue in this ISO, GW (US ISOs; ERCOT's generation queue, not its large-load queue). null on NESO/IESO/AESO
queued_load_total_gwNoMeaning depends on queued_load_total_gw_basis: generation_queue = the generation queue (deprecated alias of queued_generation_gw, removed after 2026-11-15); large_load = ERCOT's large-load (demand) queue; mixed_connection_queue = NESO/IESO/AESO connections queue (generation AND demand). GW
new_applications_q_gwNoNew queue applications in the latest period, GW (when published)
new_applications_periodNoPeriod the new-applications figure covers
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.
queued_load_dc_share_pctNoERCOT: data-center share of the large-load queue, %. NESO/IESO/AESO: demand share of the connections queue, %. null elsewhere
historical_completion_pctNoShare of queued projects that historically complete, % (when published)
queued_load_data_center_gwNoERCOT: data-center load DERIVED as ~90% of the large-load queue, GW. NESO/IESO/AESO: demand projects in the connections queue (all demand, not data centres only). null elsewhere
queued_load_total_gw_basisNoWhat queued_load_total_gw measures on this row: generation_queue | large_load | mixed_connection_queue
queued_generation_gw_basis_noteNoWhat queued_generation_gw counts on this row: status filter and MW column, e.g. "Active only, summer MW". Present on the US generation-queue ISOs other than ERCOT; compare totals from other trackers only on the same basis
queued_generation_pending_revision_gwNoMISO only: GW of applications in Pending Revision Approval (summer MW), reported beside the active total and NOT part of queued_generation_gw. null on every other ISO, and null on the free preview like the other GW figures
queued_generation_pending_revision_gw_basisNoWhat queued_generation_pending_revision_gw counts: the MISO status, MW column, and that it is excluded from queued_generation_gw. Present only when the figure is

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnly, idempotent, open-world, non-destructive), but the description adds real behavioral context beyond them: the keyless-preview vs email-bound-key access model, the ERCOT-only large-load queue quirk, and the conditional shape of the 'projects' field. It stops short of pagination/rate-limit detail, so not a 5.

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 with use cases, then behavioral quirks, example, and parameter note. Dense and mostly waste-free, though 'iso optional (US ISO code); free = preview' lightly re-echoes the earlier keyless-preview statement.

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

Completeness5/5

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

Output schema exists so return values needn't be documented, yet the description pre-explains the shape change anyway. Together with access model, ERCOT quirk, and the sibling routing, an agent has everything needed to call it correctly.

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?

With 100% schema coverage the baseline is 3, but the description adds meaning by tying the 'iso' parameter to a behavioral consequence: with iso it returns per-project rows, without it returns an all-ISO summary object. That conditional semantics go beyond the schema's plain 'omit for the all-ISO snapshot'.

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?

Specific verb+resource ('get grid interconnection queue'), with explicit scope ('queued generation GW per ISO') and stated user intents ('how congested an ISO's queue is or how much data-center load is queued'). It also distinguishes itself from the related sibling get_grid_intelligence, which handles demand/headroom on the same ISO.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions ('whenever the user asks about grid interconnection queues or how much load is waiting to connect'), a concrete example ('How deep is ERCOT's queue?'), and routes to an alternative when the user needs demand/headroom data. When-to-use is unambiguous.

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

get_iso_contextGet Iso ContextA
Read-onlyIdempotent
Inspect

Use when an agent needs a WHOLE-grid briefing it can drop straight into its context window โ€” one call returns a token-budgeted context pack for a US ISO/RTO: live grid snapshot (demand, fuel-mix shares), DCPI verdict mix & grid economics across the ISO's tracked markets (queue wait, power cost, reserve margin), interconnection-queue depth with the largest projects, real-time benchmark LMP, the tracked DCPI market list, deep-dive narrative excerpts, and recent news โ€” each section with its own token count, as_of timestamp, and citable URL, greedily filled in that priority order under your max_tokens budget. Example: "Brief me on ERCOT for data-center siting" โ€” get_iso_context iso=ERCOT max_tokens=4000. Params: iso (required: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE); max_tokens (optional, 200-8000, default 4000). Returns {sections:[{id,title,text,tokens,as_of,cite}], used_tokens, omitted}. Do NOT use for raw single-ISO telemetry (use get_grid_data), the per-ISO decision brief with headroom/TTP (use get_grid_intelligence), multi-ISO scalar comparison (use compare_isos), or non-US grids (use get_grid_scoreboard); this is the narrative briefing pack. Cite "DC Hub (dchub.cloud)". iso is required (US ISO code). max_tokens caps the context returned; locked_sections need a higher tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoYesISO/RTO grid region (required): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE
max_tokensNoToken budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the ISO lookup executed
isoNoISO code
tierNoTier the response was served at
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
sectionsNoSections delivered in budget
max_tokensNoToken budget for this tier
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
used_tokensNoTokens used by delivered sections
_return_loopNoNext-session delta call (get_changes).
locked_sectionsNoSections withheld on this tier
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, but the description adds genuinely new traits: greedy priority-order filling under max_tokens, per-section token counts/as_of/cite fields, an omitted list, a locked_sections/higher-tier constraint, and a citation requirement. These are behavioral facts not derivable from annotations or schema.

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 use-case and example, and every sentence carries routing or behavioral information. However, the long in-line enumeration of pack contents overlaps with the later 'Returns {...}' sentence, producing some redundancy that could be trimmed.

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

Completeness5/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-shape explanation is optional, yet the description still supplies section structure, budget mechanics, and the locked_sections tier caveat. Nothing an agent needs to invoke this correctly is missing.

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 100%, so both parameters are already documented, and the description largely restates the enum values, range, and default. It adds only the priority-fill rationale for max_tokens, which the schema also states. Baseline 3 is appropriate.

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 ('one call returns a token-budgeted context pack for a US ISO/RTO') and enumerates exactly what the pack contains. It explicitly distinguishes itself from four named siblings (get_grid_data, get_grid_intelligence, compare_isos, get_grid_scoreboard), so an agent can route without opening a schema.

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

Usage Guidelines5/5

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

Provides an explicit 'Use when' framing plus a worked example ('Brief me on ERCOT for data-center siting'), and a 'Do NOT use for...' clause naming each alternative with the condition that selects it. This is close to exhaustive routing guidance.

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

get_market_contextGet Market ContextA
Read-onlyIdempotent
Inspect

Use when an agent needs a WHOLE-market briefing it can drop straight into its context window โ€” one call returns a token-budgeted context pack for a data-center market: DCPI verdict, power & grid facts, the Claude-written 12-month outlook, M&A deals, construction pipeline, operator footprint, transaction comps, risk factors, and top news โ€” each section with its own token count, as_of timestamp, and citable URL, greedily filled in that priority order under your max_tokens budget. Example: "Brief me on the Columbus data-center market" โ€” get_market_context market=columbus max_tokens=4000. Params: market (required, market slug e.g. northern-virginia โ€” valid slugs come from rank_markets); max_tokens (optional, 200-8000, default 4000). Returns {sections:[{id,title,text,tokens,as_of,cite}], used_tokens, omitted}. Do NOT use for a single metric (use get_market_dcpi_rank), the raw structured metric set (use get_market_intel), or cross-market ranking (use rank_markets); this is the narrative briefing pack. Cite "DC Hub (dchub.cloud)".

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket slug (required), e.g. northern-virginia, dallas, phoenix โ€” valid slugs come from rank_markets / get_market_dcpi_rank
max_tokensNoToken budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial behavior beyond them: greedy priority-order filling under the max_tokens budget, per-section token counts and as_of timestamps, an `omitted` field for budget overflow, the citable URL requirement, and a citation mandate. This is context annotations alone could not 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-loaded with the primary use case and an example, which is good. However the long section enumeration plus a "Params:" block and return-shape summary that duplicate the structured schema add length that isn't strictly earned.

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

Completeness5/5

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

For a complex briefing tool with an output schema, the description covers purpose, usage, exclusions, both parameters, budget behavior, and citation requirements. An agent has everything needed to select and invoke it correctly.

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 description coverage is 100%, so the schema already documents both parameters with the same ranges, defaults, and slug examples the description restates. The description does add the cross-reference that valid slugs come from rank_markets, but this is essentially a restatement of the schema, so the baseline 3 applies.

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+resource (returns a token-budgeted context pack for a data-center market) and enumerates exactly what the pack contains (DCPI verdict, power & grid facts, 12-month outlook, M&A, pipeline, etc.). It explicitly distinguishes itself from get_market_dcpi_rank, get_market_intel, and rank_markets, so an agent can route correctly without opening another schema.

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

Usage Guidelines5/5

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

Leads with "Use when an agent needs a WHOLE-market briefing," gives a concrete example invocation, and closes with three explicit "Do NOT use for..." exclusions naming the exact alternative tools. The when/when-not/alternative structure is fully covered.

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

get_market_dcpi_rankDCPI Market RankA
Read-onlyIdempotent
Inspect

Use this whenever the user asks where a data center can get grid power, how fast, or whether a market is a BUILD, CAUTION or AVOID (e.g. "Where can a 100 MW data center get power fastest?"): DCPI scores 300+ markets daily on Excess Power and Grid Constraint, CC BY 4.0. Data Center Power Index (DCPI) rank for a single market: BUILD/CAUTION/AVOID verdict, 0-100 composite_score (verdict-aware), excess_power_score, constraint_score, time_to_power_months. INCLUDES a narrative block with a ~100-word analyst read on the market, quote it directly with attribution to DC Hub (CC-BY-4.0). Use to answer "should I build here?" with structured reasoning + ready-to-cite prose across 300+ scored markets worldwide. Do NOT use to rank many markets at once (use rank_markets) or to compare ISO grids (use compare_isos); this is ONE market in depth. Verdict and composite score are free; numeric sub-scores and the narrative are on paid plans or a credit pack. market_slug is required: get it from rank_markets. 404 = unknown slug. Returns the build/constrain verdict, not raw stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_slugYesMarket slug (metro), e.g. northern-virginia, dallas, phoenix โ€” valid slugs come from rank_markets / get_market_dcpi_rank

Output Schema

ParametersJSON Schema
NameRequiredDescription
isoNoISO/RTO serving the market
quotaNoCaller quota state (remaining calls, tier).
stateNoUS state / region code
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
verdictNoDCPI verdict: BUILD | CAUTION | AVOID
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
forecastNoForecast availability block: {available, note, reason, samples_in_30d} โ€” see predict_market_trajectory
latitudeNoMarket anchor latitude
longitudeNoMarket anchor longitude
narrativeNo~100-word analyst read on the market, quote directly with attribution to DC Hub (CC-BY-4.0)
publishedNoWhether the score is published
trend_30dNo30-day trend read when enough snapshots exist
data_basisNoWhat the scores were computed from
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
computed_atNoWhen the score row was computed
market_nameNoMarket display name
market_slugNoMarket slug
_return_loopNoNext-session delta call (get_changes).
avg_kwh_centsNoAverage retail power price, cents/kWh (may arrive as a string)
quality_scoreNo0-100 data-quality score for this market
tier_requiredNoTier required for the full row
top_risks_jsonNoTop risk bullets for the market
composite_scoreNo0-100 verdict-aware composite score
curtailment_pctNoCurtailment, %
constraint_scoreNo0-100 constraint component
data_basis_sourceNoSource of the data basis
queue_wait_monthsNoISO queue wait, months
excess_power_scoreNo0-100 excess-power component
reserve_margin_pctNoGrid reserve margin, %
time_to_power_monthsNoEstimated months to power for a new interconnection
top_opportunities_jsonNoTop opportunity bullets for the market
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses access-tier behavior ('Verdict and composite score are free; numeric sub-scores and the narrative are on paid plans or a credit pack'), error semantics ('404 = unknown slug'), daily scoring cadence, licensing (CC BY 4.0 with DC Hub attribution), and that it returns a verdict rather than raw stats. These are non-obvious operational facts the 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?

Usage and the single-market scope are front-loaded, and most sentences carry information. However it is dense and somewhat promotional, with mild redundancy ('Do NOT use to rank many markets at once... this is ONE market in depth' and rank_markets referenced twice), which slightly dilutes the signal.

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

Completeness5/5

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

An output schema exists, yet the description still correctly frames the answer shape (verdict-focused, not raw stats), plus paywall gating, error behavior, and slug sourcing. For a single-parameter read tool an agent has everything needed to call it correctly and interpret the result.

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?

With one parameter at 100% schema coverage the baseline is 3, but the description adds real meaning: it declares market_slug required and directs the agent where to obtain valid values ('get it from rank_markets') and what an invalid value produces ('404 = unknown slug'). The slug format/example itself lives in the schema.

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?

The description states a specific verb and resource ('DCPI rank for a single market') and enumerates exactly what comes back (BUILD/CAUTION/AVOID verdict, composite_score, excess_power_score, constraint_score, time_to_power_months, narrative). It explicitly differentiates itself from siblings ('this is ONE market in depth' vs rank_markets/compare_isos), so an agent can route 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 Guidelines5/5

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

It gives concrete triggering scenarios ('user asks where a data center can get grid power, how fast, or whether a market is a BUILD, CAUTION or AVOID', 'should I build here?') and explicit exclusions/alternatives ('Do NOT use to rank many markets at once (use rank_markets) or to compare ISO grids (use compare_isos)'). Nothing about when to select this tool is left to inference.

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

get_market_intelMarket IntelligenceA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about a data-center market: supply, operators, pipeline or pricing context for a metro. Call when the user asks about one data-center market: facility count, tracked MW, status mix, top providers, recent facilities or lease pricing. Pass market as a slug (e.g. northern-virginia). Returns stats, by_status, top_providers, recent_facilities, market_pricing (quote its basis). Verdict: use get_market_dcpi_rank. Keyless: a trimmed preview; a free key gets more. Ex: "1 MW colo price in Los Angeles?" Get the market slug from rank_markets or get_market_dcpi_rank; 404 = unrecognised market, use one of those slugs.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNoMarket slug (metro), e.g. northern-virginia, dallas, frankfurt, singapore โ€” valid slugs come from rank_markets / get_market_dcpi_rank
metricNoOptional single metric to focus on, e.g. vacancy, pricing, absorption, pipeline
periodNoOptional time window for the metric, e.g. ttm, 12mo, ytd
compare_toNoOptional second market slug to compare against, e.g. dallas

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
statsNoHeadline market stats
_gatedNotrue when parts of the payload were withheld by tier
marketNoThe market identity block
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
successNotrue when the market lookup succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
by_statusNoFacility counts keyed by status (Operational, Under Construction, Planned, Announced, active)
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
related_intelNoRAG-grounded related intelligence passages (cited)
top_providersNoDominant operators, largest first
recent_facilitiesNoRecently added / discovered facilities in the market
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds genuinely useful non-annotation context: keyless access yields a trimmed preview while a free key gets more, and market_pricing should have its basis quoted. It stops short of deep behavioral detail (e.g. rate limits, freshness), but exceeds the annotation baseline.

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?

It is dense but front-loaded with the trigger condition, and most sentences carry distinct information (return shape, routing, auth tier, error handling). Minor redundancy between the first and second sentences ('whenever the user asks about a data-center market' / 'Call when the user asks about one data-center market') costs it a point.

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

Completeness5/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 values needn't be enumerated, and annotations cover the safety profile. The description still supplies routing, slug sourcing, access tiers and 404 recovery, leaving no evident gap for an agent to call this tool correctly.

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 100% and the schema already describes each parameter (market slug, metric, period, compare_to) with examples. The description only repeats the slug convention with another example and does not add syntax or constraints beyond the schema, so the baseline 3 applies.

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?

The description states a specific verb+resource (market intelligence for a metro: facility count, tracked MW, status mix, top providers, recent facilities, lease pricing), and explicitly distinguishes itself from the sibling that answers a different question โ€” 'Verdict: use get_market_dcpi_rank'. An agent can route correctly 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 Guidelines5/5

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

It gives explicit when-to-use ('whenever the user asks about a data-center market ... for a metro'), names the alternative for verdicts (get_market_dcpi_rank), tells where to source the required slug (rank_markets or get_market_dcpi_rank), and even handles the error path (404 = unrecognised market, use one of those slugs). This is textbook routing guidance.

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

get_metro_fiberGet Metro FiberA
Read-onlyIdempotent
Inspect

Use when a user asks which US metro has the DEEPEST fiber, or wants the metro-level fiber profile of a market โ€” carrier count, total route-miles, on-net buildings, a 0-100 fiber-density score, tier, key internet-exchange (IX) points and carrier hotels โ€” across the tracked top US data-center metros (Northern Virginia, Dallas-Fort Worth, Silicon Valley, Chicago, Atlanta, Phoenix, and more). Example: "Rank US metros by fiber density" โ€” get_metro_fiber (no args); or "Give me the carrier-by-carrier fiber + dark-fiber breakdown for Dallas" โ€” get_metro_fiber market="Dallas-Fort Worth". Params: market (optional metro name OR slug, e.g. "Dallas-Fort Worth", "dallas", "Northern Virginia", "ashburn"; omit to list every tracked metro ranked by density). Returns: without market -> {markets:[{market, state, tier, fiber_density_score, total_carriers, total_route_miles, total_on_net_buildings}], total_markets, total_route_miles}; with market -> {market, summary:{fiber_density_score, total_carriers, total_route_miles, total_on_net_buildings, tier, key_ix_points, key_carrier_hotels}, carriers:[{carrier, route_miles_approx, on_net_buildings, fiber_type, services}]} including dark-fiber routes. Cite DC Hub (dchub.cloud, CC-BY-4.0). Do NOT use for the parcel-level connectivity verdict at one lat/lon (use get_fiber_readiness) or to map long-haul/metro route GEOMETRY for a Leaflet/Mapbox map (use get_fiber_intel); this is the metro-level fiber DEPTH profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNoOptional metro name or slug for a single-market deep dive (carrier-by-carrier + dark fiber), e.g. "Dallas-Fort Worth", "dallas", "Northern Virginia", "ashburn". Omit to list every tracked metro ranked by fiber density.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/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 fully covered. The description adds real value beyond that: the exact market coverage scope (closed list of tracked US metros), the fact that dark-fiber routes are included, and a licensing/attribution obligation (cite DC Hub, CC-BY-4.0) that the agent must honor. It stops short of noting rate limits or data-freshness caveats.

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 with the usage trigger, then examples, then return shape, then exclusions โ€” a sensible ordering with no filler sentences. However, the 'Params:' and 'Returns:' blocks largely duplicate the input schema and the existing output schema, so a meaningful chunk of the text does not earn its place.

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

Completeness5/5

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

For a single optional-parameter read tool with full annotation coverage and an output schema, the description supplies everything an agent needs: trigger conditions, market coverage, both output branches, and sibling routing. Since an output schema exists, the inline Returns summary is redundant but not harmful, and nothing required for correct invocation is missing.

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 description coverage is 100% and the schema already documents the market parameter, including the slug examples ('Dallas-Fort Worth', 'dallas', 'ashburn') and the omit-to-list behavior. The description's 'Params:' sentence is essentially a restatement, adding no new syntax or edge-case semantics. Baseline 3 is appropriate.

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+resource ('metro-level fiber DEPTH profile') and enumerates exactly what the profile contains (carrier count, route-miles, on-net buildings, density score, tier, IX points, carrier hotels) across a named market set. It explicitly distinguishes itself from get_fiber_readiness and get_fiber_intel by scope, so an agent can route 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 Guidelines5/5

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

Opens with an explicit 'Use when' trigger, gives two concrete user-query examples mapped to no-arg and market-arg invocations, and closes with two named exclusions ('Do NOT use for the parcel-level connectivity verdict... use get_fiber_readiness' / 'to map route GEOMETRY... use get_fiber_intel'). Both the when and the when-not are covered with alternatives.

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

get_newsIndustry NewsA
Read-onlyIdempotent
Inspect

FRONT DOOR CHECK โ€” if news is only ONE input to a bigger question (is this market heating up, should we still build here), call execute_plan(intent="<the user's question, unchanged>") and let it pull news alongside the market and grid reads. If the user actually wants the headlines, get_news IS the right call โ€” one round trip; do not send a plain news request through the planner. Curated data center industry news from 40+ trade sources (DCD, Data Center Knowledge, Data Center Frontier, Capacity Media, The Register Data Centre, Fierce Telecom, etc.) refreshed every 30 min. Returns title, summary, source, published_at, and the market/operator entities mentioned. Filter by category (deals/permits/outages/policy/AI). Answers "what is happening in the data center industry this week", "any news on AI capacity". Try: get_news category=AI limit=10. The parameter is category, not topic. Industry news only; do NOT use for structured M&A deal data (use list_transactions) or the construction pipeline (use get_pipeline). limit 1-500 (free 20). Empty data = no matching news: drop category/source or widen date_from/date_to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
queryNoFree-text keyword to filter news, e.g. "Stargate" or "interconnection queue"
sourceNoRestrict to one trade source, e.g. DCD, "Data Center Frontier", "Capacity Media"
date_toNoLatest published date, ISO-8601 (YYYY-MM-DD)
categoryNoNews topic filter, e.g. deals, permits, outages, policy, AI
date_fromNoEarliest published date, ISO-8601 (YYYY-MM-DD)
min_relevanceNoMinimum relevance score 0-1 to include an item, e.g. 0.5

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoSame rows as `articles`
countNoRows returned in THIS response
quotaNoCaller quota state (remaining calls, tier).
totalNoTotal articles matching
sourceNoWhere the news set comes from
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
successNotrue when the news query succeeded
articlesNoNews rows
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description adds genuinely new behavior: 30-minute refresh cadence, source breadth, the 'free 20' limit tier implying paid quota, and what an empty result means plus how to remediate it. It does not discuss auth requirements or latency, which is a minor residual gap rather than a failure.

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 with the highest-stakes decision (whether to call this tool at all), and most sentences carry routing, scope, or recovery information. It is dense rather than bloated, though the trailing 'Try: get_news category=AI limit=10' and the return-field list add some redundancy given the schema and output schema already exist.

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

Completeness5/5

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

For a read-only, zero-required-parameter filter tool with an output schema, the description covers routing, scope boundaries, filter semantics, quota, and empty-result recovery. Nothing an agent needs in order to select and invoke it correctly is missing.

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?

Schema coverage is 100%, so baseline would be 3. The description exceeds that by flagging a common mistake ('The parameter is `category`, not `topic`'), giving a concrete call example, restating the limit range with the free-tier cutoff, and prescribing filter-widening when results are empty.

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 resource ('Curated data center industry news from 40+ trade sources' with named outlets) and what it returns (title, summary, source, published_at, entities). It explicitly separates itself from siblings, telling the agent not to use it for structured M&A data (list_transactions) or the construction pipeline (get_pipeline).

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

Usage Guidelines5/5

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

Provides an explicit routing rule: if news is only one input to a broader question, call execute_plan instead; if the user wants headlines, this tool is correct and should not be routed through the planner. It also names two alternative tools by name with the conditions that select them.

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

get_peering_intelGet Peering IntelA
Read-onlyIdempotent
Inspect

Internet-exchange (IX/IXP) and peering density for a site, from PeeringDB. Pass lat+lon for the PEERING PROFILE around that point: facilities_nearby, a 0-100 score with its level, total_ix_presence, total_networks, and top_facilities each with ix_count and net_count โ€” e.g. Ashburn comes back with 61 IX presences and 903 networks across the nearby sites, led by Equinix DC1-DC15 at 516 networks. Omit coordinates for the IXP directory (name, name_long, city, country, net_count, fac_count, media, protocols). This is the layer that answers "can I actually reach networks cheaply from here", which fiber route geometry does not: a site can sit on dense fiber and still be far from any exchange. The score is a DERIVED convenience over PeeringDB counts, not a DC Hub-sourced grade โ€” cite the underlying counts (facilities, IX presence, networks) rather than the score when it is load-bearing. Records are PeeringDB's, refreshed on read. Answers "how good is peering at this Ashburn site" and "which internet exchanges serve the Dallas market". Try: get_peering_intel lat=39.04 lon=-77.48 โ€” or get_peering_intel (no args) for the IXP directory. Do NOT use for fiber route geometry (get_fiber_intel), near-net carrier distance at a parcel (get_fiber_readiness), metro fiber depth (get_metro_fiber), or subsea landings (get_subsea_cables).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the site, e.g. 39.04 โ€” with lon, returns the peering profile around it; omit both for the IXP directory
lngNoAlias for lon โ€” either name works
lonNoLongitude of the site, e.g. -77.48
limitNoMax results to return (1-500; default varies by tool)
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, and the description adds value beyond them: the score is a DERIVED convenience not a DC Hub grade, users should cite underlying counts when load-bearing, and records are PeeringDB's refreshed on read. This is exactly the kind of provenance and trust caveat annotations cannot express.

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 with the core purpose and mode switch, then fields, then alternatives. The Ashburn numeric example is somewhat verbose for a description, but it concretely anchors expected output shape and is not padding.

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

Completeness5/5

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

For a zero-required-param, dual-mode read tool with an output schema, the description covers both modes, the meaning of the derived score, data provenance and refresh behavior, and sibling routing. An agent has everything needed to select and invoke it correctly.

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?

Schema coverage is 100%, so baseline is 3, but the description adds mode-switching semantics the schema only implies: passing lat+lon selects the peering-profile response while omitting coordinates selects the IXP directory. It does not explain the alias set (lng/latitude/longitude) or the limit parameter, but those are documented in the schema.

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 ('IX/IXP and peering density for a site, from PeeringDB') and explicitly contrasts itself with adjacent capabilities (fiber route geometry, fiber readiness, metro fiber, subsea cables). An agent can distinguish it from every named sibling without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (lat+lon for peering profile, omit for IXP directory), concrete example calls, sample questions it answers, and a clear do-not-use list pointing to four alternatives. Nothing is left to inference.

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

get_permitting_intelPermitting & Moratorium IntelA
Read-onlyIdempotent
Inspect

Data center PERMITTING & MORATORIUM intelligence โ€” curated, HUMAN-VERIFIED jurisdiction records: moratoriums, zoning restrictions, tax changes, utility pauses. Each record is stage-tagged (read the detail prefix: "Enacted" / "Proposed" / "Speculative"), with jurisdiction, state/country, the source article URL, and map coordinates. The permitting-risk axis for site selection that no other machine-readable source serves โ€” e.g. New York's statewide >=50MW moratorium, county-level halts. FREE and full for every caller. Answers "is there a moratorium where I want to build", "which jurisdictions just tightened data-center zoning". Try: get_permitting_intel class=moratorium โ€” or state=MN. Rendered live as the Permitting & Zoning layer on https://dchub.cloud/land-power-map. Do NOT use for tax INCENTIVE programs by state (use get_tax_incentives); this tracks restrictions and risk per jurisdiction.

ParametersJSON Schema
NameRequiredDescriptionDefault
classNoRecord class: "moratorium" | "zoning" | "tax" | "utility_pause" (optional)
stateNoUS state filter, e.g. NY or MN (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false/openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: records are human-verified and curated, stage-tagged with an "Enacted"/"Proposed"/"Speculative" prefix the caller must read, free and unrestricted for every caller, and tied to a live map layer. It stops short of describing pagination or record counts, so not a 5.

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 with the purpose and scope before the examples and the exclusion, and every clause carries information (stage prefixes, jurisdiction fields, sibling routing). It runs long and includes a promotional URL, which costs it the top mark.

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

Completeness5/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-value detail is not required, yet the description still names the record fields an agent will see (jurisdiction, state/country, source URL, coordinates) plus the stage tagging. For a two-optional-param, read-only filtered list, nothing needed to call it correctly is missing.

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 description coverage is 100%, so both optional parameters and their accepted values are already documented in the schema; the description only echoes them via examples (class=moratorium, state=MN). Per the rubric this is the baseline 3 โ€” the schema does the heavy lifting and the description adds no syntax or semantics beyond it.

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+resource (permitting & moratorium intelligence records) with the exact record types covered: moratoriums, zoning restrictions, tax changes, utility pauses. It explicitly distinguishes itself from the sibling get_tax_incentives, so an agent can route correctly 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 Guidelines5/5

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

Gives concrete when-to-use questions ("is there a moratorium where I want to build"), invocation examples (class=moratorium, state=MN), and an explicit exclusion โ€” do NOT use for tax incentive programs, use get_tax_incentives. Nothing is left to inference.

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

get_pipelineConstruction PipelineA
Read-onlyIdempotent
Inspect

Use when a user asks "what is being built / announced / permitted" in a market or by an operator โ€” the forward-looking construction pipeline. Example: "What data centers are under construction in Northern Virginia and when do they come online?" โ€” get_pipeline country=US status=construction (there is no market parameter โ€” filter by country/operator, or use search_facilities for a named market). Params: status one of "announced" | "permitted" | "construction" | "operational"; operator (e.g. "Equinix", "Digital Realty", "AWS"); country (ISO-2, e.g. "US", "DE"); min_capacity_mw (e.g. 50 to filter hyperscale); expected_completion_before (ISO date, e.g. "2027-01-01"); limit/offset for pagination. Returns: {projects:[{name, operator, capacity_mw, status, expected_commissioning, market_slug, country, lat, lon}], total, generated_at}. Do NOT use for already-operational facilities (use search_facilities) or for the M&A deal flow (use list_transactions). limit 1-500 (free 25), offset 0-100000. Empty data = no project matches: relax status/operator/min_capacity_mw.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
offsetNoPagination offset, 0-based (skip this many results)
statusNoPipeline stage filter: announced, permitted, construction, or operational
countryNoISO 3166-1 alpha-2 country code, e.g. US, DE, SG
operatorNoOperator/provider company name, e.g. Equinix, Digital Realty, AWS
min_capacity_mwNoMinimum project power capacity filter in megawatts (MW), e.g. 50 for hyperscale
expected_completion_beforeNoOnly projects with expected commissioning before this ISO-8601 date (YYYY-MM-DD), e.g. 2027-01-01

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoSame rows as `pipeline`
countNoRows returned in THIS response
quotaNoCaller quota state (remaining calls, tier).
statsNoAggregate pipeline stats
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
successNotrue when the query succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
pipelineNoConstruction-pipeline projects
by_quarterNoProjects per delivery quarter
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
data_sourceNoWhere the data comes from
total_countNoTotal projects matching
_return_loopNoNext-session delta call (get_changes).
last_updatedNoPipeline last refreshed
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior: pagination bounds (limit 1-500, free 25; offset 0-100000) and empty-result recovery guidance ('relax status/operator/min_capacity_mw'). It doesn't add auth or rate-limit context, and the return-value explanation is redundant against the output schema, keeping it out of 5 territory.

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 dense โ€” the when-to-use trigger and worked example come first, and the call syntax is shown inline. Some redundancy remains: the Returns block restates what the output schema already provides, and the Params list largely mirrors the schema, so a few sentences don't fully earn their place.

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

Completeness5/5

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

For a 7-param read tool with a full output schema, the description covers everything an agent needs: trigger conditions, call example, param semantics, pagination limits, sibling disambiguation, and empty-result handling. Nothing material is left to inference.

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?

Schema description coverage is 100%, so baseline is 3, but the description adds invocation-level value: it enumerates the status values, gives sample operators/ISO codes, clarifies min_capacity_mw usage ('50 to filter hyperscale'), and explains expected_completion_before with a date example. It also flags the absence of a market param, steering parameter choice.

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?

The description states a specific resource โ€” 'the forward-looking construction pipeline' โ€” with a concrete illustrative query and the exact call (get_pipeline country=US status=construction). It explicitly distinguishes itself from search_facilities and list_transactions, so an agent can route correctly 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 Guidelines5/5

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

Opens with 'Use when...', names the disallowed uses ('Do NOT use for already-operational facilities... or for the M&A deal flow'), and points to the correct siblings. It even warns that there is no `market` parameter and offers the workaround (filter by country/operator or use search_facilities for a named market).

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

get_power_availability_timelineGet Power Availability TimelineA
Read-onlyIdempotent
Inspect

Use this whenever the user asks when power will be available, or about time-to-power, in a US state. Power-availability TIMING for one US state โ€” when power gets EASIER, year by year. Composes: new generation coming online from EIA-860M monthly, split by confidence class (under-construction vs planned vs testing โ€” never blended); scheduled retirements as dated subtractions; LBNL interconnection-queue depth as congestion context (NO delivery dates โ€” the feed has none and most queued MW never completes). The one derived number, cumulative_firm_signal_mw, counts ONLY under-construction+testing minus retirements โ€” speculative permitting-stage MW is shown but never folded in. Answers "when is new capacity landing in Ohio", "what comes online in Georgia by 2027" with dated, sourced, per-lane-vintaged numbers. HONESTY LINE: supply-side signals, not a load-interconnection promise โ€” generation โ‰  deliverable load, and utility study timelines / large-load tariff processes / substation-grain delivery are declared out of coverage in constraint_coverage rather than estimated. Try: get_power_availability_timeline state=OH. Do NOT use for the raw project list (get_power_pipeline), live headroom today (get_grid_intelligence), queue survivors (get_refined_queue), or where-to-build ranking (rank_markets / ai_capacity_index) โ€” this answers WHEN, for one state.

ParametersJSON Schema
NameRequiredDescriptionDefault
mwNoOptional target MW for CONTEXT ONLY โ€” echoed back with an explicit note; never converted into an energize-by date, which this data cannot honestly state
stateYes2-letter US state code (required), e.g. OH, GA, TX โ€” the timeline grain; a state can span ISOs and the response reports ISO membership as context
yearsNoWindow in years from now, 1-6 (default 5)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/non-destructive, but the description adds substantial behavioral context beyond them: the composition of the timeline (EIA-860M monthly by confidence class, never blended), the derived-number rule (cumulative_firm_signal_mw counts only under-construction+testing minus retirements, speculative MW never folded in), the absence of delivery dates in queue data, and an explicit honesty line declaring utility study timelines and substation-grain delivery out of coverage. That is exactly the kind of disclosure annotations cannot carry.

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 with the trigger and the one-line scope before any detail, and the do-not-use routing is saved for the end. It is dense and long with capitalized emphasis ("HONESTY LINE", "TIMING") and some restatement of the mw contract, but nearly every sentence carries distinct routing or honesty information that an agent needs.

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

Completeness5/5

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

With an output schema present, the definition need not describe return values, and it doesn't. What remains โ€” grain, composition, non-blended confidence classes, coverage exclusions, and sibling routing โ€” is fully covered, leaving nothing an agent needs in order to call this correctly.

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 100%, so the schema already documents all three parameters, including that mw is context-only and never converted into a date. The description restates the state grain (can span ISOs, ISO membership returned as context) and reinforces the mw contract, but adds no new syntax, format, or default information beyond what the schema provides โ€” baseline 3.

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+resource (power-availability timing) scoped to one US state, year by year, and explicitly delimits what it does not answer (raw project list, live headroom, queue survivors, build ranking). An agent can distinguish it from get_power_pipeline, get_grid_intelligence, get_refined_queue, and rank_markets without opening any schema.

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

Usage Guidelines5/5

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

Opens with the triggering user phrasings ("when power will be available", "time-to-power") and closes with an explicit negative routing list naming four siblings plus what each of those answers instead. Both when-to-use and when-not-to-use are stated, not inferred.

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

get_power_pipelineGet Power PipelineA
Read-onlyIdempotent
Inspect

Use when a user asks WHERE NEW POWER GENERATION is coming online (the forward supply pipeline) โ€” e.g. "how much new generation is planned in Virginia / the Southeast / ERCOT, and when?". Planned, permitting, and under-construction generators NATIONWIDE from EIA-860M, INCLUDING non-ISO regions (TVA, Southern Co, Arizona PS, PacifiCorp, LADWP) that interconnection-queue feeds miss. Each generator has location (lat/lng), state, county, balancing authority, technology/fuel (solar photovoltaic, onshore wind, natural-gas combined cycle, batteries, nuclear), nameplate megawatts (MW), status (planned โ†’ under construction), and planned online month/year. Filter by state (2-letter, e.g. VA), ba (balancing-authority/ISO code, e.g. PJM, ERCO, SOCO, TVA), status (P/L/T=planned, U/V=under construction, TS=testing), or min_mw. Returns a summary (total planned MW, mix by technology + status) plus the largest projects. Answers "how much new generation is planned in Virginia and when does it land". Try: get_power_pipeline state=VA. Do NOT use for ALREADY-OPERATING capacity or grid headroom (use get_grid_intelligence / get_grid_data) or for data-center construction projects (use get_pipeline).

ParametersJSON Schema
NameRequiredDescriptionDefault
baNoBalancing-authority / ISO code, e.g. PJM, ERCO, SOCO, TVA, AZPS
limitNoMax results to return (1-500; default varies by tool)
stateNoUS state abbreviation to filter generators, e.g. VA, TX
min_mwNoMinimum nameplate capacity filter in megawatts (MW)
statusNoGenerator status code: P/L/T (planned), U/V (under construction), TS (testing)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint true and destructiveHint/openWorldHint false, so the safety profile is covered. The description adds genuinely non-redundant behavior: origin dataset (EIA-860M), nationwide coverage including non-ISO balancing authorities, and the returned summary (total planned MW, mix by technology + status, largest projects). It omits freshness/update cadence and pagination, but the added context is substantial.

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 with the usage trigger and the key distinguishing scoping claim, and every clause is information-dense. It is on the long side, and the trailing 'Answers "how much new generation is planned in Virginia and when does it land"' restates the opening example question, which is minor redundancy.

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

Completeness5/5

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

For a zero-required, filter-based read tool with an output schema and full annotation coverage, the description supplies everything an agent needs: trigger conditions, filters, geographic caveats, and exclusions. Nothing required to call it correctly is missing.

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 description coverage is 100%, so the schema already documents all five parameters, and the description largely restates them (state 2-letter, ba ISO code, status P/L/T, min_mw). The BA examples (PJM, ERCO, SOCO, TVA, AZPS) and the mapping to non-ISO regions add some interpretive value but do not exceed what the schema provides. Baseline 3 is appropriate.

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+resource (get the forward power-generation pipeline) with scope ('WHERE NEW POWER GENERATION is coming online'), data source (EIA-860M), and explicit non-coverage ('INCLUDING non-ISO regions ... that interconnection-queue feeds miss'). It cleanly distinguishes itself from get_grid_intelligence/get_grid_data and get_pipeline, so an agent can pick it without opening a schema.

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

Usage Guidelines5/5

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

Opens with an explicit 'Use when a user asks...' trigger with concrete example questions, and closes with a 'Do NOT use for...' block naming two alternatives (get_grid_intelligence/get_grid_data for operating capacity, get_pipeline for data-center construction). When-to-use, when-not-to-use, and alternatives are all present.

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

get_refined_queueGet Refined QueueA
Read-onlyIdempotent
Inspect

Server-side SET-REDUCTION over the US ISO interconnection queue. Instead of pulling the raw queue into context to filter (token-expensive, error-prone), push the predicates to the data layer and get back ONLY the survivors. Filter by min_mw, max_ttp_months (ISO-level avg interconnection wait), iso (comma-union), baseload_only (firm/dispatchable โ€” excludes wind/solar/storage), fuel_type (isolate a specific fuel, e.g. gas or nuclear), and the spatial predicates max_fiber_km + geocoded_only. Returns _entity=queue_results: per-project name, ISO, state/county, fuel_type, capacity_mw, queue_status, estimated_ttp_months, fuel_class, plus (~83% of rows) lat/lng, coordinate_precision, fiber_km, and a compact per-survivor site_evaluation_handoff (ready-to-pipe analyze_site + get_water_risk args) + a by_iso/by_fuel summary. Answers "show me 1 GW+ gas projects that can connect in under three years", "what is in the queue that actually fits my timeline". Try: get_refined_queue min_mw=1000 fuel_type=gas max_ttp_months=34 โ€” "1 GW+ gas in ISOs under 34-month time-to-power." NOTE max_ttp_months is a HARD ISO cut (SPP ~24 is the only ISO under 30, so <=30 can return nothing); use >=34 to include MISO/ERCOT/ISO-NE. Use for high-cardinality siting/arbitrage scans; do NOT use for the ISO-level GW aggregate (use get_interconnection_queue) or a single-site read (use analyze_site). Phase 2 LIVE: pipe a survivor's site_evaluation_handoff straight into analyze_site for a one-call composite viability read. CANDIDATE CONTRACT (2026-07-11): every survivor also mints a durable opaque candidate_id + snapshot_id (7-day TTL, deterministic candidate_expired on lapse โ€” never a silent recompute). ZERO-DRIFT CHAINING: pass candidate_id to analyze_site / rank_sites instead of transposing coordinates โ€” downstream reads the FROZEN mint, eliminating param-rename/rounding/lost-context drift. geocoded_only=true guarantees every survivor carries both the handoff AND frozen coordinates. Contract doc: dchub.cloud/docs/candidate-lifecycle.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoRestrict to one or more ISOs, comma-separated for a union: PJM, ERCOT, MISO, CAISO, SPP, NYISO, ISONE (ISO-NE). e.g. iso=ERCOT,PJM. Omit for all; combines with max_ttp_months as an intersection
limitNoMax results to return (1-500; default varies by tool)
min_mwNoMinimum project capacity in MW, e.g. 1000 for 1 GW+
statusNoQueue status filter. Default 'active' = still progressing (excludes withdrawn/cancelled/suspended/in-commercial-operation) โ€” cross-ISO safe (SPP labels live projects 'IA FULLY EXECUTED/ON SCHEDULE' not 'active'). Pass 'all' for every status, or a literal label to substring-match
developerNoERCOT only: keep projects whose developer name contains this text (case-insensitive substring, e.g. 'tenaska'). Developer names come from ERCOTQueue (ercotqueue.com, Matt Prusak, CC BY 4.0) joined to ERCOT's own queue by INR; other ISOs carry no developer field, so they return no rows when this is set. Answers that use it carry an attribution block
fuel_typeNoIsolate a fuel by inclusive substring match on the raw label; comma/semicolon-separated for a union, e.g. 'gas' hits GAS/Natural Gas, 'nuclear,hydro' unions both. Runs the fuel filter server-side instead of post-filtering survivors in context
max_fiber_kmNoKeep only survivors within N km of the nearest MAPPED long-haul fiber route endpoint โ€” coarse backbone proximity from a sparse ~260-node dataset over a county-centroid origin, NOT last-mile fiber. Implies geocoded rows only
baseload_onlyNoKeep only firm/dispatchable fuel (nuclear, gas, steam, geothermal, hydro, coal); exclude wind/solar/storage. Firm-vs-intermittent split only โ€” does NOT sub-divide peaker vs combined-cycle gas (no duty-cycle field in the queue). Default false
geocoded_onlyNoKeep only survivors that carry lat/lng (~83% of the queue) โ€” the ones with a ready site_evaluation_handoff you can pipe into analyze_site. Default false
max_ttp_monthsNoMax time-to-power in months (ISO-level avg interconnection wait; HARD cut keeping projects in ISOs at/under this โ€” PJM ~51, CAISO ~40, ISO-NE ~34, MISO ~34, ERCOT ~33, NYISO ~31, SPP ~24; <=30 leaves only SPP)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, and the description layers on substantial extra behavior: it discloses the ~83% coordinate coverage, the site_evaluation_handoff emission, the candidate_id/snapshot_id mint with a 7-day TTL and deterministic candidate_expired, and the zero-drift chaining contract. This is well beyond what the annotations 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-loaded and logically ordered (what it does, filters, return shape, example, alternatives, then the candidate contract). It is on the dense side, with some marketing framing ('token-expensive, error-prone') and versioned contract detail, but nearly every sentence carries actionable content.

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

Completeness5/5

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

For a 10-parameter tool with an output schema, all decision-relevant context is present: filter union/intersection semantics, edge cases that can return zero rows, sibling routing, and downstream chaining. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the schema already documents each parameter, setting a baseline of 3. The description still adds value the schema lacks โ€” the cross-parameter interplay (geocoded_only guarantees both handoff and frozen coordinates), the example invocation, and the practical >=34 thresh-hold advice for max_ttp_months.

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 โ€” 'server-side SET-REDUCTION over the US ISO interconnection queue' โ€” and immediately contrasts it with pulling the raw queue. It explicitly names the two siblings it is not (get_interconnection_queue for ISO-level aggregates, analyze_site for single-site reads), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('high-cardinality siting/arbitrage scans'), when-not (aggregate vs single-site), and names the alternatives for each. Adds a concrete worked example plus a hard caveat on max_ttp_months (use >=34 to include MISO/ERCOT/ISO-NE; <=30 returns nothing), which is exactly the guidance an agent needs before calling.

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

get_renewable_energyRenewable EnergyA
Read-onlyIdempotent
Inspect

FRONT DOOR CHECK โ€” if the question pairs renewables with siting, grid headroom or a market shortlist ("where can I put a 24-7-CFE campus"), call execute_plan(intent="<the user's question, unchanged>") instead. If you want one state's renewable fuel mix or PPA sizing input on its own, get_renewable_energy IS the right call โ€” one round trip, and routing it through the planner would only cost steps. Use when siting a renewable-powered data center, sizing a PPA, reading one US state's utility-scale fuel mix, or assessing RE100/24-7-CFE feasibility. Example: "What is Texas wind+solar capacity and how much utility-scale solar is operating today?" โ€” get_renewable_energy energy_type=solar state=TX. Params: energy_type one of "solar" | "wind" | "combined" (omit for all); state 2-letter US code (e.g. TX, VA, AZ); lat+lon (optional) for the nearest projects within 50mi. Returns: {capacity_mw_total, by_fuel: {solar_utility, solar_rooftop, wind_onshore, wind_offshore}, capacity_factor_pct, top_projects[{name, mw, operator, cod}], state_rps_target_pct, source: "EIA-860 + state RPS"}. Do NOT use for live grid generation (use get_grid_data) or non-US (use get_grid_scoreboard for EU/UK/AU/TW). Give state or lat/lon (decimal degrees); energy_type narrows. Empty = no installations there: widen to the state.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoOptional latitude in decimal degrees (-90 to 90) to find nearest projects within 50mi
lngNoAlias for lon โ€” either name works
lonNoOptional longitude in decimal degrees (-180 to 180) to find nearest projects within 50mi
stateNoUS state abbreviation, e.g. TX, VA, AZ
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
energy_typeNoRenewable type: "solar", "wind", or "combined"; omit for all

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
successNotrue when the query succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
ppa_as_ofNoPPA set last refreshed
ppa_basisNoHow the PPA set is compiled
ppa_countNoPPAs returned
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
data_sourceNoWhere the data comes from
_return_loopNoNext-session delta call (get_changes).
ppa_total_mwNoTotal MW across matching PPAs
filters_appliedNoFilters the gateway applied
ppa_total_countNoTotal PPAs matching
dc_industry_ppasNoData-center PPA rows
installations_countNoInstallations returned
renewable_installationsNoRenewable installation rows
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds genuine behavior: the cost tradeoff of a single round trip vs routing through the planner, the data provenance (EIA-860 + state RPS), and empty-result semantics ('Empty = no installations there: widen to the state'). It does not cover rate limits or pagination, but for a read-only lookup that is minor.

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 with the most consequential routing decision ('FRONT DOOR CHECK'), and each subsequent section (use cases, example, params, returns, exclusions) is labeled. It is longer than necessary because the Params and Returns blocks largely duplicate the schema and the existing output schema, which is mild waste.

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

Completeness5/5

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

Given moderate complexity, a rich input schema, and an output schema, the description still supplies everything an agent needs: routing alternatives, exclusions, scope of coverage, and empty-result handling. Nothing required for correct invocation is missing.

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 description coverage is 100%, so the schema already documents every parameter, including the lat/lon aliases. The description restates energy_type values, state format, and the 50mi lat/lon radius rather than adding new meaning, so baseline 3 applies.

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 (retrieve one US state's utility-scale renewable fuel mix and capacity), and explicitly names the sibling it is not (execute_plan for siting/grid-headroom/market-shortlist questions). An agent can distinguish it from get_grid_data and get_grid_scoreboard without opening other schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (single state fuel mix, PPA sizing input, RE100/24-7-CFE feasibility), when-not-to-use (live grid generation -> get_grid_data; non-US -> get_grid_scoreboard), and a routing alternative (execute_plan with the unchanged user question). This is the strongest possible routing guidance.

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

get_retirement_headroomGet Retirement HeadroomA
Read-onlyIdempotent
Inspect

Use this whenever the user asks where retiring power plants free grid capacity. Scans scheduled EIA-860M generator retirements to find near-term transmission grid headroom โ€” a retiring plant is a CONCRETE headroom event (its POI frees injection capacity), from FILED data, not forecasts. Returns _entity=retirement_headroom_results: retiring generators inside your horizon (name, MW, fuel, prime mover, retirement_date), representative_point, nearest substations with distance_km + count within 25 km, county-level queue_pressure (competing in-progress MW), iso_context (the generator's own EIA balancing-authority code), and a pre-filled site_evaluation_handoff (analyze_site + get_water_risk args, capacity_mw = YOUR target load). Answers "where is grid capacity about to free up", "which retiring plants open injection headroom near me". Try: get_retirement_headroom target_mw=50 horizon_months=18 region_iso=MISO โ€” "50 MW opening near a substation inside 18 months, sidestepping the 4-7yr mega-queue." Honesty: meta.caveat flags that filed dates are subject to ISO reliability reviews (RMR extensions). Use to find WHERE capacity opens next; for what's already queued use get_refined_queue; for one site use analyze_site.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (1-500; default varies by tool)
target_mwYesMinimum required headroom in megawatts (MW) โ€” filters to retiring generators at/above this size. Also passed through as the handoff's analyze_site capacity_mw (the DC you are siting).
region_isoNoOptional target region or ISO (e.g., 'MISO', 'PJM', 'ERCOT', 'SPP', 'CAISO', 'NYISO', 'ISONE'). Matches the generator's own EIA balancing-authority code โ€” real market boundaries, not state lines. Comma-separated for a union.
fuel_filterNoOptional filter for retiring fuel categories, substring-matched (e.g., 'Coal', 'Natural Gas', 'Petroleum').
horizon_monthsYesTime horizon in months to look ahead for planned retirements, 1-120 (e.g., 12, 18, 36).

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds provenance and caveats the annotations cannot: the data is FILED EIA-860M retirements, not forecasts, and meta.caveat flags that filed dates are subject to ISO reliability reviews (RMR extensions). That is genuine behavioral context beyond structured fields.

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 with the primary use case and efficient in its routing sentence, but it enumerates all return fields in a dense run-on even though an output schema already exists. Informative but a bit overloaded; a small trim would help.

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

Completeness5/5

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

With an output schema present, the return-value enumeration is technically redundant, but the description still covers the essentials: purpose, routing, an example invocation, and the RMR caveat. Nothing needed to call this tool correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying that target_mw is also passed through as the handoff's analyze_site capacity_mw and by giving a concrete invocation example (target_mw=50 horizon_months=18 region_iso=MISO). Slightly above baseline.

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 ('Scans scheduled EIA-860M generator retirements to find near-term transmission grid headroom') and distinguishes itself from siblings by naming get_refined_queue and analyze_site as different jobs. An agent can identify this tool without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('whenever the user asks where retiring power plants free grid capacity') and provides a when-not/alternative routing clause ('for what's already queued use get_refined_queue; for one site use analyze_site'). This is close to ideal routing guidance.

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

get_shortlistGet ShortlistA
Read-onlyIdempotent
Inspect

Retrieve a saved shortlist (Phase 5). With refresh=true (default) each site is RE-SCORED against the current national percentile baseline and returns saved_score, current_score, and score_delta_since_saved โ€” so you see whether a site slipped because IT changed or the POPULATION did. The reliable way to maintain a siting campaign across days/weeks. Scoped to your API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe shortlist name to fetch
refreshNotrue (default) = re-score every site against the CURRENT baseline + return drift deltas; false = return the saved snapshots only

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A3.8/5.0
Behavior4/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 the safety profile is covered. The description goes beyond that by disclosing the re-scoring semantics โ€” that refresh=true re-scores against the current baseline and returns saved_score/current_score/score_delta_since_saved, distinguishing site drift from population drift. That is genuine behavioral value not present in the structured fields.

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 with the core action, then the refresh semantics, then usage framing โ€” three sentences with minimal waste. The 'so you see whether a site slipped because IT changed or the POPULATION did' clause is slightly verbose and the caps emphasis is stylistic, but it earns its place by clarifying the delta's meaning.

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 an output schema present, the description needn't enumerate return values, yet it names the key returned fields anyway. Combined with annotations covering safety and a fully documented schema, the definition gives an agent everything needed to call it correctly; only explicit sibling routing is missing.

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?

Schema coverage is 100%, so the schema already documents both parameters, giving a baseline of 3. The description adds interpretive meaning beyond the raw schema: it explains what the refresh outcome means (whether a site slipped because it changed or the population did) and flags the default, which helps the agent decide how to set it.

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 concrete verb+resource ('Retrieve a saved shortlist') and immediately specifies the refresh behavior and returned fields. An agent knows exactly what this does. It does not name sibling tools (e.g., save_to_shortlist or list_saved_sites) to sharpen the boundary, so it stops short of a 5.

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 reliable way to maintain a siting campaign across days/weeks' gives situational context for when to reach for it. However, no explicit when-not or alternative is offered, and the sibling landscape (save_to_shortlist, set_shortlist_alert, list_saved_sites) is not addressed, leaving selection partly to inference.

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

get_subsea_cablesGet Subsea CablesA
Read-onlyIdempotent
Inspect

Subsea (submarine) cable landings near a coordinate, or the global cable catalogue. The physical internet crossing an ocean lands at a finite number of points, and distance to one is a real siting factor for anything latency- or transit-sensitive. Pass lat+lon (+radius_km) for LANDING POINTS near a site โ€” each with name, coordinates and distance_km. Omit coordinates for the CATALOGUE of tracked cables (712 tracked; each with cable_id, name, owners, length_km, rfs_year, is_planned โ€” sparse fields are null, not guessed). โ˜… READ field_coverage AND connectivity_note BEFORE DRAWING A CONCLUSION: cable_count per landing point is NOT populated โ€” the ingest writes the column but the upstream TeleGeography feed does not supply what it derives from, so every row carries the default 0. That is why connectivity_grade comes back null rather than graded: proximity to a landing point does NOT establish how many cables are reachable from it, and DC Hub will not infer a grade it cannot source. A filter over cable_count returns nothing for the same reason. Treat 0 as UNKNOWN, never as "no cables". Answers "which subsea cables land near this Virginia site" and "how far is the nearest cable landing from my campus". Try: get_subsea_cables lat=36.85 lon=-75.98 radius_km=200 โ€” or get_subsea_cables (no args) for the catalogue. Do NOT use for terrestrial fiber routes (get_fiber_intel), a parcel fiber verdict (get_fiber_readiness), metro fiber depth (get_metro_fiber), or internet-exchange / peering density (get_peering_intel).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the site, e.g. 36.85 โ€” with lon, returns landing points near it; omit both for the cable catalogue
lngNoAlias for lon โ€” either name works
lonNoLongitude of the site, e.g. -75.98
limitNoMax results to return (1-500; default varies by tool)
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
radius_kmNoSearch radius in km around lat/lon for landing points (default 200)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial non-obvious behavioral context: cable_count is written as a default 0 by ingest, connectivity_grade returns null, filtering on cable_count yields nothing, and 0 must be read as UNKNOWN. This is exactly the kind of data-provenance caveat an agent cannot infer from structured fields.

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?

Purpose and mode are front-loaded, followed by the critical caveat, example calls, and routing exclusions. It is dense and somewhat repetitive (the cable_count/0 point is restated), but each block is load-bearing for a tool with a genuine data-quality trap.

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

Completeness5/5

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

With an output schema present, the description needn't explain return shape, and it still supplies the unavailable-field caveat, both operating modes, defaults, worked examples, and alternative-tool routing. An agent has everything required to call it correctly and interpret the results.

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 description coverage is 100% and the schema already documents lat/lon aliases, the radius_km default of 200, and that omitting coordinates returns the catalogue. The description largely restates this mode behavior rather than adding syntax or format detail beyond the schema, so the baseline 3 applies.

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?

The description states a specific verb and resource (subsea/submarine cable landings + global cable catalogue) and explicitly distinguishes its two operating modes: coordinate-based landing-point lookup vs. no-arg catalogue. It is immediately separable from sibling fiber tools like get_fiber_intel and get_metro_fiber.

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

Usage Guidelines5/5

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

It gives explicit when-to-use conditions (pass lat+lon+radius_km for landing points, omit coordinates for the catalogue), concrete example calls, and a hard 'Do NOT use for' list naming four alternatives (get_fiber_intel, get_fiber_readiness, get_metro_fiber, get_peering_intel). Nothing about tool selection is left to inference.

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

get_tax_incentivesTax IncentivesA
Read-onlyIdempotent
Inspect

Use when a user asks "what tax breaks does give data centers?" โ€” the data-center tax-incentive packages by US state that drive where capex lands. Example: "What sales-tax and property-tax incentives does Virginia offer a 100MW data center?" โ€” get_tax_incentives state=VA. Params: state (2-letter US code; required). Returns: {state, programs:[{name, type (sales-tax-exemption | property-tax-abatement | income-tax-credit | electricity-tax-discount), value, eligibility_mw, eligibility_jobs, min_investment_usd, expiration_date, source_statute}]}. Cite the statute with attribution to DC Hub (CC-BY-4.0). Do NOT use for the combined multi-factor site read (grid+fiber+water+tax+climate โ€” use analyze_site) or to rank markets on cost (use rank_markets criteria=cheapest_power); this covers the TAX factor for one US state. state is a US state code (e.g. VA); omit for the 50-state overview. Program detail needs a paid key (human_url).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoUS state abbreviation (required), e.g. VA, TX, AZ

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoIncentive programs for the state
countNoRows returned in THIS response
quotaNoCaller quota state (remaining calls, tier).
stateNoState queried
statusNoServing status
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
last_updatedNoIncentive table last reviewed
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds real non-annotation context: program detail requires a paid key (human_url), results must cite the statute with DC Hub CC-BY-4.0 attribution, and the response shape is spelled out. It stops short of stating rate limits or freshness of the underlying statute data.

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 with the trigger phrase and the identifying scope before the example, return shape, licensing, and exclusions. Dense and mostly waste-free, though the inline returns block duplicates the output schema and makes it longer than necessary.

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?

Covers scope, alternatives, entitlement gating, licensing, and output fields โ€” more than enough for a single-param read tool with annotations and an output schema. The only soft spot is restating the return shape that the output schema already defines, plus the required/optional ambiguity for state.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds behavior the schema does not carry: the 'omit for the 50-state overview' mode and the concrete format (2-letter code, e.g. VA). Mild tension with the schema text marking state as required, which the description resolves by describing the no-state mode.

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+resource+scope: 'data-center tax-incentive packages by US state.' It names the exact sibling it is not (analyze_site, rank_markets) and pins itself to the TAX factor for a single US state, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Explicit trigger condition ('when a user asks what tax breaks does <state> give data centers'), a concrete example call, and two named exclusions with the alternative tool for each (analyze_site for the combined site read, rank_markets criteria=cheapest_power for cost ranking). Both when-to-use and when-not-to-use are covered.

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

get_water_riskWater RiskA
Read-onlyIdempotent
Inspect

Use this whenever the user asks about water stress or cooling-water risk at a site. FRONT DOOR CHECK โ€” if you need a SITE VERDICT spanning grid + fiber + water + tax + climate, call execute_plan(intent="<the user's question, unchanged>") rather than hand-chaining this with its siblings. If you want the WATER factor on its own, get_water_risk IS the right call โ€” one round trip, free tier, no planner overhead. Use when scoring a US site for cooling-water sustainability โ€” the water-risk factor engineering site-selectors screen before committing to evaporative cooling. Example: "Is this Phoenix parcel water-constrained for a 100MW build?" โ€” get_water_risk lat=33.45 lon=-112.07 (or get_water_risk state=AZ, or location="phoenix"). Params: ONE of lat+lon (-90..90 / -180..180), state (2-letter US), or location (a DC Hub market name or slug, resolved to that market's PUBLISHED CENTROID with a resolved_from block saying so; a market-level read, not your parcel, and a trailing state is not stripped); lat/lon gives the most precise read. Returns: {water_stress_score (0-100, higher=worse), drought_category (D0-D4), outlook_12mo, cooling_water_assessment, source}. Joined to USGS water-stress + US Drought Monitor. Free tier. Do NOT use for nearby physical infrastructure (use get_infrastructure) or a combined multi-factor site verdict spanning grid+fiber+water+tax+climate (use analyze_site); this covers the WATER factor only. US only: give state or lat/lon (decimal degrees). Free = latest week; longer history needs a paid key.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90) for the most precise water-risk read, e.g. 33.45
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180), e.g. -112.07
stateNoUS state abbreviation as an alternative to lat/lon, e.g. AZ
latitudeNoAlias for lat โ€” either name works
locationNoMarket NAME or metro slug instead of coordinates, e.g. "phoenix", "northern-virginia", "dallas". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. A MARKET-level read, not your parcel; pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.
longitudeNoAlias for lon โ€” either name works

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the lookup executed
quotaNoCaller quota state (remaining calls, tier).
stateNoState queried
sourceNoSource of the drought data
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
successNotrue when the query succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
queried_atNoTimestamp of the query
source_urlNoSource URL
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
latest_weekNoMost recent weekly reading
_return_loopNoNext-session delta call (get_changes).
weekly_historyNoWeekly drought history
dominant_severityNoDominant drought severity category
drought_categoriesNoPercent of area per drought category
current_drought_pctNoShare of state in drought, %
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safe/idempotent/open-world profile, but the description adds real behavior: data provenance (USGS water-stress + US Drought Monitor), a free-tier limit (latest week only; longer history needs a paid key), US-only scope, and the fact that a location read is resolved to a published market centroid rather than a parcel. Deducts only because the 'Returns:' block largely restates the existing output schema and 'Free tier' is stated twice.

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?

Front-loads usage well, but the text is long and carries redundancy: 'Free tier' appears twice, and execute_plan/analyze_site are each invoked in two places (the FRONT DOOR CHECK and the closing Do-NOT). Parameter and return detail is interleaved with routing advice instead of being grouped, so it reads as accumulated rather than edited.

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 an output schema present, return values needn't be explained, and the description still covers usage, exclusions, the parameter-exclusivity rule, geographic limits, cost tiers, and data sources โ€” enough for an agent to call correctly. The only thin spot is that the semantics of a state-only read (how it aggregates) are implied rather than stated.

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?

Schema coverage is 100%, so 3 is the floor; the description earns above that by stating the exclusivity rule the schema never expresses โ€” 'ONE of lat+lon, state, or location' โ€” and by noting lat/lon is the most precise read and that a trailing state is not stripped from a location string. That is decision-relevant meaning beyond the per-parameter descriptions.

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 โ€” returns the WATER factor (water stress / cooling-water risk) for a site โ€” and names the siblings it is not: analyze_site for a combined verdict, get_infrastructure for nearby physical assets, execute_plan for a multi-factor plan. An agent can route between these without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-to-use (water stress or cooling-water risk at a site; scoring a US site for cooling-water sustainability) plus explicit when-not-to-use with named alternatives in the closing sentence. The FRONT DOOR CHECK adds a decision rule for the multi-factor case. Nothing is left to inference.

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

grid_transition_radarGrid Transition RadarA
Read-onlyIdempotent
Inspect

Forward-looking "where is the next hyperscale-friendly grid emerging" radar. Returns the US markets + ISOs with the strongest near-term emergence signal (BUILD verdict + excess-power headroom + short time-to-power), an ISO rollup, and a grid-headroom leaderboard. With a paid key, also the transition thesis: which ISO is opening up and why. The predictive counter to retrospective "where capacity landed" reports. Answers "where should I be looking next", "which market is about to become buildable". Try: grid_transition_radar max_months=24. Do NOT use for the current ISO queue snapshot (use get_interconnection_queue) or a present-day market ranking (use rank_markets); this is the forward-looking emergence radar.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of emerging markets to return
max_monthsNoMaximum acceptable time-to-power in months for the emergence signal, 1-120, e.g. 24

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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/non-destructive/closed-world, so safety is covered. The description adds genuine behavioral context beyond that: the paywall gate ('with a paid key, also the transition thesis') and the composition of the response (emergence signal, ISO rollup, leaderboard). It does not mention rate limits or pagination, so it falls short of a 5.

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 with the core purpose and the alternative routing, and every element is relevant. It is somewhat long and has minor redundancy (the quoted agent questions overlap the opening radar metaphor), keeping it from a 5.

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

Completeness5/5

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

With an output schema present and annotations covering the safety profile, the description supplies everything else an agent needs: the emergence-signal composition, the paid-key gating, the exemplar call, and the sibling exclusions. Nothing required to call it correctly is missing.

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 100%, so the schema already documents both limit and max_months. The description only restates max_months via an example call and provides no additional syntax or semantics. Baseline 3 is appropriate when the schema does the heavy lifting.

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+resource and scope ('forward-looking where-is-the-next-hyperscale-friendly-grid-emerging radar') and enumerates precisely what it returns (US markets + ISOs, ISO rollup, grid-headroom leaderboard). It explicitly distinguishes itself from sibling tools rank_markets and get_interconnection_queue, so an agent can identify it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use phrasings ('where should I be looking next', 'which market is about to become buildable') and explicit when-NOT-to-use routing to the two sibling alternatives by name. This is the strongest form of selection guidance.

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

hyperscaler_dealsHyperscaler Deal TrackerA
Read-onlyIdempotent
Inspect

Hyperscaler AI Deal Tracker โ€” live feed of Stargate, OpenAI, Anthropic, Microsoft, Oracle, CoreWeave, AMD, NVIDIA, sovereign-AI deals. Pulls from dchub news pipeline, extracts $-figures + MW via regex, classifies by actor. 10-min refresh. Use for tracking AI capex events ($1B+/week typical), capacity announcements, and competitive intel. Do NOT use for the full historical M&A comp set (use list_transactions) or a single-deal teardown with grid context (use deal_autopsy); this is the live $1B+ AI-capex feed. limit 1-500. Hyperscaler leases and purchases only; for all M&A use list_transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recent AI-capex deals to return (default 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dealsNoLive AI-capex deal feed entries, newest first
errorNoFeed error, if any (null on success)
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
landingNoHuman landing page URL
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
feed_nameNoFeed identity line
live_feedNoLive feed URL
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
computed_atNoFeed computation timestamp (10-min refresh)
methodologyNoHow deals are extracted and classified
_return_loopNoNext-session delta call (get_changes).
result_countNoNumber of deals returned
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

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/non-destructive/openWorld=false, so safety is covered; the description layers on data provenance (dchub news pipeline), a 10-min refresh cadence, regex extraction of $-figures and MW, actor classification, and coverage scope (hyperscaler leases/purchases only). This is meaningful behavioral context beyond the structured fields, though the scope caveat is stated twice.

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 with the identity and actor coverage, then usage routing, both appropriately sized. It loses a point for redundancy: '$1B+ AI capex' recurs and 'use list_transactions' plus the M&A scope caveat appear twice in slightly varying form.

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

Completeness5/5

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

Output schema exists so return values need no explanation; the single parameter is fully documented in the schema; and annotations carry the safety profile. For a one-parameter read-only feed, nothing an agent needs to call it correctly is missing.

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?

Only one parameter (limit) with 100% schema description coverage, so the schema already carries the semantics. The description's 'limit 1-500' merely restates the schema's min/max bounds and adds no new meaning; baseline 3 applies when the schema does the work.

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 resource (live AI-capex deal feed) with named actor coverage (Stargate, OpenAI, Microsoft, Oracle, CoreWeave, NVIDIA, etc.) and names the siblings it is not (list_transactions, deal_autopsy). An agent can distinguish this from the other ~80 tools without opening the schema.

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

Usage Guidelines5/5

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

Explicit 'Use for tracking AI capex events/capacity announcements/competitive intel' plus an explicit 'Do NOT use for...' clause that routes the agent to list_transactions for the historical M&A set and deal_autopsy for single-deal teardowns. When-to-use, when-not, and alternatives are all present.

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

list_saved_sitesList Saved SitesA
Read-onlyIdempotent
Inspect

NEEDS A KEY (free): saved sites are per-account, so a keyless call returns auth_required, not an empty list โ€” if you have no key, call claim_free_key FIRST (one step, no email), then this. Use when a user asks to see or review their saved DC Hub shortlist in-chat, or wants to know what moved on it. Example: "What sites have I saved?" / "Did any of my saved sites move?" โ€” list_saved_sites. Params: since (optional โ€” "24h"/"7d"/ISO, default 7d โ€” the delta window). Returns: each saved site with name, market, lat/lon, saved DCPI score, target MW, notes โ€” PLUS live deltas: verdict_was/verdict_now (e.g. CAUTION โ†’ BUILD), excess-power move over the window, current vs at-save DCPI, alerts armed/fired, new facilities nearby, and a portfolio summary flagging which sites moved and which have no alert armed. Do NOT use to add a site (use save_site) or to download the list as a file (use export_dataset); this is the in-chat read-back.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoDelta window for per-site movement: "24h", "7d" (default) or an ISO-8601 timestamp โ€” pass your cached generated_at from last session

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is free. The description adds the high-value behavioral fact those annotations omit: the tool requires a key, a keyless call returns auth_required rather than an empty list, and claim_free_key is the fix. That auth prerequisite and the return-delta behavior are exactly the kind of 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?

The critical auth prerequisite is front-loaded before usage and params, which is the right ordering. It is dense and slightly long, with the Returns enumeration being the least essential part given an output schema exists, but every remaining clause carries actionable information.

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

Completeness5/5

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

For a keyed read tool with an output schema, everything an agent needs is present: auth requirement and remediation, usage triggers, the one parameter, and explicit alternatives to avoid. Nothing about correct invocation is left missing.

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?

Schema coverage is 100%, so the baseline is 3. The description reinforces the sole parameter as "the delta window" with default 7d and supplies a concrete usage hint (pass your cached generated_at as the ISO timestamp) that adds practical meaning beyond the schema text.

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+resource (list_saved_sites reads back the user's saved shortlist) and immediately differentiates itself from save_site (add) and export_dataset (download) in the same breath. An agent can distinguish this from get_shortlist and other list tools without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers with concrete user phrasing ("What sites have I saved?", "Did any of my saved sites move?") and names the two wrong-tool alternatives with the correct sibling for each. The when-not guidance (do not add, do not download) is explicit rather than inferred.

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

list_standing_intentsList Standing IntentsA
Read-onlyIdempotent
Inspect

List the standing intents registered on your key: webhook watches, plus your capacity requirements (kind "capacity", intent_id cap_...). Read-only. Returns each intent_id, kind, watch params, webhook_url and enabled state; capacity items also carry status, confirmed, expires_at, last_alert_at and matching_now. Use it to find the intent_id for delete_standing_intent, or to confirm a register landed. Requires a key (or an OAuth connection for capacity items). Answers "what am I currently watching". Do NOT use to create a watch (register_standing_intent) or for one-shot reads (get_news / list_transactions).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so safety is covered. The description adds real behavioral context beyond that: the key/OAuth requirement for capacity items and the enabled/status state on returned items. It stops short of disclosing pagination or limits, so it is strong but not maximal.

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?

Dense but well front-loaded: purpose, read-only, return shape, usage, then exclusions. Every sentence carries information, though the enumerated return fields are somewhat redundant given an output schema exists.

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

Completeness5/5

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

Given zero params, full annotation coverage and an output schema, the description supplies everything an agent needs: scope, auth requirements, the routing action (grab intent_id for delete) and the exclusions. Nothing material is absent.

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?

Zero parameters, which is the baseline-4 case. The description adds no parameter guidance, but with an empty schema and no params to document, nothing is missing.

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+resource ('List the standing intents registered on your key') and enumerates exactly what is covered (webhook watches plus capacity requirements). It names the distinguishing sibling tools it is not (register_standing_intent, get_news, list_transactions), so an agent can separate it from the crowded sibling set without opening a schema.

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

Usage Guidelines5/5

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

Explicitly gives when-to-use (finding an intent_id for delete_standing_intent, confirming a register landed, answering 'what am I currently watching') and when-not-to-use with named alternatives. Nothing is left to inference.

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

list_transactionsM&A TransactionsA
Read-onlyIdempotent
Inspect

M&A and capital transactions in the data center sector โ€” 1,700+ tracked deals (2019-present), each with its disclosed value where public (many private deals are undisclosed). Returns deal name, buyer, seller, value, date, market, target operator, type (acquisition/JV/refinance/recap). Filter by date range (date_from/date_to, ISO-8601), min_value_usd, region, buyer, or seller. Answers "which data-center deals closed this year", "what was that acquisition worth". Try: list_transactions date_from=2026-01-01 min_value_usd=1000000000. There is no year parameter โ€” use date_from/date_to. Broad M&A and capital-deal flow with filters; do NOT use for hyperscaler-specific lease/PPA/JV activity (use hyperscaler_deals) or a single-deal post-mortem (use deal_autopsy). limit 1-500 (free 10), offset 0-100000; total_count is the full match count. Empty = loosen buyer/seller/value filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
buyerNoFilter by acquiring company name, e.g. Blackstone, KKR, Digital Realty
limitNoMax results to return (1-500; default varies by tool)
offsetNoPagination offset, 0-based (skip this many results)
regionNoGeographic region filter, e.g. us, eu, apac, americas
sellerNoFilter by selling/target company name, e.g. CyrusOne
date_toNoLatest deal date, ISO-8601 (YYYY-MM-DD)
date_fromNoEarliest deal date, ISO-8601 (YYYY-MM-DD)
deal_typeNoDeal type filter, e.g. acquisition, jv, refinance, recap
max_value_usdNoMaximum disclosed deal value in US dollars
min_value_usdNoMinimum disclosed deal value in US dollars, e.g. 1000000000 for $1B+

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoServing note
tierNoTier the response was served at
countNoRows returned in THIS response
quotaNoCaller quota state (remaining calls, tier).
cachedNoWhether the response was served from cache
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
successNotrue when the deal query succeeded
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
data_sourceNoWhere the deal set comes from
total_countNoTotal deals matching the filter
total_valueNoAggregate disclosed value across the returned set (null when not computed)
_return_loopNoNext-session delta call (get_changes).
transactionsNoM&A / capital-transaction rows
total_value_unitNoUnit of total_value
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description layers on data-quality caveats that matter: many private deals undisclosed, 'free 10' result cap, total_count = full match count, and pagination bounds. These are behavioral traits annotations cannot express.

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 with scope, then return fields, then filters, then a concrete example call. Sentence flow is efficient, though the filter list partially duplicates the schema and the parenthetical near-example adds mild redundancy, keeping it short of a 5.

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

Completeness5/5

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

With 10 optional parameters, an output schema, and full annotations, the description supplies everything else needed: scope, returned fields, routing alternatives, pagination caps, and empty-result remediation. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value: it flags that there is no `year` parameter and directs the agent to date_from/date_to, and it restates the free-tier limit and offset range. That goes beyond the schema's per-field descriptions.

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 resource (M&A and capital transactions in the data center sector), quantifies scope (1,700+ deals, 2019-present), and enumerates returned fields. It explicitly distinguishes itself from hyperscaler_deals and deal_autopsy, so an agent can route without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use examples ('which data-center deals closed this year') and, unusually, explicit when-NOT-to-use routing: hyperscaler lease/PPA/JV activity โ†’ hyperscaler_deals; single-deal post-mortem โ†’ deal_autopsy. It also tells the agent what to do on empty results (loosen buyer/seller/value filters).

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

plan_fiber_leadinPlan Fiber LeadinA
Read-onlyIdempotent
Inspect

Plan N diverse, road-following fibre lead-in routes from a candidate data-center site to a carrier hotel / POP, with indicative build cost and a route-diversity read. Answers "can I get N diverse fibre routes into this site, how far, how much, and where do they share a corridor?". Example: plan_fiber_leadin from="250 Paringa Road, Murarrie QLD" to="20 Wharf Street, Brisbane City QLD" n=4. Params: from (lat,lng OR street address), to (lat,lng OR address โ€” e.g. a NextDC/Equinix POP), n (1-6 routes, default 4), fibre ("720F"|"1440F"), bore_m (river/rail bore length in metres, optional). Returns per-route length_km + GeoJSON geometry, total_route_km, diversity {min_separation_m_midhaul, shared_street_km}, and indicative cost {capex_usd, opex_usd_yr}. INDICATIVE auto-routed road corridors โ€” NOT engineered alignments; subject to survey, DBYD and carrier confirmation. Do NOT use for a single site-suitability score (use analyze_site) or fibre-provider footprints (use get_fiber_intel).

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of diverse routes to plan, 1-6 (default 4)
toYesDestination carrier hotel/POP as "lat,lng" OR an address, e.g. "20 Wharf Street, Brisbane City QLD"
fromYesOrigin site as "lat,lng" OR a street address, e.g. "250 Paringa Road, Murarrie QLD"
fibreNoFibre count spec for cost estimate: "720F" or "1440F"
bore_mNoRiver/rail bore length in metres to add to the route, 0-100000 (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive. The description adds real behavioral context beyond that: results are 'INDICATIVE auto-routed road corridors โ€” NOT engineered alignments', and are subject to survey/DBYD/carrier confirmation. It would rate higher if it disclosed any latency, cost or rate-limit behavior, but the caveat is genuinely valuable.

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 with purpose, then example, params, returns, caveats, and exclusions. The 'Params:' enumeration partly duplicates the schema, but the ordering prioritizes the most useful routing information first and no sentence is dead weight.

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

Completeness5/5

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

An output schema exists, yet the description still summarizes the return shape (per-route length_km + GeoJSON, total_route_km, diversity, cost). Combined with the caveats and exclusions, an agent has everything needed to call and interpret this tool correctly.

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?

Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by clarifying accepted formats ('lat,lng OR street address'), that 'to' may be a NextDC/Equinix POP, that bore_m is river/rail bore, and enumerating fibre options โ€” meaningfully richer than the schema text.

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 ('Plan N diverse, road-following fibre lead-in routes') with scope, plus the question it answers. It explicitly names two sibling tools it is NOT for, letting an agent distinguish it without opening a schema.

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

Usage Guidelines5/5

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

Gives a concrete worked example, names the alternative tools (analyze_site for single-site suitability, get_fiber_intel for provider footprints), and states the not-for conditions explicitly. Nothing is left to inference.

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

plan_queryPlan QueryA
Read-onlyIdempotent
Inspect

INSPECT-ONLY โ€” returns the plan WITHOUT running it. For a real multi-step DC Hub question call execute_plan(intent="...") instead: it uses the SAME deterministic no-LLM planner and then RUNS the sequence server-side, returning the answers in one envelope. Reach for plan_query only to review, log, diff or audit a plan before executing it yourself. Deterministic keyword routing over the tool registry โ€” no LLM, no network, same intent always returns the same plan (free). Returns _entity=query_plan {best_tool, intent_confidence + workflow_confidence (dual 0-1: question-read vs executability), reason, planner_rationale, recommended_sequence:[{step, tool, depends_on, estimated_calls, why, args_hint}], execution_waves (steps grouped into concurrency waves), execution_strategy.parallel_groups, execution_estimate {estimated_calls, estimated_latency_ms, parallelizable}, alternatives (each with when + rejected_because), coverage_notes, matched_classes} plus a versioned replay (schema_version 1): planner_version, decisions:[{id, step, kind, status, decision, rationale, decision_confidence, depends_on}], rejected:[{id, tool, reason}], execution_graph:{waves, parallel_groups} โ€” auditable and machine-readable, safe to log and diff across versions. args_hint values in come from the named earlier step โ€” substitute them, never invent them. Pass structured hints via context (lat/lon, iso, market, capacity_mw, candidate_id, state, since) to sharpen the plan. For a family-level browse use discover_tools. This tool plans โ€” it never executes; tools/list stays canonical for schemas. Returns the ordered tool plan for an intent without running it; run the steps yourself or use execute_plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesNatural-language description of what you are trying to find out, e.g. "rank markets for a 200MW AI campus" or "how much power is available in ERCOT"
contextNoOptional structured hints: {lat, lon, iso, market, capacity_mw, candidate_id, state (2-letter), since} โ€” sharpens args_hint values and routing (e.g. lat/lon boosts the site-analysis route)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the intent was routed
noteNoRouter disclaimer โ€” deterministic keyword routing, tools/list stays canonical
quotaNoCaller quota state (remaining calls, tier).
intentNoThe natural-language intent that was routed (echoed back)
reasonNoWhy the router chose best_tool โ€” the matched keywords / context signals
replayNoFIRST-CLASS VERSIONED replay object (r-planner-v5.1, ChatGPT schema review): the planner's auditable decision trail โ€” routing + per-step selection + rejections + concurrency graph, each decision with a stable id + status, keyed by planner_version so an agent can cite "Decision D2 selected rank_markets becauseโ€ฆ" and downstream tooling survives planner upgrades.
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
chainingNoZero-drift chaining guidance (candidate_id contract) when the plan crosses get_refined_queue โ†’ analyze_site / rank_sites
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
best_toolNoThe single best first tool to call for this intent (exact name from tools/list)
confidenceNoDeterministic router confidence, 0-1 โ€” same intent always yields the same score; low values mean the intent was ambiguous (check alternatives). Alias of intent_confidence (v1 back-compat).
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
alternativesNoAdjacent tools for nearby intents, including runner-up intent classes
intent_classNoThe matched intent class (market_ranking | capacity_search | market_comparison | grid_headroom | interconnection_queue | hosting_capacity | water_climate | site_analysis | deals_ma | fiber_power_pairing | fiber | price | incentives_tax | power_timeline | changes_delta | facility_search | unknown)
routing_hintNoADVISORY router: collapses 94 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata.
coverage_notesNoTier/coverage caveats for the recommended tools (free-tier previews, depth gates, honest-unknown semantics)
parallelizableNotrue when at least one execution wave holds 2+ steps โ€” the plan is not purely sequential
estimated_callsNoTotal estimated API calls for the whole plan (sum of per-step estimates)
execution_wavesNoThe execution graph as concurrency waves: array of arrays of step numbers; every step in a wave can run concurrently once earlier waves finish (derived from depends_on)
matched_classesNoEvery intent class that scored, with its score โ€” the router's full deterministic trace
intent_confidenceNoHow confident the router is that it read the QUESTION right (0-1, deterministic) โ€” driven by keyword score + margin over the runner-up class
planner_rationaleNoOne sentence on why the PLAN has this shape (ordering / parallelism / what mints what) โ€” distinct from reason, which covers intent routing
execution_estimateNor-planner-v3 deterministic cost preview: {estimated_calls (plan NODE count โ€” one per step; the top-level estimated_calls is the fan-out-weighted API-call total), estimated_latency_ms (sum over waves of the SLOWEST tool in each wave, from a static 3-tier table: heavy synthesis 3000ms / standard read 1200ms / light free read 500ms), parallelizable (any wave holds 2+ steps)}
execution_strategyNor-planner-v3 explicit strategy: {parallel_groups: string[][] โ€” execution_waves rendered as TOOL-NAME arrays (e.g. [["get_grid_intelligence","get_interconnection_queue","get_refined_queue"]]), note: plan-only disclaimer โ€” this tool only plans; execute the sequence yourself}
workflow_confidenceNoHow confident the router is that the plan can EXECUTE cleanly with the signals in hand (0-1, deterministic) โ€” boosted by resolved context signals, docked for placeholder args the user must still supply; step-minted placeholders don't dock
recommended_sequenceNoOrdered tool sequence mirroring the DC Hub recipe for the matched intent class
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.
workflow_confidence_basisNoThe arithmetic behind workflow_confidence: {resolved_signals, minted_placeholders, user_supplied_placeholders}

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds meaningful traits beyond them: deterministic keyword routing over the registry, no LLM, no network, identical intent always yields the same plan, and it is free. It also flags that bracketed args_hint values must be substituted, not invented.

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?

Front-loading is excellent โ€” the inspect-only constraint and the execute_plan alternative come first. However, a large mid-section enumerates the entire return envelope and replay schema field-by-field, which is redundant given an output schema exists, and the closing sentence restates 'this tool plans โ€” it never executes' already covered in the opening.

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

Completeness5/5

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

For a planner tool with an output schema, annotations, and 100% schema coverage, the description is more than adequate: it covers purpose, the read-only/preview distinction, deterministic behavior, alternatives, and how to sharpen inputs. An agent has everything needed to call it correctly.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value beyond the schema by explaining how context hints (lat/lon, iso, market, capacity_mw, candidate_id, state, since) sharpen routing and args_hint values, e.g. lat/lon boosting the site-analysis route.

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?

Opens with 'INSPECT-ONLY โ€” returns the plan WITHOUT running it' โ€” a specific verb (plan/return), resource (the plan), and an explicit scope boundary. It directly contrasts itself with the sibling execute_plan, so an agent can distinguish the two 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 Guidelines5/5

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

Explicitly states when to use the alternative: real multi-step questions go to execute_plan(intent=...), which runs the same planner server-side. It also names a second alternative for browsing ('use discover_tools') and states the narrow conditions for using this tool (review, log, diff, audit). Nothing is left to inference.

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

predict_market_trajectoryPredict Market TrajectoryA
Read-onlyIdempotent
Inspect

Forecast a DCPI market's near-term trajectory (next 1-8 quarters). Projects excess_power_score and constraint_score forward with confidence bands that WIDEN with horizon, from DC Hub's daily DCPI snapshot history โ€” the only source that can, because it owns the time-series. Use to answer "is this market trending toward BUILD or AVOID?" or "will Dallas power stay tight over the next 6 months?". Params: market_slug (required, metro slug e.g. dallas, phoenix, northern-virginia โ€” valid slugs come from rank_markets / get_market_dcpi_rank); horizon_quarters (optional 1-8, default 4; 2 = ~6 months out). Returns {market_slug, method, basis{history_points, history_span_days, slope_per_day, trend}, horizon_quarters, projection[{quarter_out, excess_power_score, excess_power_band, constraint_score, constraint_band}], caveat, snapshot_record}. HONEST: linear trend extrapolation, NOT a guarantee โ€” bands widen with horizon and short history; needs >=3 daily snapshots or it declines. Do NOT use for a single point-in-time verdict (use get_market_dcpi_rank) or to rank many markets (use rank_markets).

ParametersJSON Schema
NameRequiredDescriptionDefault
market_slugYesMarket slug (metro), e.g. dallas, phoenix, northern-virginia โ€” valid slugs come from rank_markets / get_market_dcpi_rank
horizon_quartersNoForecast horizon in quarters (1-8, default 4); 2 = ~6 months ahead

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/no-destroy safety, and the description goes well beyond them: it discloses the method (linear trend extrapolation), that confidence bands widen with horizon and short history, and the >=3 snapshot minimum that causes refusal. The 'HONEST' caveat is exactly the behavioral context an agent needs for a forecast tool.

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?

Purpose is front-loaded and most sentences earn their place (routing, caveat, requirement). The param and return-shape blocks are dense lists that partly duplicate structured fields, which is slightly verbose but still useful for scanning.

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

Completeness5/5

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

Even though an output schema exists, the description clarifies the forecast method, caveat, horizon behavior, and prerequisites, so nothing an agent needs is missing. It is complete for a forecasting tool with moderate complexity.

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 description coverage is 100%, so both parameters are already fully documented in the schema. The description restates market_slug and horizon_quarters with the same example slugs and '2 = ~6 months' note the schema already carries, adding little new meaning. Baseline 3 is appropriate when the schema does the heavy lifting.

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+resource+scope ('Forecast a DCPI market's near-term trajectory (next 1-8 quarters)') and names exactly what is projected. It distinguishes itself from sibling tools like get_market_dcpi_rank and rank_markets by defining its forecasting role. An agent can tell it apart from its siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use with concrete example questions ('is this market trending toward BUILD or AVOID?') and explicit when-not-to-use routing ('Do NOT use for a single point-in-time verdict (use get_market_dcpi_rank) or to rank many markets (use rank_markets)'). It also states a prerequisite (needs >=3 daily snapshots or it declines), leaving nothing to inference.

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

rank_marketsRank MarketsA
Read-onlyIdempotent
Inspect

Use this whenever the user asks where a data center can get grid power, how fast, or whether a market is a BUILD, CAUTION or AVOID (e.g. "Where can a 100 MW data center get power fastest?"): DCPI scores 300+ markets daily on Excess Power and Grid Constraint, CC BY 4.0. For a ranked list on power questions, call with criteria="ai_ready". Call when the user wants a ranked list of data-center markets: top N by cheapest_power, most_capacity, most_operators, fastest_growing, best_overall, or ai_ready (where new AI load can land, per DCPI). Filter by region, min_capacity_mw. Returns ranked rows with score, MW and a slug for follow-ups; score is the sort value, not a 0-100 scale, and score_basis says what it is (ai_ready omits it and explains its composite in methodology). Keyless: a trimmed preview; a free key gets a few full lists a day. Ex: "Top 10 US markets, ai_ready." Returns market slugs to feed get_market_intel and get_market_dcpi_rank. limit 1-500; set projection=identity_only to save tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of markets to return, 1-50 (default 10)
fieldsNoReturn ONLY these row fields (array or comma string) โ€” a token diet. The response envelope (citation, provenance, as_of, coverage, request_interpretation, the human relay line) is NEVER projected away; a projection narrows ROWS only.
regionNoRegion scope: "global", "us" (default), "canada", "eu", "apac", or "americas"
criteriaNoRanking criterion: "cheapest_power", "most_capacity", "most_operators", "fastest_growing", "best_overall" (default), or "ai_ready" (DCPI buildability โ€” where new AI load can land, for AI-campus siting; region us/global)
projectionNoNamed field preset, cheaper to send than a field list: market_summary (ranking rows), siting_summary (site/point rows), identity_only (ids + names).
min_capacity_mwNoMinimum existing capacity filter in megawatts (MW), e.g. 100

Output Schema

ParametersJSON Schema
NameRequiredDescription
tierNoTier the response was served at
quotaNoCaller quota state (remaining calls, tier).
regionNoRegion filter applied
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
cite_asNoReady-made attribution line
resultsNoRanked markets
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
criteriaNoRanking criterion used
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
data_sourceNoWhere the data comes from
methodologyNoMethod note
score_basisNoHow the score is computed
_return_loopNoNext-session delta call (get_changes).
result_countNoRows returned in THIS response
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: keyless access returns only a trimmed preview, a free key yields a few full lists per day, score is a sort value rather than a 0-100 scale, score_basis identifies the metric, and ai_ready omits score_basis while documenting its composite in `methodology`. This is unusually rich behavioral context.

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?

Trigger-first opening is well front-loaded, but the body is one dense run-on paragraph with overlapping statements ('Use this whenever...' and 'Call when the user wants a ranked list...' say much the same thing). Several clauses about score/score_basis/methodology could be tightened without losing meaning.

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?

An output schema exists, so explaining return values is optional, yet the description usefully covers return shape at a high level (ranked rows with score, MW and slug), plus auth tiers, rate limits, and follow-up tools. The only unresolved item is the limit range inconsistency, which may prompt incorrect calls.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real value: it names the full criteria vocabulary, gives a worked parameterization ('Top 10 US markets, ai_ready'), and explains projection=identity_only as a token-saving preset. It does not resolve the discrepancy between the stated 'limit 1-500' and the schema's own '1-50' text, which is a minor 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?

The description states a concrete verb+resource (rank 300+ data-center markets daily) and enumerates the exact ranking criteria (cheapest_power, most_capacity, most_operators, fastest_growing, best_overall, ai_ready). It also distinguishes itself from siblings by naming the downstream tools whose slugs it produces (get_market_intel, get_market_dcpi_rank).

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?

Strong trigger language ('Use this whenever the user asks where a data center can get grid power, how fast, or whether a market is a BUILD, CAUTION or AVOID') plus a worked example. However it never states when NOT to use it versus the closely named sibling get_market_dcpi_rank or rank_sites, which an agent could easily confuse with this tool.

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

rank_sitesRank SitesA
Read-onlyIdempotent
Inspect

Deterministic multi-site ranking/optimization under constraints โ€” the normalization contract that lets you compare sites across separate analyze_site calls WITHOUT dropping into code. Pass candidates you already enriched (each an object with lat/lng + metric fields like risk_resilience, water_stress, fiber_km โ€” pull these from analyze_site + get_refined_queue and pass site_evaluation_handoff through untouched), hard constraints, and weighted objectives; get back entity=ranked_sites: top_k ranked with rank, objective_score, per-field normalized{} (0-100 relative to the set), and normalization_basis. objectives use SIGNED weights: +weight maximizes a field (e.g. risk_resilience:1), -weight minimizes it (e.g. water_stress:-0.6, fiber_km:-0.4). constraints are hard filters, fail-closed on a missing field. Use for "pick the best N sites under constraints"; for one site use analyze_site; to get the candidate set first use get_refined_queue. SCORING MECHANICS (2026-07-11): a candidate missing a validated objective is weight-RENORMALIZED over the objectives it carries and the gap is DECLARED in missing_objectives (never silently scored 0); a candidate carrying none scores null and ranks last. percentile=true fields without a population baseline fall back to RELATIVE in-batch scoring (basis reported per-objective in objective_status). CANDIDATE CONTRACT: candidates may be {candidate_id: "candโ€ฆ"} entries from get_refined_queue โ€” frozen identity (lat/lng/capacity_mw/fiber_km/iso) loads from the mint, your metrics overlay the rest; expired/unknown ids are dropped AND declared in candidate_contract, never re-resolved.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNoHow many top-ranked sites to return (1-50, default 3)
absoluteNofalse (default) = min-max normalize within THIS batch (best-in-set, NOT stable across runs). true = score on a FIXED 0-100 scale for CROSS-RUN-STABLE, auditable scores โ€” use ONLY when the objective fields are already 0-100 (analyze_site scores like risk_resilience/fiber_connectivity), not raw distances like fiber_km
candidatesNoArray of candidate objects. PREFERRED: {candidate_id: "cand_โ€ฆ", <your metric fields>} using ids from get_refined_queue โ€” frozen coordinates/capacity/fiber_km load from the mint (zero transcription drift), your enrichments (e.g. overall_score from analyze_site) overlay. Legacy: {id?, lat?, lng?, <metric fields>} flat objects also work. Omit if using shortlist_name
objectivesNoWeighted objectives {field: signedWeight} โ€” +weight maximizes, -weight minimizes. e.g. {"water_stress": -0.6, "fiber_km": -0.4}. Omit with shortlist_name to reuse the shortlist's saved objectives; required with candidates
percentileNotrue = score each objective as its PERCENTILE against the viable-site POPULATION ("better than X% of viable sites") โ€” the strongest cross-run + cross-region comparability. Works for fields with a maintained baseline (analyze_site metrics: overall_score, risk_resilience, fiber_connectivity, power_infrastructure, market_conditions, gas_pipeline_access, fiber_km, power_cost); other fields fall back to absolute (listed in unbaselined_fields). Takes precedence over absolute
constraintsNoHard filters {field: {min?, max?}} โ€” a candidate missing a constrained field is dropped (fail-closed). e.g. {"risk_resilience": {"min": 70}, "estimated_ttp_months": {"max": 34}}
shortlist_nameNoAlternative to candidates: re-rank a SAVED shortlist (created via save_to_shortlist) in one shot โ€” loads its sites (scoped to your API key) + reuses their saved objectives if you pass none, and re-scores against the current baseline
require_completeNotrue = DROP any candidate missing one or more of your (validated) objectives โ€” dropped candidates are DECLARED in excluded_incomplete, never silent. Default false keeps incomplete candidates ranked on their carried objectives with missing_objectives flagged. Recommended true for autonomous take-rank-1 workflows (an incomplete candidate can otherwise top the ranking on its single best metric).

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish the safe read-only/idempotent profile, and the description goes well beyond them: it discloses the normalization contract, signed-weight semantics, weight-renormalization of incomplete candidates with gaps declared in missing_objectives, percentile-baseline fallback, and that expired/unknown candidate ids are dropped and declared rather than silently re-resolved. This is rich behavioral disclosure of failure modes and edge cases.

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?

The core purpose and scope are front-loaded in the first sentence, and given the tool's complexity most sentences carry genuine content. However, it is dense, ALL-CAPS-heavy, and repeats mechanics (constraints fail-closed, missing_objectives) across the description, so it is not maximally tight.

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

Completeness5/5

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

For an 8-parameter, high-complexity tool with an output schema, the description still covers the return shape (_entity=ranked_sites with rank, objective_score, normalized{}, normalization_basis) and the key edge cases (missing objectives, percentile fallback, candidate contract). Nothing essential to correct invocation appears to be missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds integration-level meaning beyond the schema: it explains where candidate metric fields come from (analyze_site + get_refined_queue, passing site_evaluation_handoff untouched) and the frozen-identity contract. It largely reinforces rather than extends the per-parameter docs, so it lands above baseline but not at the top.

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+resource (deterministic multi-site ranking/optimization under constraints) and explicitly distinguishes itself from siblings by naming analyze_site (one site) and get_refined_queue (candidate set). An agent can tell what this does and where it sits in the workflow without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger phrase ("pick the best N sites under constraints") plus when to use alternatives: analyze_site for a single site and get_refined_queue to obtain the candidate set first. This covers when-to-use, when-not, and the routing to siblings.

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

read_inboxRead InboxA
Read-onlyIdempotent
Inspect

PARTNER KEY ONLY: read the notes DC Hub left for the partner agent whose key this session sends โ€” up to 20 unread, newest first, marked read on delivery (peek=true reads without marking). Call it at the start of a session. Proxies GET /api/v1/inbox with the session's own key: no key answers key required; a key issued without a partner slug answers partner key required (403). Not a data tool: it returns no market, power, fiber or siting figures.

ParametersJSON Schema
NameRequiredDescriptionDefault
peekNotrue = read without marking the notes read

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior4/5

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

Adds substantial behavior beyond the annotations: the 20-item cap, newest-first ordering, mark-read-on-delivery semantics with a peek opt-out, and the two distinct auth failure modes ('key required', 'partner key required (403)'). There is a mild tension with readOnlyHint=true, since 'marked read on delivery' mutates server-side state, but the description discloses this honestly and provides peek=true as a read-only path, so it is transparent rather than misleading.

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?

The single most important constraint, 'PARTNER KEY ONLY', is front-loaded, followed by behavior, then usage, then protocol/auth details. Dense but every clause carries information an agent needs; nothing is redundant filler.

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

Completeness5/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 prose. For a single-parameter tool the description still covers auth requirements, delivery semantics, ordering, caps, and error responses, leaving nothing an agent needs in order to call it correctly.

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?

Schema coverage is 100%, so the baseline is 3, and the schema already defines peek. The description adds marginal value by tying peek to the delivery pipeline ('peek=true reads without marking'), making its effect on the mark-read side effect explicit rather than leaving it as an isolated flag.

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+resource (read the inbox), the exact payload (notes DC Hub left for the partner agent), the ordering and cap, and explicitly fences itself off from the data tools with 'Not a data tool: it returns no market, power, fiber or siting figures.' An agent can distinguish it from every sibling without opening the schema.

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

Usage Guidelines5/5

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

Gives explicit timing ('Call it at the start of a session') and an explicit when-not ('Not a data tool'), plus the gating prerequisite ('PARTNER KEY ONLY'). The only gap is that no sibling alternative is named, but no sibling offers inbox functionality, so the routing is unambiguous.

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

recover_my_keyRecover My KeyAInspect

Recover a LOST DC Hub key. Pass your human's email and DC Hub re-sends any key tied to that address to that inbox. It NEVER returns the key over the wire (it emails the bound address), and the confirmation is the same whether or not a key exists (enumeration-safe), so no key is leaked to a caller. Use this when your human had a key, lost it, and knows the email they bound it to. Param: email (required). Returns DC Hub's neutral confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesYour human's email address that a lost key was bound to (required) โ€” the key is re-sent to that inbox, never returned over the wire

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior5/5

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

Discloses non-obvious behavior that annotations cannot express: the key is never returned over the wire, the confirmation is identical whether or not a key exists (enumeration-safe), and the side effect is an email to the bound address โ€” consistent with readOnlyHint=false. This is exactly the security context an agent needs before invoking it.

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 with the action, then security guarantees, then usage, then params โ€” the ordering is sound and the length is justified by the security disclosures. The 'Param: email (required)' line slightly restates the schema, a minor redundancy.

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

Completeness5/5

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

For a single-parameter tool with an output schema, the description covers what remains: the side effect (email dispatch), the enumeration-safe response, and the triggering scenario. Nothing an agent needs in order to call this correctly is missing.

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?

Only one parameter, and schema description coverage is 100%, so the schema already carries the semantics. The description repeats it ('Param: email (required)', 'emails the bound address') without adding format or syntax detail beyond what the schema states. Baseline 3 applies.

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 with scope: 'Recover a LOST DC Hub key' by re-sending it to the bound inbox. The scenario sentence ('your human had a key, lost it, and knows the email they bound it to') implicitly separates this from siblings like claim_free_key and bind_email 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 activation condition: the human previously had a key, lost it, and knows the bound email. That implies the negative case (unknown/unbound email is useless) but no sibling tool is named as the alternative for those cases.

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

register_standing_intentRegister Standing Intent (webhook push)AInspect

Register a STANDING QUERY with webhook push โ€” DC Hub POSTs an HMAC-signed webhook to YOUR https URL whenever matches grow (push, not poll: "notify my orchestrator on any new deal in Columbus"). Requires a key. Params: kind ("new_deal_in_market" watches deals in the market param ยท "news_keyword" watches news matching q ยท "permitting_change" watches published permitting intel, optionally per state), market / q / state (the watch parameter for the chosen kind), webhook_url (your public HTTPS endpoint โ€” private/internal hosts are rejected). Returns {intent_id, secret} โ€” SAVE the secret: every delivery carries X-DCHub-Signature: sha256=HMAC(secret, body). First evaluation initializes the watermark silently; growth fires the webhook; 5 straight delivery failures auto-disable the intent. Evaluated every ~2h. Answers "notify my system whenever a new moratorium appears", "push me new matches instead of making me poll", "tell my orchestrator when a deal lands in Columbus". Try: register_standing_intent kind=news_keyword q=moratorium webhook_url=https://hooks.example.com/dchub. kind="capacity" instead registers a standing CAPACITY REQUIREMENT with DC Hub Capacity Source (no webhook_url): target_mw or target_kw, markets / states / regions / countries (comma-separated), optional available_by (YYYY-MM or YYYY-MM-DD), delivery_type, min_chunk_kw, max_sites (1-6), use_case, notes, plus your human's name and company and accept_terms=true only after they agreed to https://dchub.cloud/listings#terms. Needs a key with your human's email bound (claim_free_key, then bind_email) or an OAuth connection. Returns intent_id cap_; DC Hub emails a confirmation link, then emails matching listings at most once a day. Do NOT use for one-shot reads (get_news / list_transactions), a one-off capacity search (source_capacity) or email alerts on a market (set_market_alert).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFor news_keyword: the keyword/phrase to watch in title+summary, e.g. moratorium
kindYesWatch kind: "new_deal_in_market" | "news_keyword" | "permitting_change" | "capacity" (a Capacity Source requirement, emailed, no webhook)
nameNoFor capacity: your human's full name, exactly as given; never invent it
roleNoFor capacity: your human's role or title
notesNoFor capacity: anything else about the requirement; leave out anything that identifies your human
stateNoFor permitting_change: optional US state filter, e.g. MN
marketNoFor new_deal_in_market: the market/region substring to watch, e.g. columbus
statesNoFor capacity: comma-separated US states, e.g. "TX, AZ"
companyNoFor capacity: your human's company
marketsNoFor capacity: comma-separated markets, e.g. "Dallas, Phoenix"
regionsNoFor capacity: comma-separated regions from north_america, latin_america, europe, asia_pacific, middle_east_africa (aliases emea, apac, latam, americas)
use_caseNoFor capacity: what the capacity is for, e.g. "AI inference"
countriesNoFor capacity: comma-separated countries, e.g. "Germany, Netherlands"
max_sitesNoFor capacity: how many sites the requirement may be split across, 1-6
target_kwNoFor capacity: capacity needed, in kW (or target_mw, not both)
target_mwNoFor capacity: capacity needed, in MW (or target_kw, not both)
webhook_urlNoYour public HTTPS webhook endpoint (required for every kind except capacity)
accept_termsNoFor capacity: true ONLY after your human read and agreed to https://dchub.cloud/listings#terms; otherwise nothing is sent
available_byNoFor capacity: needed by this date, YYYY-MM or YYYY-MM-DD
min_chunk_kwNoFor capacity: the smallest block worth taking, in kW
delivery_typeNoFor capacity: land, powered_shell, turnkey or colocation
terms_versionNoFor capacity: the terms version your human agreed to; omit to send the version currently published

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the generic profile (write, openWorld, non-idempotent, non-destructive), while the description discloses rich behavior: HMAC-signed webhook with X-DCHub-Signature, secret must be saved, watermark initialized silently on first evaluation, ~2h evaluation cadence, private/internal hosts rejected, 5 straight failures auto-disable, and terms/email-confirmation gating for the capacity mode.

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 with purpose, then mode mechanics, then the worked example and exclusions; every section is dense with usable information. It is long and repeats some schema content, but the length is largely justified by the 22-parameter, dual-mode surface.

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

Completeness5/5

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

Covers auth prerequisites (key with bound email via claim_free_key/bind_email, or OAuth), delivery mechanics, failure handling, terms acceptance, and even describes the return shape despite an output schema existing. Nothing an agent needs to invoke either mode correctly is missing.

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?

Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter coherence by mapping each 'kind' to its applicable watch parameter ('market / q / state โ€” the watch parameter for the chosen kind') and flags that capacity mode takes no webhook_url. Most per-parameter detail is nonetheless duplicated from the schema.

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+resource ('Register a STANDING QUERY with webhook push') and immediately clarifies scope ('push, not poll'). It distinguishes itself from siblings by naming the alternative tools it is not (get_news, list_transactions, source_capacity, set_market_alert).

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

Usage Guidelines5/5

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

Explicitly names when to use it (proactive push, e.g. 'notify my orchestrator on any new deal in Columbus'), provides concrete trigger phrases, and adds an explicit 'Do NOT use for...' exclusion list naming the correct sibling for each excluded case.

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

report_findingReport FindingAInspect

PARTNER KEY ONLY: file what you observed on a DC Hub surface as a brain finding (detector external_audit) so it is triaged like every other detector's. class is one of completeness_contradiction, geography_leak, as_of_cite_as, pro_wall_dead_end, count_drift, stale_payload_complete, leak_past_pro_gate, link_hygiene, other; tool names the DC Hub tool or endpoint; quoted_fields carries the exact fields you saw (hashed for dedupe: the same observation re-filed within 24h bumps recurrence instead of inserting). Proxies POST /api/v1/inbox/findings with the session's own key; a key issued without a partner slug answers partner key required (403). 120 per key per day.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoThe arguments you called it with
noteNoOne or two sentences of context
toolYesThe DC Hub tool or endpoint the finding is about, e.g. analyze_site
classYesFinding class: completeness_contradiction (status full/partial_preview with empty withheld_fields), geography_leak (preview resolved outside the requested ISO/region), as_of_cite_as (as_of null while cite_as stamps a date), pro_wall_dead_end (a paid-plan wall that says stop while next_ask offers another paid-plan tool and no cheaper rung), count_drift (tool or asset counts disagree across doors), stale_payload_complete (a stale sub-feed inside a payload marked complete), leak_past_pro_gate (a paid-plan field served below its plan), link_hygiene (dead or wrong-shape links), other
recurrenceNoHow many times you have seen it (default 1)
session_idNoYour session identifier, if any
observed_atNoISO-8601 time you observed it
quoted_fieldsNoThe exact fields/values you observed (object, list or string); hashed for dedupe

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the dedupe mechanic (quoted_fields hashed; identical observation re-filed within 24h bumps recurrence instead of inserting), the proxy path and that the session's own key is used, the 403 behavior, and the 120/key/day rate limit. These are exactly the traits an agent cannot infer from destructiveHint=false and idempotentHint=false.

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?

Roughly 120 words with the partner-key gate front-loaded and no filler sentences. The semicolon-chained stream is dense and would scan better as discrete lines, but nothing is redundant and each clause carries new information.

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

Completeness5/5

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

For an 8-parameter write tool with an output schema, the description covers everything the caller must know: the access gate, the transport (POST /api/v1/inbox/findings), the failure response, the rate limit, and the dedupe consequence. Return-value shape is properly left to the output schema.

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?

Schema coverage is 100%, so the recorded baseline is 3, but the description contributes real semantics beyond it: quoted_fields is stated to be hashed for dedupe, and 'tool names the DC Hub tool or endpoint' clarifies the intended granularity. The enumeration of class values largely duplicates the schema's own enum descriptions, which caps this below a 5.

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+resource: file an observation on a DC Hub surface as a brain finding under the external_audit detector. No sibling tool does anything comparable, and the 'so it is triaged like every other detector's' clause pins the downstream effect.

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 a clear precondition (PARTNER KEY ONLY) and an explicit failure mode for the wrong key type ('a key issued without a partner slug answers partner key required (403)'), plus the daily quota that bounds usage. It stops short of stating when NOT to file (e.g. what belongs in 'other' vs. a more specific class), so it stops one notch short of a 5.

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

request_capacity_introRequest Capacity IntroAInspect

Use when your human wants capacity behind a Capacity Source listing (pass slug), or wants first access to capacity matching a requirement as listings are onboarded (omit slug; pass capacity_mw or capacity_kw, markets, states, regions or countries, and timeline). This registers a deal: DC Hub records the request in its lead register and sends the provider ONLY your human's company name and the requirement. The provider accepts or declines. Only if the provider accepts does DC Hub share the provider's identity, site details and contact with your human, and your human's name, role and email with the provider; on a decline nothing is shared. Requires an identified caller (claim_free_key, then bind_email with your human's address) and accept_terms=true only after your human has read and agreed to the introduction terms at https://dchub.cloud/listings#terms. Returns lead_id, status and the next step. For a listing, source_capacity with its slug then shows the deal status in the disclosure block and, once the provider accepts, the provider's identity, site and contact. Do NOT use to save or monitor a site (use save_site / set_site_alert).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoYour human's full name. Nothing is sent without it; use only what they gave you, never invent it
roleNoYour human's role or title
slugNoThe listing to register a deal for: its slug or id from source_capacity. Omit to register a standing requirement for upcoming listings instead
notesNoAnything else the provider should know about the requirement. It travels with the requirement, so leave out anything that identifies your human
statesNoComma-separated US states of interest, e.g. "TX, AZ"
companyNoYour human's company. Nothing is sent without it
marketsNoComma-separated markets of interest, e.g. "Dallas, Phoenix"
messageNoA short note from your human for the provider. The deal registration itself carries only the company name and the requirement
regionsNoComma-separated regions of interest from north_america, latin_america, europe, asia_pacific and middle_east_africa (aliases emea, apac, latam, americas), e.g. "europe, apac"
timelineNoWhen the capacity is needed, e.g. a quarter and year
use_caseNoWhat the capacity is for, e.g. "AI inference"
countriesNoComma-separated countries of interest, e.g. "Germany, Netherlands"
capacity_kwNoCapacity needed, in kW (capacity_mw is the same requirement in MW)
capacity_mwNoCapacity needed, in MW
accept_termsNoSet true ONLY after your human has read and agreed to the introduction terms at https://dchub.cloud/listings#terms. Unless it is exactly true, nothing is sent
terms_versionNoThe terms version your human agreed to, e.g. program.terms.version from source_capacity. Omit to send the version currently published

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond annotations: discloses exactly what data is shared with the provider and when (company name and requirement only; identity/site/contact and human's name/role/email only on acceptance; nothing on decline), plus auth and terms requirements. Annotations cover non-mutation; the description carries the disclosure/auth semantics that annotations cannot.

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 with 'Use when...' and organized by mode, prerequisites, disclosure behavior, and returns. Dense but long; nearly every sentence carries routing, privacy, or prerequisite information, though it could be tightened slightly.

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

Completeness5/5

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

A 16-parameter, no-required-parameter tool with an output schema is fully served: the description explains mode selection, prerequisite call chain, consent gating, disclosure outcomes, and the follow-up sibling. Return values are noted briefly even though an output schema exists.

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?

Schema coverage is 100%, so baseline is 3, but the description adds mode-selection semantics that the schema alone leaves implicit: slug is for a listing and its omission switches to standing-requirement mode, and capacity_mw/capacity_kw express the same requirement. That is genuine added meaning.

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+resource (register a capacity intro/deal) and clearly distinguishes two operating modes: pass a slug for a listing vs omit it for a standing requirement. An agent can tell exactly what the tool does without opening the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use conditions for both modes, prerequisites (claim_free_key, then bind_email, accept_terms=true after reading terms), named alternative for the listing follow-up (source_capacity), and an explicit exclusion ('Do NOT use to save or monitor a site (use save_site / set_site_alert)').

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

research_taskResearch Dossier (async)AInspect

Commission an ASYNC, CITED research dossier from DC Hub's corpora (news, deals, facilities, market deep-dive narratives + live market components) โ€” a decision-ready analyst brief with [n] citations, not a lookup. Requires a key (one claim_free_key call), 5 dossiers/day. Submits the question, waits up to ~35s for completion, and returns the finished dossier inline when ready; if still running, returns {task_id} โ€” call research_task task_id= to fetch it. Params: question (required for a new dossier, min 12 chars) OR task_id (poll an earlier one). Typical completion under a minute. Answers "write me a cited brief on this", "what do recent deals say about gas-bridged power". Try: research_task question="What do recent deals say about gas-bridged power for data centers in ERCOT?". Do NOT use for a single fact (use search_intelligence / semantic_search); this synthesizes ACROSS sources with citations.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNoPoll an earlier submission: the task_id returned by a previous research_task call
questionNoThe research question (min 12 chars) โ€” omit when polling with task_id

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the key requirement (one claim_free_key call), the 5 dossiers/day rate limit, the ~35s wait window, the inline-vs-task_id return behavior, and typical sub-minute completion. Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false), so this operational context is genuinely additive.

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 purpose, then rate limits, async behavior, params, examples and exclusions, with no wasted sentences. It is dense and the parenthetical corpora list is slightly heavy, but each sentence earns its place.

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

Completeness5/5

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

Complete for a 2-param async tool: it covers the creation path, the polling path, cost/auth prerequisites, timing expectations, and routing to alternatives. An output schema exists, so return-value detail is correctly not repeated.

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?

Schema coverage is 100%, but the description adds real meaning beyond it: it clarifies that 'question' is required for a NEW dossier (the schema marks 0 required params) and that question/task_id are mutually exclusive modes. This resolves an ambiguity the schema alone leaves open, though the min-12-chars detail is already in the schema.

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+resource with scope: 'Commission an ASYNC, CITED research dossier from DC Hub's corpora ... a decision-ready analyst brief with [n] citations, not a lookup.' It explicitly distinguishes itself from lookup-style siblings, so an agent can tell it apart from search_intelligence/semantic_search without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('write me a cited brief on this'), when-not ('Do NOT use for a single fact (use search_intelligence / semantic_search)'), and names the alternatives. It also documents the polling path and provides a concrete sample invocation, leaving nothing to inference.

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

save_siteSave SiteAInspect

NEEDS A KEY (free): this WRITES to your account, so a keyless call returns auth_required โ€” call claim_free_key FIRST (one step, no email) if you have none. Save a candidate data-center site to your DC Hub account to track it across sessions. Give lat + lon (plus optional name, state, market, target_mw, notes). Returns the saved site id. Pass market and DC Hub snapshots the site's DCPI baseline at save time, so every later list_saved_sites / get_changes shows how ITS score and verdict moved since you saved it. Builds a persistent shortlist an agent can revisit + monitor โ€” after saving, pass the returned id to set_site_alert so DC Hub emails you when that siteโ€™s DCPI/capacity/nearby-facilities move (no re-checking). Answers "remember this parcel for me", "keep this candidate so I can come back to it next session". Try: save_site lat=39.04 lon=-77.48 name="Ashburn parcel" market=northern-virginia target_mw=100. Do NOT use to read back the shortlist (use list_saved_sites), download it (use export_dataset), or score a site (use score_facility); this WRITES one site to your account.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoSite latitude in decimal degrees (-90 to 90), e.g. 39.04
lngNoAlias for lon โ€” either name works
lonNoSite longitude in decimal degrees (-180 to 180), e.g. -77.48
nameNoOptional label for the saved site, e.g. "Ashburn parcel"
notesNoOptional free-text notes to store with the saved site
stateNoUS state abbreviation for the site, e.g. VA
marketNoMarket slug (metro) the site belongs to, e.g. northern-virginia
latitudeNoAlias for lat โ€” either name works
longitudeNoAlias for lon โ€” either name works
target_mwNoTarget power load for the planned build in megawatts (MW), e.g. 100

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), but the description adds what annotations cannot: a keyless call returns auth_required, the tool returns the saved site id, and passing `market` snapshots the DCPI baseline so later get_changes reflects movement. This is substantive side-effect disclosure beyond structured fields.

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 blocking auth requirement before anything else, which is the right ordering. It is on the long side and repeats the 'this WRITES' claim twice, but every sentence carries routing, prerequisite, or side-effect information.

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

Completeness5/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 detailed, and the description still names the returned id and the downstream chain (set_site_alert, list_saved_sites, get_changes). For a zero-required-param write tool with 10 params and a free-key gate, nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the schema documents all ten parameters including the lat/lon aliases. The description adds meaning the schema does not: that `market` triggers a DCPI-baseline snapshot at save time and that name/state/market/target_mw/notes are optional. Small bonus over the baseline of 3.

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 ('Save a candidate data-center site to your DC Hub account') and immediately names the sibling tools it is NOT (list_saved_sites, export_dataset, score_facility). An agent can distinguish this from save_to_shortlist / get_shortlist style siblings without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit precondition (call claim_free_key first, one step, no email), concrete usage intents ('remember this parcel', 'keep this candidate for next session'), and negative routing to three named alternatives. When-to-use and when-not-to-use are both spelled out.

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

save_to_shortlistSave To ShortlistAInspect

Save a site into a PERSISTENT, named shortlist that survives across conversations (Phase 5 statefulness). Snapshots the site's objectives + its current percentile objective_score, so you can re-score it later against the evolving national baseline. Use to build a durable siting shortlist across days/weeks; the list is scoped to your API key. Pair with get_shortlist to re-score + see drift. MINIMAL call: save_to_shortlist(shortlist_name="my-targets", site={site_ref, lat, lng, capacity_mw}) โ€” objectives are optional. If you DID rank the site (analyze_site / rank_sites), pass those metric fields inside site and your objectives map too, and the re-scoring reuses them. Requires an API key so the list is private to you and survives to your next conversation: call claim_free_key first if you have none.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteYesSite object. MINIMAL form is enough: {site_ref, lat, lng, capacity_mw}. Richer is better โ€” add any analyze_site metric fields (risk_resilience, fiber_connectivity, water scoreโ€ฆ) and those become what gets re-scored later.
notesNoOptional free-text note, e.g. "strong fiber, acceptable water"
objectivesNoOPTIONAL {field: signedWeight} map (+maximize/-minimize) if this site was ranked under explicit objectives โ€” stored so re-scoring reuses the same criteria. Omit it and DC Hub weights the site's own metric fields equally.
shortlist_nameYesName of the shortlist, e.g. "Q3-2026-1GW-targets" โ€” created if new. REQUIRED.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover the mutation/safety profile (readOnlyHint=false, destructiveHint=false), so the bar is lower; the description still adds real context โ€” persistence across conversations, API-key scoping, snapshotting of objectives and percentile score, and the auth requirement. It does not disclose what happens on duplicate names or failure modes, but the added behavioral context is substantial.

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 with the defining trait (persistent, cross-conversation) and the alternative pairing before the invocation details. It is dense rather than padded, though the final auth sentence and the MINIMAL-call illustration add length that partially restates the schema.

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

Completeness5/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. Given a 4-param mutation tool whose schema is fully documented, the description covers the remaining agent-relevant unknowns: persistence semantics, key scoping, re-scoring behavior, and prerequisite setup.

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?

Schema coverage is 100%, so baseline is 3; the description goes further by giving a concrete MINIMAL call shape and by explaining the fallback semantics of objectives ('omit it and DC Hub weights the site's own metric fields equally'). That default behavior is not visible in the schema and genuinely improves invocation correctness.

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?

The description states a specific verb and resource ('Save a site into a PERSISTENT, named shortlist') and immediately qualifies the scope with 'survives across conversations,' which separates it from the transient save_site / list_saved_sites siblings. An agent can tell what the tool does and what makes it distinct without touching the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('build a durable siting shortlist across days/weeks'), explicit alternative pairing ('Pair with get_shortlist to re-score + see drift'), and a stated prerequisite ('call claim_free_key first if you have none'). It even routes the conditional case: pass objectives/metric fields only if you ranked the site.

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

score_facilityScore FacilityA
Read-onlyIdempotent
Inspect

Use when a user wants an independent 0-100 grade for ONE existing facility across 7 dimensions โ€” power, fiber, water, climate_risk, tax_environment, talent_pool, expansion. Example: "How does the CoreWeave Las Vegas site score, power-weighted?" โ€” score_facility facility_id= weighting=power_priority. Params: facility_id or name (required); weighting one of "balanced" (default) | "power_priority" | "risk_priority" | "expansion_priority". Returns: composite 0-100, tier_classification, peer comparison, and per-dimension detail. Do NOT use for a raw lat/lon parcel (use analyze_site), to compare 2 or more sites (use compare_sites), or to find similar sites (use find_alternatives).

ParametersJSON Schema
NameRequiredDescriptionDefault
weightingNoScoring profile: "balanced" (default), "power_priority", "risk_priority", or "expansion_priority"
facility_idYesThe facility id/slug to score (required), from a prior search_facilities result

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond annotations: the score is computed independently, spans seven named dimensions, and returns composite, tier classification, peer comparison, and per-dimension detail. It does not mention auth needs or rate limits, but for a non-destructive read-only tool that gap is minor.

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?

The description is front-loaded with the core purpose, then example, parameters, returns, and exclusions. It is information-dense without being bloated, though the parameter restatement is somewhat redundant with the input schema.

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?

An output schema exists, so the description need not detail return values, but it still helpfully summarizes them. The only notable gap is the 'facility_id or name' phrasing, which may mislead an agent into passing a name into a field documented as an id/slug. Otherwise the usage context, constraints, and alternatives are complete.

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 description coverage is 100%, so the schema already documents both parameters and the weighting options. The description largely repeats the weighting list and says 'facility_id or name (required),' which conflicts slightly with the schema that only accepts a facility_id string and describes it as an id/slug from a prior search. That mismatch and the redundancy keep this at the baseline 3.

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?

The description provides a specific verb and resource: an independent 0-100 grade for ONE existing facility across seven named dimensions. It explicitly distinguishes this tool from sibling tools by naming the alternatives (analyze_site, compare_sites, find_alternatives) for related but distinct tasks.

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

Usage Guidelines5/5

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

It states exactly when to use the tool (for a single existing facility) and when not to use it, with explicit alternative tools for raw parcels, multi-site comparison, and similar-site discovery. The example query further clarifies intended invocation.

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

search_facilitiesSearch FacilitiesA
Read-onlyIdempotent
Inspect

Use this whenever the user asks which data centers exist, or who operates in a city, state or country. Call when the user wants existing data centers matching filters: country, state, city, operator, MW range, tier or text. Returns name, operator, location, market, status and MW where disclosed; each row is flagged verified or unverified_directory_listing. Free: names and locations; MW and specs need a paid key. Ex: "Equinix sites in Virginia over 10 MW." Start here for a facility slug. No match = empty data, not an error: broaden filters. limit 1-500 (free tier 25); page with offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name to filter facilities, e.g. Ashburn, Dallas
tierNoUptime Institute tier filter (1-4)
limitNoMax results to return (1-500; default varies by tool)
queryNoFree-text search over facility name/operator/location (mapped to the backend `q` param), e.g. "hyperscale Ashburn"
stateNoUS state abbreviation or region, e.g. VA, TX
offsetNoPagination offset, 0-based (skip this many results)
countryNoISO 3166-1 alpha-2 country code, e.g. US, GB, SG
operatorNoOperator/provider company name, e.g. Equinix, Digital Realty
max_capacity_mwNoMaximum power capacity filter in megawatts (MW)
min_capacity_mwNoMinimum power capacity filter in megawatts (MW)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoFacility rows matching the filters
noteNoServing note (e.g. how many rows the full tier returns)
tierNoTier the response was served at
countNoRows returned in THIS response (null on some gated tiers)
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
successNotrue when the search executed
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
total_matchingNoTotal rows matching the filter across the dataset (null when withheld by tier)
full_results_availableNofalse when the row set was trimmed for your tier
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the free vs paid split ('Free: names and locations; MW and specs need a paid key'), the per-row 'verified or unverified_directory_listing' trust flag, empty-result behavior ('No match = empty data, not an error: broaden filters'), and pagination limits. These are exactly the operational facts an agent needs that readOnlyHint/idempotentHint 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?

Purpose is front-loaded, and every sentence carries new information (filters, return fields, trust flag, pricing tier, empty-result rule, pagination). It is dense and punctuation-heavy, packing several distinct facts into a single block, but nothing is filler.

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

Completeness5/5

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

With an output schema present, the description need not restate return values, yet it still describes the key row fields and the verification flag. Combined with free/paid limits, empty-result semantics, pagination, and all 10 parameters documented in the schema, an agent has everything needed to call it correctly.

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?

Schema description coverage is 100%, so the schema already documents each filter, establishing a baseline of 3. The description adds meaning the schema does not: the 'limit 1-500 (free tier 25)' cap and the 'page with offset' guidance, plus the enumerated filterable dimensions (country, state, city, operator, MW range, tier, text).

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 ('search' for 'data centers') plus the exact question it answers ('which data centers exist, or who operates in a city, state or country'). It partially routes the agent by saying 'Start here for a facility slug', which distinguishes it from get_facility, but it never differentiates itself from the other search-shaped siblings (search, find_sites, semantic_search, search_intelligence).

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 trigger ('use this whenever the user asks which data centers exist...') and a concrete example query, and implies it is the entry point that yields slugs for downstream tools. It offers no when-not-to-use condition and does not name the alternative search tools, so selection among the many siblings is still partly guesswork.

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

search_intelligenceSearch IntelligenceA
Read-onlyIdempotent
Inspect

Semantic (meaning-based) search over DC Hub's live intelligence corpus โ€” industry news, M&A deals, discovered facilities, per-market DCPI narratives, press releases, announcements, permitting intel, construction permits, tax incentives and the capacity pipeline โ€” returning the most relevant records with citable source fields. This is the agent-friendly alias over the SAME retrieval layer as semantic_search: same results, different call shape. It takes query plus short corpus names (news | deals | facilities | market_narratives | press | announcements | permitting | permits | incentives | pipeline); semantic_search takes q plus the full corpus names. Call ONE of them, not both. Params: query (required, natural language); corpus (optional CSV of the names above, default all); limit (1-15, default 8). BEHAVIOUR: read-only โ€” it writes nothing, and repeat calls with the same arguments return the same records. ACCESS: works with no key, but anonymous results come back as a TRIMMED PREVIEW; the session X-API-Key hydrates full depth per key, and the free tier is capped per day (call claim_free_key once โ€” no email โ€” if you do not hold a key). Do NOT use when you can filter exactly: search_facilities for structured facility filters, get_news for date/keyword news, list_transactions for deal filters โ€” those match fields and return complete sets, where this ranks by meaning and returns a top-N.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for query
limitNoMax results to return, 1-15 (default 8)
queryNoNatural-language query (required), e.g. "grids opening up for AI load in the Southeast"
corpusNoOptional corpus to restrict to: news | deals | facilities | market_narratives. CSV of several is allowed; default searches all.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations (readOnly/idempotent/destructive/openWorld) by disclosing the access model: no-key calls return a TRIMMED PREVIEW, a session X-API-Key hydrates full depth, the free tier is capped daily, and claim_free_key is the remedy. The deterministic-repeat and read-only traits reinforce rather than merely restate the hints.

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 with purpose and organized into BEHAVIOUR and ACCESS blocks; every section carries information. It is somewhat verbose, listing the corpus names in prose and again in the Params line, which is mild redundancy against a complex tool.

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

Completeness5/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-value detail is not needed; the description still covers corpus scope, behavior, access tiers, and alternatives. For a tool aliasing another with a non-obvious access model, this is complete enough to call correctly on first attempt.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real value: it expands the corpus vocabulary to ten short names (the schema lists only four), confirms default=all, gives the limit range, and states query is required (the schema does not mark any parameter required). It does not explain the `q` alias param present in the schema.

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 ("Semantic search over DC Hub's live intelligence corpus") and enumerates exactly what the corpus contains. It also positions itself against semantic_search as an alias with a different call shape, so an agent can distinguish it from siblings 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 Guidelines5/5

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

Explicit routing: "Call ONE of them, not both" for semantic_search, and "Do NOT use when you can filter exactly" with three named alternatives (search_facilities, get_news, list_transactions) plus the condition that selects them (field matching vs. meaning ranking). Nothing is left to inference.

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

set_market_alertSet Market AlertAInspect

Subscribe to movement alerts for a DCPI market (FREE with a key) โ€” get notified when its Excess-Power / Constraint score moves. On the free tier, email alerts are delivered to the email your human bound via bind_email (call bind_email first; the destination is forced to that address). Set channel="email". Webhook delivery (channel="webhook" + destination=) needs a paid DC Hub plan. Lets an agent MONITOR markets, not just query them. Answers "tell me when this market moves", "ping me if Northern Virginiaโ€™s power score changes". Try: set_market_alert market=northern-virginia channel=webhook destination=https://hooks.example.com/dc. Do NOT use to read a market right now (use get_market_dcpi_rank); this SUBSCRIBES to future movement.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket slug (metro) to watch, e.g. northern-virginia โ€” valid slugs come from rank_markets / get_market_dcpi_rank
channelYesDelivery channel: "email" (free, sent to your bound email) or "webhook" (paid plan)
destinationNoFor channel="webhook", the https URL to POST alerts to (paid plan); ignored for email (forced to bound address)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare non-read-only, non-idempotent behavior; the description adds substantial context beyond them โ€” free vs paid delivery, that email destinations are forced to the bound address, that a paid DC Hub plan is required for webhooks, and that this creates a future subscription rather than a query.

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 with purpose, then tiers, then example, then the exclusion โ€” a sensible order. Slightly long and it repeats the paid-plan/webhook condition, which costs a little but does not obscure the core message.

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

Completeness5/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 the description still covers prerequisites, channel-specific behavior, tier gating, and a worked example. Complete for a 3-parameter subscription tool.

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?

Schema description coverage is 100%, so the baseline is 3. The description nonetheless adds cross-parameter semantics absent from the schema alone, notably that destination is forced to the bound address for email and needs a paid plan for webhook, plus a concrete invocation example.

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 ('Subscribe to movement alerts for a DCPI market') and explicitly contrasts itself with the read sibling get_market_dcpi_rank ('Do NOT use to read a market right now'). An agent can distinguish this from the many query tools without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('tell me when this market moves'), when-not-to-use (get_market_dcpi_rank), prerequisites ('call bind_email first'), and tier conditions for each channel. Nothing is left to inference.

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

set_shortlist_alertSet Shortlist AlertAInspect

Set a DRIFT ALERT on a saved shortlist so you can stop polling and be notified when a site's national standing moves materially (Phase 5). Fires when any site in the shortlist has current percentile score < percentile_below OR score_delta_since_saved < delta_below (e.g. -8 = dropped 8 points vs when saved). Evaluated after each daily baseline refresh; delivers via webhook and/or email. This is the "wake me when it matters" loop for long-running siting campaigns. Scoped to your API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
notifyYesDelivery: {"webhook":"https://..."} and/or {"email":"you@co.com"} โ€” at least one required
delta_belowNoFire if any site's score_delta_since_saved drops below this โ€” pass a NEGATIVE number, e.g. -8 (dropped 8+ points since saved)
shortlist_nameNoThe shortlist to monitor (created via save_to_shortlist)
percentile_belowNoFire if any site's current percentile objective_score drops below this (e.g. 70)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly false, non-idempotent, non-destructive), so the bar is lower. The description still adds real value beyond them: the exact firing predicate, that evaluation runs after each daily baseline refresh, and that delivery is via webhook and/or email. It omits what happens if the alert is set twice (relevant given idempotentHint=false).

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?

Purpose and trigger are front-loaded, then cadence, delivery, and scope follow. Five sentences are dense but each carries information; the 'wake me when it matters' phrasing is slightly rhetorical but still communicates the use case.

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?

An output schema exists so return values need no explanation, and annotations cover the safety profile. The description supplies the trigger logic, evaluation cadence, and delivery channels needed to call it correctly, leaving only duplicate-alert behavior and removal semantics unaddressed.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: that percentile_below and delta_below are combined with OR, and that delta_below must be a negative number. It does not explain shortlist_name resolution beyond referring to save_to_shortlist.

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+resource ('Set a DRIFT ALERT on a saved shortlist') and immediately defines the trigger. The shortlist scope implicitly separates it from set_site_alert and set_market_alert, though those siblings are never named, so the differentiation is inferred rather than explicit.

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 clear context for when to reach for it: 'so you can stop polling' and 'the wake me when it matters loop for long-running siting campaigns.' It does not, however, state when NOT to use it or contrast it against the shortlist/market/site alert siblings, so the routing is not fully spelled out.

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

set_site_alertSet Site AlertAInspect

Arm an email watch on a site you already saved (FREE with a key) โ€” DC Hub emails you when that siteโ€™s DCPI score, grid capacity, or nearby facilities move, so you donโ€™t have to keep re-checking. On the free tier the alert is delivered to your humanโ€™s bound email (call bind_email first; notify_email is forced to that address). A paid DC Hub plan can send to any address. The "monitor my shortlist for me" loop: call save_site first (it returns a saved_site_id), then set_site_alert on that id. Params: saved_site_id (required integer, from save_site or list_saved_sites), trigger_type ("dcpi_change" | "capacity_change" | "new_facility_nearby", default "dcpi_change"), threshold (number โ€” the points/MW move that fires it, default 5), notify_email (required โ€” the address the alert is sent to). Answers "let me know if anything changes at the site I saved". Try: set_site_alert saved_site_id=12 trigger_type=dcpi_change threshold=5 notify_email=you@firm.com. Returns {ok, alert_id, message}. Do NOT use to watch a whole MARKET (use set_market_alert) or to save a new site (use save_site); this arms a monitor on ONE already-saved site.

ParametersJSON Schema
NameRequiredDescriptionDefault
thresholdNoThe points/MW move that fires the alert (default 5)
notify_emailYesEmail address the alert is sent to (required); on free tier forced to your human's bound email
trigger_typeNoWhat movement fires the alert: "dcpi_change" (default), "capacity_change", or "new_facility_nearby"
saved_site_idYesThe saved_site_id returned by save_site or list_saved_sites (required)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-destructive, non-idempotent mutation, and the description adds real behavioral context beyond them: the free-tier constraint that notify_email is forced to the human's bound email, that a paid plan can send anywhere, and the bind_email dependency. It stops short of describing re-arm/duplicate behavior despite idempotentHint=false, so a small gap remains.

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 with the core purpose before prerequisites, params, and exclusions, and every section carries useful information. It runs long with a slightly redundant 'Answers "let me know if anything changes..."' framing, but there is little pure waste.

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

Completeness5/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 (the brief '{ok, alert_id, message}' is a bonus). For a 4-param alert-arming mutation, the prerequisites, tier constraints, param sourcing, and sibling exclusions make it complete enough to invoke correctly.

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?

Schema coverage is already 100%, so the baseline is 3, but the description adds sourcing context (saved_site_id comes from save_site or list_saved_sites) and a concrete worked example call. The threshold 'points/MW move that fires it' and trigger_type values largely mirror the schema, so the added value is modest.

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+resource (arm an email watch on a saved site) with the exact data it monitors (DCPI score, grid capacity, nearby facilities). It explicitly distinguishes itself from set_market_alert and save_site, so the agent can tell 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 Guidelines5/5

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

Gives explicit when-to-use context, prerequisites (call bind_email first, call save_site first for a saved_site_id), and named alternatives with exclusions ('Do NOT use to watch a whole MARKET (use set_market_alert) or to save a new site (use save_site)'). Nothing is left to inference.

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

simulate_scenarioMarket Scenario SimulatorA
Read-onlyIdempotent
Inspect

Counterfactual WHAT-IF re-scoring of 300+ DC Hub power markets under YOUR explicit deltas โ€” answers "what happens to the market ranking if conditions change" (only DC Hub holds the underlying components). Params (all optional, pass at least one delta): avg_kwh_cents_pct (power-price % change, e.g. 30), time_to_power_months_delta (months added/removed), queue_wait_months_delta, reserve_margin_pct_delta (points), curtailment_pct_delta (points), market (one slug, e.g. abilene), top_n (default 10, max 25 โ€” ranked by |score change|). Returns per-market baseline vs scenario composite + component breakdown + the EXACT formula/weights in every response (transparent scenario_composite โ€” deliberately NOT the DCPI). Keyless callers get a top-3 preview; any live key (claim_free_key) returns up to 25. Answers "what happens to the ranking if power prices jump 30%", "which markets survive a tighter build rate". Try: simulate_scenario avg_kwh_cents_pct=30 top_n=10. Do NOT use for the present-day ranking (use rank_markets) or trajectory extrapolation (use predict_market_trajectory); this answers explicit hypotheticals.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoMarkets to return, ranked by |score delta| (default 10)
marketNoScore ONE market by slug (optional), e.g. abilene โ€” slugs from rank_markets
avg_kwh_cents_pctNoPower price % change, e.g. 30 for +30% or -20 for -20%
curtailment_pct_deltaNoPercentage POINTS added/removed from curtailment
queue_wait_months_deltaNoMonths added/removed from interconnection queue wait
reserve_margin_pct_deltaNoPercentage POINTS added/removed from reserve margin, e.g. -5
time_to_power_months_deltaNoMonths added (+) or removed (-) from time-to-power, e.g. 12

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely behavioral context beyond annotations: keyless callers receive only a top-3 preview while any live key returns up to 25, and it flags that the returned scenario_composite is deliberately NOT the DCPI. This auth-gated result behavior is the sort of disclosure annotations cannot carry.

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 purpose, then params, returns, example, and exclusions in a deliberate order, with the call example (simulate_scenario avg_kwh_cents_pct=30 top_n=10) giving an immediate template. It is dense and slightly over-packaged, but nearly every clause carries routing or behavioral information.

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

Completeness5/5

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

For a 7-param counterfactual tool, the description covers the hypothetical framing, delta semantics, ranking rule, key-tier limits, and return shape (baseline vs scenario composite with exact formula/weights). With an output schema present it need not explain returns, yet the added detail leaves no gap for correct invocation.

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?

Schema coverage is 100%, so the baseline is 3, and the schema already documents units and defaults. The description adds a constraint absent from the schema ('all optional, pass at least one delta') plus inline worked examples (avg_kwh_cents_pct=30, top_n=10) that clarify intended magnitude and sign conventions. This exceeds the schema baseline.

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 (counterfactual WHAT-IF re-scoring) and resource (300+ DC Hub power markets) with explicit scope (under user-supplied deltas). It openly contrasts itself with siblings, naming rank_markets and predict_market_trajectory as distinct. An agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use phrasing ('what happens to the ranking if power prices jump 30%') and explicit when-NOT clauses with named alternatives (rank_markets for present-day ranking, predict_market_trajectory for trajectory). Also notes market slugs come from rank_markets. Nothing is left to inference.

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

site_selection_canvasSite Selection CanvasA
Read-onlyIdempotent
Inspect

Guided end-to-end data-center site selection. Give a capacity target + geography + deadline and get a ranked shortlist of US markets (DCPI verdict, excess-power headroom, time-to-power, ISO) โ€” and, with a paid key, the synthesis decision layer: the #1 pick, the why, a build sequence, and risk flags. One find->rank->shortlist->verdict call over the Data Center Power Index. Answers "where should I build 100 MW in Texas by 2028". Try: site_selection_canvas capacity_mw=100 region=TX max_months=24. Do NOT use for a single known parcel (use analyze_site) or an open-ended where-should-I-build question (use get_dchub_recommendation); this runs the full find to rank to shortlist to verdict flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO code, e.g. ERCOT or PJM โ€” alias for `region`. Use either; `region` wins if both are sent.
limitNoNumber of shortlist markets to return
stateNoUS state code, e.g. OH โ€” alias for `region`. Use either; `region` wins if both are sent.
regionNoGeography scope: a US state code like TX, an ISO like ERCOT, or a region like us/apac. `state` and `iso` are accepted as aliases for this same filter.
verdictNoOptional DCPI verdict filter: BUILD, CAUTION, or AVOID โ€” or ALL to see every scored market in the geography. Defaults to BUILD,CAUTION, so a geography whose markets are all AVOID returns matched:0 plus an `empty_result` block explaining that; re-run with verdict=ALL to see those rows.
max_monthsNoMaximum acceptable time-to-power in months, 1-120, e.g. 24
capacity_mwNoTarget power load for the build in megawatts (MW), 1-5000, e.g. 100

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the synthesis decision layer (#1 pick, why, build sequence, risk flags) is gated behind a paid key, and it characterizes the whole run as a multi-stage flow rather than a single lookup. It does not, however, discuss rate limits or latency for what is clearly a heavier aggregate call.

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 with the core purpose, then output, then example, then exclusions in a logical order. Three dense sentences plus an example, all of which earn their place. Slightly overloaded with parenthetical detail, but no filler.

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

Completeness5/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 correctly avoids re-explaining return values, yet still signals the shape of the answer (ranked shortlist vs. paid synthesis layer). Combined with full schema coverage and sibling routing, an agent has everything needed to select and invoke it correctly.

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 description coverage is 100%, so every parameter is already documented in the schema, including alias precedence between region/state/iso and verdict defaults. The description adds only an illustrative call (capacity_mw=100 region=TX max_months=24) that maps the prose 'capacity target + geography + deadline' onto schema fields, which is marginal value. Baseline 3 is appropriate when the schema does the heavy lifting.

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+resource ('end-to-end data-center site selection') and the exact pipeline it runs ('find->rank->shortlist->verdict over the Data Center Power Index'). It names the concrete outputs (ranked shortlist with DCPI verdict, headroom, time-to-power, ISO) and explicitly distinguishes itself from two siblings, analyze_site and get_dchub_recommendation.

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

Usage Guidelines5/5

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

Explicit when-to-use ('where should I build 100 MW in Texas by 2028') plus concrete when-NOT-to-use conditions naming the correct alternatives (analyze_site for a single known parcel, get_dchub_recommendation for open-ended questions). Nothing about routing is left to inference.

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

source_capacitySource CapacityA
Read-onlyIdempotent
Inspect

Use when your human needs data-center CAPACITY to buy or lease: search DC Hub Capacity Source by size (kW or MW) and/or location (a region such as North America or Europe, a country, a state or a metro). Example: "500 kW anywhere in Europe" โ†’ min_kw=500, region=europe. Size is min_kw (in kW) or min_mw (in MW), and it is matched against what a listing can ACTUALLY deliver rather than against its headline total: contiguous_kw is the largest single contiguous block available and min_contract_kw the smallest chunk the provider will contract, so a colocation with a large total but a small contiguous block does NOT answer a large search, while a large site willing to contract small chunks does; a listing that declares neither is matched on its total. Location is region (a region key or alias) or location (free text matched against each listing's region, country, state and metro); market, state, delivery_type and available_by narrow further. Listings are powered land, powered shells, turnkey capacity and colocation to buy or lease, for enterprise and agent-led procurement. Returns listing cards (market, region, capacity โ€” with contiguous_kw and min_contract_kw wherever a listing declares them โ€” status and when each listing was last updated) to any caller, plus the filters applied and the program status (live, or upcoming while the first listings are onboarded). Pass slug for one listing: a signed-in human who has accepted the introduction terms sees its specs (signed in means a key with an email bound via claim_free_key then bind_email, or an OAuth connection; accept_capacity_terms records the acceptance the first time); others get the card and the unlock steps. The provider's identity, site and contact are released only after the provider accepts a deal registration, which request_capacity_intro submits, and the listing's disclosure block says whether they have been. To match a whole requirement instead, pass target_mw or target_kw (optionally min_chunk_kw, max_sites, max_providers, available_by): returns exact single-listing fits, multi-site or multi-provider bundles and, when nothing fits, a shortfall timeline; matching needs a signed-in human, and providers stay anonymised until an introduction is accepted. Do NOT use for the public facility directory (use search_facilities) or for completed M&A (use list_transactions).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoOne listing: its slug or numeric id exactly as items[].slug / items[].id return it. Omit to browse teaser cards
limitNoMax results to return (1-500; default varies by tool)
stateNoBrowse filter: two-letter US state, e.g. "TX"
marketNoBrowse filter: market name as it appears on a listing, e.g. "Dallas"
min_kwNoBrowse filter: the size your human needs, in kW (min_mw is the same filter in MW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and min_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares โ€” a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total.
min_mwNoBrowse filter: the size your human needs, in MW (min_kw is the same filter in kW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and min_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares โ€” a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total.
regionNoBrowse filter: comma-separated regions from north_america, latin_america, europe, asia_pacific and middle_east_africa; the aliases emea, apac, latam and americas also work, e.g. "europe" or "emea, apac"
locationNoBrowse filter: comma-separated free text matched against each listing's region, country, state and metro, e.g. "Germany" or "Texas, Phoenix"
max_sitesNoMatch mode: how many listings the requirement may be split across. Default one, which allows exact fits only; raise it to allow bundles
target_kwNoMatch mode: the whole requirement, in kW (target_mw is the same in MW; give one)
target_mwNoMatch mode: the whole requirement, in MW (target_kw is the same in kW; give one). Returns exact fits, bundles and a shortfall instead of teaser cards. Needs a signed-in human
available_byNoBrowse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD. With a target it is the date the whole requirement must be deliverable by
min_chunk_kwNoMatch mode: the smallest piece, in kW, your human will contract at any one listing. Default: no minimum
delivery_typeNoBrowse filter: how the capacity is delivered: land, powered_shell, turnkey or colocation
max_providersNoMatch mode: how many different providers a bundle may use. Default: the same as max_sites

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/non-destructive; the description adds the traits that actually matter: the contiguous_kw / min_contract_kw matching rule, the requirement that a signed-in human (key with bound email or OAuth) is needed for slug and match modes, the accept_capacity_terms step, and the fact that provider identity is released only after a deal registration is accepted via request_capacity_intro. That is substantial disclosure beyond structured fields.

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?

Front-loaded and information-dense, but delivered as one ~400-word run-on paragraph with repetition โ€” the contiguous_kw/min_contract_kw matching explanation appears verbatim in the schema for min_kw and min_mw and is restated in prose. A break into when-to-use, modes, and auth steps would have earned more.

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

Completeness5/5

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

For a 15-parameter tool with an output schema, it covers everything an agent needs: both operating modes, auth prerequisites, terms acceptance, disclosure behavior, and sibling alternatives. Return values are handled by the output schema, so nothing material is left unaddressed.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: a worked example ('500 kW anywhere in Europe' -> min_kw=500, region=europe), the browse-vs-match distinction between min_kw/region and target_mw/min_chunk_kw/max_sites/max_providers, and default relationships (max_providers defaults to max_sites). It mostly mirrors schema text for the matching rule, so it stops short of a 5.

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 ('search DC Hub Capacity Source by size (kW or MW) and/or location') and names the two siblings it is not for (search_facilities, list_transactions). An agent can separate this from the facility-directory and M&A tools without opening any schema.

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

Usage Guidelines5/5

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

Opens with an explicit trigger ('Use when your human needs data-center CAPACITY to buy or lease'), then gives an end-of-description exclusion routing to search_facilities and list_transactions with the reason (public directory vs completed M&A). It also distinguishes browse mode (slug/filters) from match mode (target_mw/target_kw), so the agent knows which path to take.

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

subscribe_digestSubscribe DigestAInspect

Subscribe your human to DC Hub's FREE weekly "what changed in the markets/sites you queried" digest (DCPI movers, new facilities, new deals & news) โ€” ONE call, the nudge that pulls your agent back when the data moves. DOUBLE opt-in + consent-safe: we email a one-click CONFIRM link, the human only gets the digest after confirming, and every email has one-click unsubscribe โ€” this call alone sets no marketing flag. Only call once your human shares their email and wants a weekly email. Params: email (required), source (optional tag). Returns {ok, sent, message}. Prefer this over hand-building POST /api/v1/opt-in/request.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesYour human's email address (required) โ€” a one-click confirm link is sent; use only an address they explicitly gave
sourceNoOptional attribution tag for where the subscription came from, e.g. mcp_digest

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations cover safety flags (readOnly=false, idempotent=false, destructive=false), and the description adds substantive behavior beyond them: a double opt-in flow, a confirm-link email, the fact that the human only receives the digest after confirming, one-click unsubscribe, and that this call sets no marketing flag. It also summarizes the return shape {ok, sent, message}.

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?

Front-loaded with the core action and consent constraints, but padded with promotional framing ('FREE', 'the nudge that pulls your agent back when the data moves', caps emphasis) that consumes space without adding invocation guidance. Correctly sized information is present but not tightly delivered.

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?

Given an output schema exists and a 100%-covered input schema, the description supplies more than enough: consent rules, opt-in mechanics, precondition, and the alternative to avoid. Minor gaps (no frequency/rate-limit detail, no failure behavior) keep it just short of fully complete.

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 description coverage is 100%, so both parameters (email, source) are already documented in the schema with equal or greater detail than the description's bare 'email (required), source (optional tag)'. The description adds no format, validation, or edge-case semantics, so baseline 3 applies.

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+resource ('Subscribe your human to ... weekly digest') and enumerates the digest's contents (DCPI movers, new facilities, new deals & news), which no sibling tool covers. It is easily distinguished from neighboring email/alert tools like bind_email and set_market_alert.

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

Usage Guidelines5/5

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

Explicit precondition: 'Only call once your human shares their email and wants a weekly email.' It also names an alternative path and steers away from it: 'Prefer this over hand-building POST /api/v1/opt-in/request.' Both when-to-use and the preferred route are stated.

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

suggest_reallocationSuggest ReallocationA
Read-onlyIdempotent
Inspect

When a saved site DRIFTS (its national standing dropped โ€” surfaced by get_shortlist refresh or a set_shortlist_alert firing), get replacement candidates from the rest of that shortlist so the alert becomes an action, not just a warning (Phase 5). Returns TWO tiers โ€” tier_1_same_region (a near-in tactical swap) and tier_2_cross_region (a different-region arbitrage) โ€” each re-scored against the DRIFTED slot's own objectives, PLUS drift_is_systemic: if the rest of your shortlist also slipped, the drop is region/baseline-wide and a same-region swap will inherit it (prefer cross_region); if peers held, it's idiosyncratic (tactical_ok). DC Hub does the reduction; the final weighted pick is yours. Candidates come from THIS shortlist only (save more via save_to_shortlist to widen the pool). Scoped to your API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
shortlist_nameYesThe shortlist to re-allocate within (created via save_to_shortlist)
drifted_site_refNoOptional site_ref of the drifted slot to replace; if omitted, the current lowest-scoring site is treated as the drifted one

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint and idempotent, so safety is covered. The description adds rich behavioral context beyond that: it describes the two-tier return structure (tier_1_same_region vs tier_2_cross_region), the drift_is_systemic discriminator and its implications, that candidates are scoped to the shortlist and API key, and that DC Hub reduces but the final weighted pick is the caller's.

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 description is dense and front-loaded but verges on run-on; the parenthetical explanations and all-caps emphasis (DRIFTS, TWO, PLUS) add noise. It is packed with useful information, but the length and formatting reduce clarity rather than increasing conciseness.

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

Completeness5/5

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

Given an output schema exists, the description needn't explain return values, yet it still names the key output fields (tier_1_same_region, tier_2_cross_region, drift_is_systemic) and their interpretation. Combined with the trigger, scope, and alternative-routing guidance, an agent has everything needed to call and interpret this tool.

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?

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining that omitting drifted_site_ref treats the current lowest-scoring site as drifted, and that shortlist_name is scoped within this shortlist. This is useful but not exhaustive, warranting a 4.

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 (suggest replacement candidates for a drifted shortlist slot) and clearly distinguishes the two output tiers. The trigger condition (site DRIFTS, from get_shortlist refresh or set_shortlist_alert) is stated explicitly, setting it apart from siblings like find_alternatives and rank_sites.

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

Usage Guidelines5/5

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

Explicit when-to-use trigger is given (a saved site's national standing drops). The description names where candidates come from (THIS shortlist only) and how to widen the pool (save_to_shortlist), and explains how to interpret drift_is_systemic to pick same-region vs cross-region.

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

summarize_for_citationCitation BlockA
Read-onlyIdempotent
Inspect

Use right before you QUOTE a DC Hub figure to a human โ€” it returns one paste-ready attribution line for the value you are about to cite, with the CORRECT licence for that layer. Pass what you read off the response you are citing: subject (what the figure is), as_of (the provenance as_of), url (the row's profile_url or dcpi_url), completeness (the completeness flag), and layer. โ˜… LICENCE IS PER LAYER AND THIS IS THE POINT: DCPI scores, verdicts, band thresholds, methodology and DC Hub's own grid/site analysis are CC-BY-4.0 and yours to quote with attribution; the facility inventory and third-party physical layers are COMPOSITES whose upstream terms DC Hub cannot waive (parts are OpenStreetMap, ODbL 1.0, share-alike), so they carry a pointer to https://dchub.cloud/data-sources instead of a grant. A flat "CC-BY-4.0" over a facility record is an over-claim. Returns {citation_text, cite_as, license, license_basis, source, url, as_of, as_of_basis, completeness, omitted}. Free, no key, no network call โ€” it assembles what you pass and never resolves or invents a value. If you omit as_of the line says RETRIEVED rather than claiming a data date, and tells you which field to pass next time. Do NOT use to look a figure UP (call the data tool first); this cites a figure you already have.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe profile_url or dcpi_url from the cited row. Must be a dchub.cloud URL; anything else is dropped and named in `omitted`.
as_ofNoThe as_of you read off the cited response (provenance.as_of). Omit it and the line says RETRIEVED instead of claiming a data date.
layerNoWhich layer the figure came from: dcpi | grid_analysis | facility_inventory | physical_infrastructure | deals | other. Decides the licence line; omit and you get the scoped statement rather than a grant.
subjectNoWhat you are citing, in the words you will show the human, e.g. "Ashburn DCPI verdict" or "ERCOT interconnection queue depth"
completenessNoThe completeness flag from the cited response, if it carried one

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations describe a safe read-only, idempotent, closed-world tool. The description adds real behavioral detail beyond that: it is free, makes no network call, never resolves or invents a value, drops non-dchub URLs into `omitted`, and substitutes RETRIEVED when as_of is missing. The licence-per-layer disclosure explains what the caller may legally do with the output, which annotations cannot express.

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 trigger ('Use right before you QUOTE...') and keeps the when-not warning last, which is good ordering. It is however long and dense, with capitalized emphasis and a licence digression that consumes several lines; useful, but more verbose than strictly needed.

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

Completeness5/5

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

For a zero-required-param, output-schema-backed tool with a surprising licence model, it covers the edge cases an agent must anticipate: missing as_of, invalid url, missing layer, and the over-claim risk of flattening a composite layer to CC-BY-4.0. The enumerated return fields are redundant given the output schema but harmless.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema: it explains that `layer` determines the licence line and that omitting it yields a scoped statement rather than a grant, and that a non-dchub `url` is dropped and named in `omitted`. It also frames the params as 'what you read off the response you are citing'.

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 deliverable (returns one paste-ready attribution line for a value about to be cited) and names its exact scope. It explicitly distinguishes itself from the data tools ('Do NOT use to look a figure UP; call the data tool first'), so an agent can route correctly without opening the schema.

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

Usage Guidelines5/5

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

Gives both the trigger ('right before you QUOTE a DC Hub figure to a human') and the exclusion ('Do NOT use to look a figure UP'), plus the precondition that a figure must already have been read. Nothing is left to inference.

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

unlock_more_dataUnlock More DataAInspect

Unlock DC Hub's full depth. Call this when a result came back as a partial preview (e.g. "3 of 12 results shown"), a tool was locked, or your human wants the complete dataset. Returns the upgrade ladder + ready-to-paste checkout links your human completes in ONE click. If this call carries an API key or an MCP session, the checkout binds to it and your very next call returns full data (no reconnect); if it carries neither, the key is emailed to the payer instead โ€” the response says which applies in next_call_full_after_checkout and after_checkout. Paid plans: on the page behind the human_url link. Want the FREE tier instead (no payment, previews plus 2 full answers per tool per day, 50/day with an email)? Call claim_free_key. A gated result already carries its link in human_url; that link is the one to share, and this tool returns the fuller ladder. Param: reason (optional โ€” what you were trying to do, so your human sees why it matters). Returns {plans, human_message, what_unlocks}.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoOptional free-text describing what you were trying to do, so your human sees why an upgrade matters

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only mark this as non-read-only and non-destructive. The description goes well beyond them, disclosing checkout-binding behavior, that the next call returns full data with no reconnect, the email fallback when no key/session is present, and the exact response fields (next_call_full_after_checkout, after_checkout). It omits only failure modes and rate limits.

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?

Purpose and trigger are front-loaded, and every sentence carries operational detail. It is quite dense and the checkout/email clauses could be tightened, but almost nothing is redundant filler.

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 an output schema present, the description need not enumerate returns, yet it still names the key fields and covers the full branching flow (key present vs absent, paid vs free). Adequate for an agent to invoke and act on the result; only error/edge handling is left unstated.

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 100% and the single optional reason param is already fully described in the schema with nearly identical wording, so the description adds no syntax or meaning beyond it. Baseline 3 applies when the schema does the heavy lifting.

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 action ('Unlock DC Hub's full depth') and the exact triggering condition ('a result came back as a partial preview... a tool was locked'). It also distinguishes itself from its closest sibling by naming claim_free_key as the free-path alternative.

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

Usage Guidelines5/5

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

Explicit when-to-use (partial preview, locked tool, human wants full dataset) and when-to-use-something-else (claim_free_key for the free tier). It even clarifies that an already-gated result carries human_url, telling the agent which link to share versus what this tool returns.

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

why_dchubWhy DC Hub (vs. the field)A
Read-onlyIdempotent
Inspect

Call only when the user asks how DC Hub compares with other data-center sources (DataCenterHawk, DC Byte, DCD, Baxtelโ€ฆ) or why use it. Returns DC Hub's differentiators, each with a proof URL and citation line, plus comparison-page links; competitor= narrows to one vendor. Free, no key. Not for data queries. Ex: "How does DC Hub compare to DC Byte?"

ParametersJSON Schema
NameRequiredDescriptionDefault
competitorNoOptional competitor/vendor name for a direct comparison-page link, e.g. DataCenterHawk, "DC Byte", DCD, Baxtel

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier).
_entityNoPayload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it.
citationNoHow to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string.
provenanceNoSource, method, as_of, verification_counts, license, cite_as; quote it when citing.
_front_doorNoFirst-tool hint: plan_query(intent) returns the ordered plan.
_return_loopNoNext-session delta call (get_changes).
site_evaluation_handoffNoFollow-up calls [{tool, parameters, why}] when the payload carries coordinates.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds genuinely new behavior: the payload shape (differentiators each with a proof URL and citation line, plus comparison-page links) and the access model ('Free, no key'). That is real context beyond the annotations, though it does not discuss limits such as coverage of competitor list.

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?

Front-loaded with the gating condition, then return contents, then the parameter, then cost and exclusion, closing with an example. Dense but every clause carries information an agent would otherwise have to guess.

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

Completeness5/5

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

For a single-optional-param, read-only tool with an output schema, the description supplies the trigger, the exclusion, the cost/auth model, and the shape of the response. Nothing needed to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3; the description goes slightly further by explaining the effect of supplying competitor (narrows the response to one vendor), which clarifies intent beyond the schema's 'direct comparison-page link' phrasing. Only one optional param, so there is little more to say.

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 concrete verb (return DC Hub's differentiators) and resource (comparison against named competitors), and explicitly rules itself out of the data-query space that most siblings occupy. An agent can distinguish it from search/get_market_intel/compare_sites without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Call only when the user asks how DC Hub compares... or why use it'), an explicit exclusion ('Not for data queries'), and a worked example utterance. Nothing about when/when-not is left to inference.

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. 94 tool updatesv2.12.43
    • Changedaccept_capacity_terms8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedai_capacity_index8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedanalyze_parcel8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedanalyze_site8 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / locked / description
        Previous value: -"Which sections are Pro-locked on the free headline: {per_factor_breakdown, nearby_infrastructure, power_cost, fiber_carriers, site_analysis_report}"New value: +"Which sections are locked to a paid plan on the free headline: {per_factor_breakdown, nearby_infrastructure, power_cost, fiber_carriers, site_analysis_report}"
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedbind_email8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedclaim_free_key8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedcluster_sites_by_latency8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedcompare_isos8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedcompare_sites8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changeddeal_autopsy8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changeddelete_standing_intent8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changeddiscover_tools8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedexecute_plan8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedexport_dataset8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedfetch8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedfind_alternatives8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedfind_sites8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedgenerate_site_analysis8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_agent_registry8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_backup_status8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_changes8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_climate_intel8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_composite_site_score8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_dchub_recommendation8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_disaster_risk8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_energy_prices7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_facility13 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "description": "ONE facility"
        +}
      • addedOutput schema / properties / next_ask
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Suggested follow-up"
        +}
      • addedOutput schema / properties / preview_is_partial
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the tier withheld fields"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / success
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the lookup executed"
        +}
    • Changedget_facility_risk_delta8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_fiber_intel7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_fiber_readiness8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_gas_economics8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_gas_index8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_gas_intelligence8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_global_power8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_grid_data8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_grid_intelligence20 fields changed
      • changedInput schema / properties / region_id / description
        Previous value: -"Grid region (required): one of the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE), an EIA balancing-authority code (e.g. SOCO, DUK, AZPS, TVA), or the PJM Dominion zone region_id=\"PJM-DOM\" for live Ashburn / Northern Virginia zone load + real-time LMP (the world's #1 DC market, invisible in EIA)"New value: +"Grid region (required): one of the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE), an EIA balancing-authority code (e.g. SOCO, DUK, AZPS, TVA), or the PJM Dominion zone region_id=\"PJM-DOM\" for live Ashburn / Northern Virginia zone load + real-time LMP (the Ashburn / Northern Virginia zone, not visible in EIA)"
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Timestamp of the reading"
        +}
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Share of the payload this tier got"
        +}
      • addedOutput schema / properties / demand_period
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Period of the demand reading"
        +}
      • addedOutput schema / properties / free_preview_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when only the free preview was served"
        +}
      • addedOutput schema / properties / iso
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "ISO / grid operator code"
        +}
      • addedOutput schema / properties / iso_name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Grid operator full name"
        +}
      • addedOutput schema / properties / ok
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the ISO lookup executed"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / taste
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Free-tier preview fields"
        +}
      • addedOutput schema / properties / withheld
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Fields withheld on this tier"
        +}
      • addedOutput schema / properties / withheld_total
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How many fields were withheld"
        +}
    • Changedget_grid_scoreboard7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_hosting_capacity8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_infra_projects8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_infrastructure8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_intelligence_index8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_interconnection_queue9 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • addedOutput schema / properties / queued_generation_pending_revision_gw
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "MISO only: GW of applications in Pending Revision Approval (summer MW), reported beside the active total and NOT part of queued_generation_gw. null on every other ISO, and null on the free preview like the other GW figures"
        +}
      • addedOutput schema / properties / queued_generation_pending_revision_gw_basis
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "What queued_generation_pending_revision_gw counts: the MISO status, MW column, and that it is excluded from queued_generation_gw. Present only when the figure is"
        +}
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_iso_context16 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / iso
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "ISO code"
        +}
      • addedOutput schema / properties / locked_sections
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sections withheld on this tier"
        +}
      • addedOutput schema / properties / max_tokens
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Token budget for this tier"
        +}
      • addedOutput schema / properties / ok
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the ISO lookup executed"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • addedOutput schema / properties / sections
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sections delivered in budget"
        +}
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / tier
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Tier the response was served at"
        +}
      • addedOutput schema / properties / used_tokens
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Tokens used by delivered sections"
        +}
    • Changedget_market_context8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_market_dcpi_rank8 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / narrative / description
        Previous value: -"~100-word CBRE/JLL-style analyst read on the market โ€” quote directly with attribution to DC Hub (CC-BY-4.0)"New value: +"~100-word analyst read on the market, quote directly with attribution to DC Hub (CC-BY-4.0)"
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_market_intel7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_metro_fiber8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_news15 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • addedOutput schema / properties / articles
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "News rows"
        +}
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rows returned in THIS response"
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Same rows as `articles`"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the news set comes from"
        +}
      • addedOutput schema / properties / success
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the news query succeeded"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Total articles matching"
        +}
    • Changedget_peering_intel8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_permitting_intel8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_pipeline18 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • addedOutput schema / properties / by_quarter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Projects per delivery quarter"
        +}
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rows returned in THIS response"
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Same rows as `pipeline`"
        +}
      • addedOutput schema / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the data comes from"
        +}
      • addedOutput schema / properties / last_updated
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Pipeline last refreshed"
        +}
      • addedOutput schema / properties / pipeline
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Construction-pipeline projects"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / stats
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Aggregate pipeline stats"
        +}
      • addedOutput schema / properties / success
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the query succeeded"
        +}
      • addedOutput schema / properties / total_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Total projects matching"
        +}
    • Changedget_power_availability_timeline8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_power_pipeline8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_refined_queue8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_renewable_energy20 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the data comes from"
        +}
      • addedOutput schema / properties / dc_industry_ppas
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data-center PPA rows"
        +}
      • addedOutput schema / properties / filters_applied
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filters the gateway applied"
        +}
      • addedOutput schema / properties / installations_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Installations returned"
        +}
      • addedOutput schema / properties / ppa_as_of
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "PPA set last refreshed"
        +}
      • addedOutput schema / properties / ppa_basis
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How the PPA set is compiled"
        +}
      • addedOutput schema / properties / ppa_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "PPAs returned"
        +}
      • addedOutput schema / properties / ppa_total_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Total PPAs matching"
        +}
      • addedOutput schema / properties / ppa_total_mw
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Total MW across matching PPAs"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • addedOutput schema / properties / renewable_installations
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Renewable installation rows"
        +}
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / success
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the query succeeded"
        +}
    • Changedget_retirement_headroom8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_shortlist8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_subsea_cables8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedget_tax_incentives14 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rows returned in THIS response"
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Incentive programs for the state"
        +}
      • addedOutput schema / properties / last_updated
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Incentive table last reviewed"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / state
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "State queried"
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Serving status"
        +}
    • Changedget_water_risk20 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / current_drought_pct
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Share of state in drought, %"
        +}
      • addedOutput schema / properties / dominant_severity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Dominant drought severity category"
        +}
      • addedOutput schema / properties / drought_categories
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Percent of area per drought category"
        +}
      • addedOutput schema / properties / latest_week
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Most recent weekly reading"
        +}
      • addedOutput schema / properties / ok
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the lookup executed"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • addedOutput schema / properties / queried_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Timestamp of the query"
        +}
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Source of the drought data"
        +}
      • addedOutput schema / properties / source_url
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Source URL"
        +}
      • addedOutput schema / properties / state
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "State queried"
        +}
      • addedOutput schema / properties / success
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "true when the query succeeded"
        +}
      • addedOutput schema / properties / weekly_history
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Weekly drought history"
        +}
    • Changedgrid_transition_radar8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedhyperscaler_deals7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedlist_saved_sites8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedlist_standing_intents8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedlist_transactions7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedplan_fiber_leadin8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedplan_query8 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / routing_hint / description
        Previous value: -"ADVISORY router: collapses 92 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."New value: +"ADVISORY router: collapses 94 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedpredict_market_trajectory8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedrank_markets17 fields changed
      • removedOutput schema / description
        Removed value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • addedOutput schema / properties / cite_as
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ready-made attribution line"
        +}
      • addedOutput schema / properties / criteria
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ranking criterion used"
        +}
      • addedOutput schema / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the data comes from"
        +}
      • addedOutput schema / properties / methodology
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Method note"
        +}
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • addedOutput schema / properties / region
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Region filter applied"
        +}
      • addedOutput schema / properties / result_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rows returned in THIS response"
        +}
      • addedOutput schema / properties / results
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Ranked markets"
        +}
      • addedOutput schema / properties / score_basis
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How the score is computed"
        +}
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
      • addedOutput schema / properties / tier
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Tier the response was served at"
        +}
    • Changedrank_sites8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Addedread_inbox
    • Changedrecover_my_key8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedregister_standing_intent8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Addedreport_finding
    • Changedrequest_capacity_intro8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedresearch_task8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsave_site8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsave_to_shortlist8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedscore_facility8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsearch8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsearch_facilities7 fields changed
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsearch_intelligence8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsemantic_search8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedset_market_alert10 fields changed
      • changedInput schema / properties / channel / description
        Previous value: -"Delivery channel: \"email\" (free, sent to your bound email) or \"webhook\" (Pro)"New value: +"Delivery channel: \"email\" (free, sent to your bound email) or \"webhook\" (paid plan)"
      • changedInput schema / properties / destination / description
        Previous value: -"For channel=\"webhook\", the https URL to POST alerts to (Pro); ignored for email (forced to bound address)"New value: +"For channel=\"webhook\", the https URL to POST alerts to (paid plan); ignored for email (forced to bound address)"
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedset_shortlist_alert8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedset_site_alert8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsimulate_scenario8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsite_selection_canvas8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsource_capacity8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsubscribe_digest8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsuggest_reallocation8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedsummarize_for_citation8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedunlock_more_data8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
    • Changedwhy_dchub8 fields changed
      • changedOutput schema / description
        Previous value: -"DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text โ€” tool-specific data fields ride at the top level alongside these envelope keys."New value: +"DC Hub envelope: tool data fields ride at the top level beside these keys."
      • changedOutput schema / properties / _entity / description
        Previous value: -"Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) โ€” branch on this before parsing the rest."New value: +"Payload class (facility|market|iso_grid|queue_results|deal|report|response); branch on it."
      • changedOutput schema / properties / _front_door / description
        Previous value: -"In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan."New value: +"First-tool hint: plan_query(intent) returns the ordered plan."
      • changedOutput schema / properties / _return_loop / description
        Previous value: -"Suggested next-session delta call (get_changes since=24h) so you pull only what changed."New value: +"Next-session delta call (get_changes)."
      • changedOutput schema / properties / citation / description
        Previous value: -"Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."New value: +"How to attribute DC Hub: {source, url, license, cite_as, retrieved_at}, or the attribution line as a string."
      • changedOutput schema / properties / provenance / description
        Previous value: -"Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing."New value: +"Source, method, as_of, verification_counts, license, cite_as; quote it when citing."
      • changedOutput schema / properties / quota / description
        Previous value: -"Caller quota state (remaining calls, tier) when available."New value: +"Caller quota state (remaining calls, tier)."
      • changedOutput schema / properties / site_evaluation_handoff / description
        Previous value: -"Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates โ€” an array of {tool, parameters, why} entries."New value: +"Follow-up calls [{tool, parameters, why}] when the payload carries coordinates."
  2. 1 tool updatev2.12.25
    • Changedget_interconnection_queue1 field changed
      • addedOutput schema / properties / queued_generation_gw_basis_note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "What queued_generation_gw counts on this row: status filter and MW column, e.g. \"Active only, summer MW\". Present on the US generation-queue ISOs other than ERCOT; compare totals from other trackers only on the same basis"
        +}
  3. 2 tool updatesv2.12.24
    • Changedget_refined_queue1 field changed
      • addedInput schema / properties / developer
        Added value: +{
        +  "description": "ERCOT only: keep projects whose developer name contains this text (case-insensitive substring, e.g. 'tenaska'). Developer names come from ERCOTQueue (ercotqueue.com, Matt Prusak, CC BY 4.0) joined to ERCOT's own queue by INR; other ISOs carry no developer field, so they return no rows when this is set. Answers that use it carry an attribution block",
        +  "type": "string"
        +}
    • Changedget_water_risk1 field changed
      • addedInput schema / properties / location
        Added value: +{
        +  "description": "Market NAME or metro slug instead of coordinates, e.g. \"phoenix\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. A MARKET-level read, not your parcel; pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.",
        +  "type": "string"
        +}
  4. 3 tool updatesv2.12.21
    • Changedget_interconnection_queue5 fields changed
      • addedOutput schema / properties / queued_generation_gw
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Generation interconnection queue in this ISO, GW (US ISOs; ERCOT's generation queue, not its large-load queue). null on NESO/IESO/AESO"
        +}
      • changedOutput schema / properties / queued_load_data_center_gw / description
        Previous value: -"ERCOT only: large-load (data-center-driven) queue, GW โ€” null for ISOs that publish no comparable feed"New value: +"ERCOT: data-center load DERIVED as ~90% of the large-load queue, GW. NESO/IESO/AESO: demand projects in the connections queue (all demand, not data centres only). null elsewhere"
      • changedOutput schema / properties / queued_load_dc_share_pct / description
        Previous value: -"ERCOT only: data-center share of queued load, %"New value: +"ERCOT: data-center share of the large-load queue, %. NESO/IESO/AESO: demand share of the connections queue, %. null elsewhere"
      • changedOutput schema / properties / queued_load_total_gw / description
        Previous value: -"Total queued GENERATION capacity in this ISO, GW"New value: +"Meaning depends on queued_load_total_gw_basis: generation_queue = the generation queue (deprecated alias of queued_generation_gw, removed after 2026-11-15); large_load = ERCOT's large-load (demand) queue; mixed_connection_queue = NESO/IESO/AESO connections queue (generation AND demand). GW"
      • addedOutput schema / properties / queued_load_total_gw_basis
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "What queued_load_total_gw measures on this row: generation_queue | large_load | mixed_connection_queue"
        +}
    • Changedregister_standing_intent20 fields changed
      • addedInput schema / properties / accept_terms
        Added value: +{
        +  "description": "For capacity: true ONLY after your human read and agreed to https://dchub.cloud/listings#terms; otherwise nothing is sent",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / available_by
        Added value: +{
        +  "description": "For capacity: needed by this date, YYYY-MM or YYYY-MM-DD",
        +  "type": "string"
        +}
      • addedInput schema / properties / company
        Added value: +{
        +  "description": "For capacity: your human's company",
        +  "type": "string"
        +}
      • addedInput schema / properties / countries
        Added value: +{
        +  "description": "For capacity: comma-separated countries, e.g. \"Germany, Netherlands\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery_type
        Added value: +{
        +  "description": "For capacity: land, powered_shell, turnkey or colocation",
        +  "enum": [
        +    "land",
        +    "powered_shell",
        +    "turnkey",
        +    "colocation"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / kind / description
        Previous value: -"Watch kind: \"new_deal_in_market\" | \"news_keyword\" | \"permitting_change\""New value: +"Watch kind: \"new_deal_in_market\" | \"news_keyword\" | \"permitting_change\" | \"capacity\" (a Capacity Source requirement, emailed, no webhook)"
      • addedInput schema / properties / markets
        Added value: +{
        +  "description": "For capacity: comma-separated markets, e.g. \"Dallas, Phoenix\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / max_sites
        Added value: +{
        +  "description": "For capacity: how many sites the requirement may be split across, 1-6",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_chunk_kw
        Added value: +{
        +  "description": "For capacity: the smallest block worth taking, in kW",
        +  "type": "number"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "For capacity: your human's full name, exactly as given; never invent it",
        +  "type": "string"
        +}
      • addedInput schema / properties / notes
        Added value: +{
        +  "description": "For capacity: anything else about the requirement; leave out anything that identifies your human",
        +  "type": "string"
        +}
      • addedInput schema / properties / regions
        Added value: +{
        +  "description": "For capacity: comma-separated regions from north_america, latin_america, europe, asia_pacific, middle_east_africa (aliases emea, apac, latam, americas)",
        +  "type": "string"
        +}
      • addedInput schema / properties / role
        Added value: +{
        +  "description": "For capacity: your human's role or title",
        +  "type": "string"
        +}
      • addedInput schema / properties / states
        Added value: +{
        +  "description": "For capacity: comma-separated US states, e.g. \"TX, AZ\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / target_kw
        Added value: +{
        +  "description": "For capacity: capacity needed, in kW (or target_mw, not both)",
        +  "type": "number"
        +}
      • addedInput schema / properties / target_mw
        Added value: +{
        +  "description": "For capacity: capacity needed, in MW (or target_kw, not both)",
        +  "type": "number"
        +}
      • addedInput schema / properties / terms_version
        Added value: +{
        +  "description": "For capacity: the terms version your human agreed to; omit to send the version currently published",
        +  "type": "string"
        +}
      • addedInput schema / properties / use_case
        Added value: +{
        +  "description": "For capacity: what the capacity is for, e.g. \"AI inference\"",
        +  "type": "string"
        +}
      • changedInput schema / properties / webhook_url / description
        Previous value: -"Your public HTTPS webhook endpoint (required)"New value: +"Your public HTTPS webhook endpoint (required for every kind except capacity)"
      • changedInput schema / required
        Previous value: -[
        -  "kind",
        -  "webhook_url"
        -]New value: +[
        +  "kind"
        +]
    • Changedsource_capacity6 fields changed
      • changedInput schema / properties / available_by / description
        Previous value: -"Browse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD"New value: +"Browse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD. With a target it is the date the whole requirement must be deliverable by"
      • addedInput schema / properties / max_providers
        Added value: +{
        +  "description": "Match mode: how many different providers a bundle may use. Default: the same as max_sites",
        +  "maximum": 6,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_sites
        Added value: +{
        +  "description": "Match mode: how many listings the requirement may be split across. Default one, which allows exact fits only; raise it to allow bundles",
        +  "maximum": 6,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / min_chunk_kw
        Added value: +{
        +  "description": "Match mode: the smallest piece, in kW, your human will contract at any one listing. Default: no minimum",
        +  "type": "number"
        +}
      • addedInput schema / properties / target_kw
        Added value: +{
        +  "description": "Match mode: the whole requirement, in kW (target_mw is the same in MW; give one)",
        +  "type": "number"
        +}
      • addedInput schema / properties / target_mw
        Added value: +{
        +  "description": "Match mode: the whole requirement, in MW (target_kw is the same in kW; give one). Returns exact fits, bundles and a shortfall instead of teaser cards. Needs a signed-in human",
        +  "type": "number"
        +}
  5. 4 tool updatesv2.12.20
    • Changedget_facility1 field changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "facility_id": {}
        +    },
        +    "required": [
        +      "facility_id"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "id": {}
        +    },
        +    "required": [
        +      "id"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "slug": {}
        +    },
        +    "required": [
        +      "slug"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "name": {}
        +    },
        +    "required": [
        +      "name"
        +    ]
        +  }
        +]
    • Changedget_grid_intelligence1 field changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "region_id": {}
        +    },
        +    "required": [
        +      "region_id"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "iso": {}
        +    },
        +    "required": [
        +      "iso"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "region": {}
        +    },
        +    "required": [
        +      "region"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "market": {}
        +    },
        +    "required": [
        +      "market"
        +    ]
        +  }
        +]
    • Addedget_infra_projects
    • Changedplan_query2 fields changed
      • changedOutput schema / properties / replay / properties / planner_version / description
        Previous value: -"Semantic version of the PLANNER BEHAVIOR (routing/output) โ€” bumps when routing changes (e.g. 5.1 replay field renames โ†’ 5.2 capacity_search/market_comparison โ†’ 5.4 fiber_power_pairing โ†’ 5.5 the hosting_capacity distribution class โ†’ 5.6 the incentives_tax class + stateFromPlace arg signal โ†’ 5.7 rank-vs-incentives arbitration: ranking language demotes the statutory class, \"rank markets by\" credits market_ranking โ†’ 5.8 reversed-order timing vocabulary: \"timeline for power โ€ฆ\" reaches power_timeline on state-phrased asks while the ISO boost holds operator-phrased asks on grid_headroom โ†’ 5.9 replay.why_live_data, an additive per-class \"why this answer needed live data\" reason; routing unchanged โ†’ 5.10 why_live enum-ized: why_live_code from the canonical taxonomy why_live_reasons + phrase resolved from the snapshot; routing unchanged โ†’ 5.11 GEOGRAPHY SCOPING: a market_ranking intent naming a US state (or a city whose slug carries one) leads with site_selection_canvas region=<ST> โ€” the only ranking tool with a state parameter; ai_capacity_index takes only horizon/limit and rank_markets region accepts only global/us/canada/eu/apac/americas, so both previously answered state-scoped questions nationally. _execConstraintIsoSet also resolves a named state to its ISO set, so the C1 constraint_check can finally fire on state-phrased intents). Distinct from schema_version."New value: +"Semantic version of the PLANNER BEHAVIOR (routing/output) โ€” bumps when routing changes (e.g. 5.1 replay field renames โ†’ 5.2 capacity_search/market_comparison โ†’ 5.4 fiber_power_pairing โ†’ 5.5 the hosting_capacity distribution class โ†’ 5.6 the incentives_tax class + stateFromPlace arg signal โ†’ 5.7 rank-vs-incentives arbitration: ranking language demotes the statutory class, \"rank markets by\" credits market_ranking โ†’ 5.8 reversed-order timing vocabulary: \"timeline for power โ€ฆ\" reaches power_timeline on state-phrased asks while the ISO boost holds operator-phrased asks on grid_headroom โ†’ 5.9 replay.why_live_data, an additive per-class \"why this answer needed live data\" reason; routing unchanged โ†’ 5.10 why_live enum-ized: why_live_code from the canonical taxonomy why_live_reasons + phrase resolved from the snapshot; routing unchanged โ†’ 5.11 GEOGRAPHY SCOPING: a market_ranking intent naming a US state (or a city whose slug carries one) leads with site_selection_canvas region=<ST> โ€” the only ranking tool with a state parameter; ai_capacity_index takes only horizon/limit and rank_markets region accepts only global/us/canada/eu/apac/americas, so both previously answered state-scoped questions nationally. _execConstraintIsoSet also resolves a named state to its ISO set, so the C1 constraint_check can finally fire on state-phrased intents โ†’ 5.12 CORRIDORS: named corridor places (Loudoun, Prince William, Ashburn, Secaucus, Piscataway โ€ฆ) bind a centroid + radius for ARGUMENTS only โ€” never class scoring โ€” reported as replay.place_scope; a county or metro that could only be scoped to a state/ISO is reported as replay.scope_widened {widened_from, to}; execute_plan step results slim STRUCTURED (arrays to their first rows) and relay/upgrade/unlock fields pass through byte-identical โ†’ 5.13 GEOGRAPHY BINDS: every execute_plan step whose tool accepts a point, radius or state gets the plan geography when unset (executed[].geo_injected names what was set; _EXEC_GEO_ARGS pinned to toolspec.json); VA/NJ counties join the corridor table (Middlesex only beside New Jersey); the corridor radius cap is 300 km; step slimming is ALWAYS structured (no JSON-prefix fallback) and machine_pay, retry_*, persist_command and auto_trial_key join the never-cut fields). Distinct from schema_version."
      • changedOutput schema / properties / routing_hint / description
        Previous value: -"ADVISORY router: collapses 91 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."New value: +"ADVISORY router: collapses 92 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
  6. 1 tool updatev2.12.15
    • Changedsource_capacity2 fields changed
      • changedInput schema / properties / min_kw / description
        Previous value: -"Browse filter: only listings with at least this much capacity, in kW (min_mw is the same filter in MW)"New value: +"Browse filter: the size your human needs, in kW (min_mw is the same filter in MW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and min_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares โ€” a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total."
      • changedInput schema / properties / min_mw / description
        Previous value: -"Browse filter: only listings with at least this much capacity, in MW"New value: +"Browse filter: the size your human needs, in MW (min_kw is the same filter in kW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and min_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares โ€” a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total."
  7. 2 tool updatesv2.12.14
    • Changedrequest_capacity_intro6 fields changed
      • addedInput schema / properties / capacity_kw
        Added value: +{
        +  "description": "Capacity needed, in kW (capacity_mw is the same requirement in MW)",
        +  "type": "number"
        +}
      • addedInput schema / properties / countries
        Added value: +{
        +  "description": "Comma-separated countries of interest, e.g. \"Germany, Netherlands\"",
        +  "type": "string"
        +}
      • changedInput schema / properties / message / description
        Previous value: -"A short note from your human to the operator"New value: +"A short note from your human for the provider. The deal registration itself carries only the company name and the requirement"
      • changedInput schema / properties / notes / description
        Previous value: -"Anything else the operator should know about the requirement"New value: +"Anything else the provider should know about the requirement. It travels with the requirement, so leave out anything that identifies your human"
      • addedInput schema / properties / regions
        Added value: +{
        +  "description": "Comma-separated regions of interest from north_america, latin_america, europe, asia_pacific and middle_east_africa (aliases emea, apac, latam, americas), e.g. \"europe, apac\"",
        +  "type": "string"
        +}
      • changedInput schema / properties / slug / description
        Previous value: -"The listing to request an introduction for: its slug or id from source_capacity. Omit to register a standing requirement for upcoming listings instead"New value: +"The listing to register a deal for: its slug or id from source_capacity. Omit to register a standing requirement for upcoming listings instead"
    • Changedsource_capacity5 fields changed
      • addedInput schema / properties / available_by
        Added value: +{
        +  "description": "Browse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD",
        +  "type": "string"
        +}
      • addedInput schema / properties / delivery_type
        Added value: +{
        +  "description": "Browse filter: how the capacity is delivered: land, powered_shell, turnkey or colocation",
        +  "enum": [
        +    "land",
        +    "powered_shell",
        +    "turnkey",
        +    "colocation"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / location
        Added value: +{
        +  "description": "Browse filter: comma-separated free text matched against each listing's region, country, state and metro, e.g. \"Germany\" or \"Texas, Phoenix\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / min_kw
        Added value: +{
        +  "description": "Browse filter: only listings with at least this much capacity, in kW (min_mw is the same filter in MW)",
        +  "type": "number"
        +}
      • addedInput schema / properties / region
        Added value: +{
        +  "description": "Browse filter: comma-separated regions from north_america, latin_america, europe, asia_pacific and middle_east_africa; the aliases emea, apac, latam and americas also work, e.g. \"europe\" or \"emea, apac\"",
        +  "type": "string"
        +}
  8. 6 tool updatesv2.12.13
    • Addedaccept_capacity_terms
    • Removedget_pocket_listings
    • Changedplan_query1 field changed
      • changedOutput schema / properties / routing_hint / description
        Previous value: -"ADVISORY router: collapses 90 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."New value: +"ADVISORY router: collapses 91 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
    • Addedrequest_capacity_intro
    • Removedrequest_listing_intro
    • Addedsource_capacity
  9. 3 tool updatesv2.12.12
    • Addedget_pocket_listings
    • Changedplan_query1 field changed
      • changedOutput schema / properties / routing_hint / description
        Previous value: -"ADVISORY router: collapses 88 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."New value: +"ADVISORY router: collapses 90 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
    • Addedrequest_listing_intro
  10. 8 tool updatesv2.12.10
    • Addeddelete_standing_intent
    • Addedfind_sites
    • Addedget_peering_intel
    • Addedget_subsea_cables
    • Addedlist_standing_intents
    • Changedplan_query1 field changed
      • changedOutput schema / properties / routing_hint / description
        Previous value: -"ADVISORY router: collapses 83 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."New value: +"ADVISORY router: collapses 88 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
    • Addedregister_standing_intent
    • Removedstanding_intent
  11. 2 tool updatesv2.12.6
    • Changedanalyze_site3 fields changed
      • changedInput schema / properties / lat / description
        Previous value: -"Site latitude in decimal degrees (-90 to 90; required unless candidate_id given), e.g. 33.45"New value: +"Site latitude in decimal degrees (-90 to 90; required unless candidate_id or location given), e.g. 33.45"
      • addedInput schema / properties / location
        Added value: +{
        +  "description": "Market NAME or metro slug instead of coordinates, e.g. \"ashburn\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. This is a MARKET-level read, not the parcel you named โ€” pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.",
        +  "type": "string"
        +}
      • changedInput schema / properties / lon / description
        Previous value: -"Site longitude in decimal degrees (-180 to 180; required unless candidate_id given), e.g. -112.07"New value: +"Site longitude in decimal degrees (-180 to 180; required unless candidate_id or location given), e.g. -112.07"
    • Changedget_gas_index1 field changed
      • changedInput schema / properties / state / description
        Previous value: -"US state abbreviation, e.g. TX, VA, AZ. The DCGI score is WITHDRAWN (2026-08-08): any value returns unavailable_reason, never a score โ€” use get_gas_intelligence for the per-state gas brief"New value: +"US state abbreviation, e.g. TX, VA, AZ. Returns the DCGI score and verdict, plus `gas_price_series` naming which EIA series priced the state. A state that cannot be priced comes back verdict UNSCORED with dcgi null and an `unscored_reason` โ€” absence, not a low score. Withdrawn 2026-08-08, restored 2026-08-30: do NOT compare against a figure published before 2026-08-08. Use get_gas_intelligence for the per-state pipeline and operator brief"
  12. 83 tool updates
    • Changedai_capacity_index2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedanalyze_parcel2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedanalyze_site2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedbind_email3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "email"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedclaim_free_key2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcluster_sites_by_latency2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcompare_isos3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "isos"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcompare_sites2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddeal_autopsy2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddiscover_tools2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedexecute_plan9 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / capacity_mw
        Added value: +{
        +  "description": "Target capacity in MW, e.g. 100.",
        +  "type": "number"
        +}
      • changedInput schema / properties / context / description
        Previous value: -"Optional structured hints AND step-arg overrides: {lat, lon, iso, market, capacity_mw, candidate_id, state, since} โ€” user-supplied values beat minted ones"New value: +"Optional structured hints AND step-arg overrides: {lat, lon, iso, market, capacity_mw, candidate_id, state, since} โ€” user-supplied values beat minted ones. The typed top-level params below are merged into this and WIN on conflict."
      • addedInput schema / properties / iso
        Added value: +{
        +  "description": "ISO/RTO code to pin geography, e.g. \"PJM\", \"ERCOT\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / lat
        Added value: +{
        +  "description": "Latitude for a specific site.",
        +  "type": "number"
        +}
      • addedInput schema / properties / lon
        Added value: +{
        +  "description": "Longitude for a specific site.",
        +  "type": "number"
        +}
      • addedInput schema / properties / market
        Added value: +{
        +  "description": "Metro slug or name to pin the analysis to, e.g. \"ashburn\". Beats any market the planner would mint.",
        +  "type": "string"
        +}
      • addedInput schema / properties / state
        Added value: +{
        +  "description": "US state code, e.g. \"VA\".",
        +  "type": "string"
        +}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedexport_dataset2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedfetch2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedfind_alternatives4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / facility_id / description
        Previous value: -"The seed facility id/slug (or use name) to find alternatives to, from a prior search result"New value: +"The seed facility id/slug (required) to find alternatives to, from a prior search result โ€” there is no `name` param; an undeclared key is silently stripped"
      • addedInput schema / required
        Added value: +[
        +  "facility_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedgenerate_site_analysis2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_agent_registry2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_backup_status2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_changes2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_climate_intel2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_composite_site_score2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_dchub_recommendation2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_disaster_risk2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_energy_prices2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_facility2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_facility_risk_delta2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_fiber_intel2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_fiber_readiness2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_gas_economics3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "market"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_gas_index3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / state / description
        Previous value: -"US state abbreviation for a single-state DCGI breakdown, e.g. TX, VA, AZ; omit for the national ranking"New value: +"US state abbreviation, e.g. TX, VA, AZ. The DCGI score is WITHDRAWN (2026-08-08): any value returns unavailable_reason, never a score โ€” use get_gas_intelligence for the per-state gas brief"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_gas_intelligence2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_global_power2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_grid_data2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_grid_intelligence3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / market
        Added value: +{
        +  "description": "Market NAME or metro slug instead of a grid code, e.g. \"Ashburn\", \"northern-virginia\", \"dallas\". Resolved to its ISO through the published DCPI market row before the brief is built; the answer carries a resolved_from block naming what it resolved to. Not an alias for region_id โ€” \"Ashburn\" is not a grid code.",
        +  "type": "string"
        +}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_grid_scoreboard2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_hosting_capacity2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_infrastructure2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_intelligence_index2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_interconnection_queue4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / projects / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {
        -        "capacity_mw": {
        -          "anyOf": [
        -            {
        -              "anyOf": [
        -                {
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "string"
        -                }
        -              ]
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Nameplate capacity, MW"
        -        },
        -        "county": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "County"
        -        },
        -        "fuel_type": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Fuel / technology"
        -        },
        -        "iso": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "ISO/RTO"
        -        },
        -        "project_name": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Project name"
        -        },
        -        "queue_date": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Queue entry date"
        -        },
        -        "queue_id": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "ISO queue position id"
        -        },
        -        "queue_status": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Queue status"
        -        },
        -        "state": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "US state"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "capacity_mw": {
        +              "anyOf": [
        +                {
        +                  "anyOf": [
        +                    {
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "string"
        +                    }
        +                  ]
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Nameplate capacity, MW"
        +            },
        +            "county": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "County"
        +            },
        +            "fuel_type": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Fuel / technology"
        +            },
        +            "iso": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "ISO/RTO"
        +            },
        +            "project_name": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Project name"
        +            },
        +            "queue_date": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Queue entry date"
        +            },
        +            "queue_id": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "ISO queue position id"
        +            },
        +            "queue_status": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Queue status"
        +            },
        +            "state": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "US state"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {},
        +        "properties": {
        +          "by_iso_count": {
        +            "description": "Per-ISO project counts, e.g. {\"PJM\":972,\"ERCOT\":1893,\"CAISO\":279}"
        +          },
        +          "note": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "How the all-ISO rollup was assembled and where to get the full per-ISO list"
        +          },
        +          "top": {
        +            "description": "The largest projects across all ISOs (same row shape as the per-ISO array form)"
        +          },
        +          "total": {
        +            "anyOf": [
        +              {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "string"
        +                  }
        +                ]
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Projects in the full multi-ISO queue, e.g. 5512"
        +          },
        +          "tracked": {
        +            "anyOf": [
        +              {
        +                "type": "boolean"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Whether DC Hub has classified named per-project rows for this snapshot"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / projects / description
        Previous value: -"Queued generation projects (largest / most recent first)"New value: +"SHAPE DEPENDS ON THE CALL: with iso= this is an ARRAY of queued generation projects (largest / most recent first); with iso omitted it is the all-ISO SUMMARY OBJECT {total, tracked, by_iso_count, top, note} โ€” per-project rows are not returned for the all-ISO snapshot. Check the type before indexing."
    • Changedget_iso_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "iso"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_market_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "market"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_market_dcpi_rank3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "market_slug"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_market_intel2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_metro_fiber2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_news2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_permitting_intel2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_pipeline2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_power_availability_timeline3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "state"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_power_pipeline2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_refined_queue2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_renewable_energy2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_retirement_headroom2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_shortlist3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "name"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_tax_incentives2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_water_risk2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedgrid_transition_radar2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedhyperscaler_deals3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / deals / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {
        -        "actors": {
        -          "description": "Classified actors (OpenAI, Microsoft, Oracle, NVIDIA, sovereign-AI, โ€ฆ)"
        -        },
        -        "capacity": {
        -          "description": "Extracted capacity when present โ€” {display, value_mw} object (was a bare number pre-2026-07)"
        -        },
        -        "id": {
        -          "anyOf": [
        -            {
        -              "anyOf": [
        -                {
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "string"
        -                }
        -              ]
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Deal id"
        -        },
        -        "published": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Publication timestamp"
        -        },
        -        "source": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Publication"
        -        },
        -        "summary": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Deal summary"
        -        },
        -        "title": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Headline"
        -        },
        -        "url": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Source article URL"
        -        },
        -        "value_usd": {
        -          "anyOf": [
        -            {
        -              "anyOf": [
        -                {
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "string"
        -                }
        -              ]
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Extracted deal value in USD (regex-extracted; null when undisclosed)"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "actors": {
        +          "description": "Classified actors (OpenAI, Microsoft, Oracle, NVIDIA, sovereign-AI, โ€ฆ)"
        +        },
        +        "capacity": {
        +          "description": "Extracted capacity when present โ€” {display, value_mw} object (was a bare number pre-2026-07)"
        +        },
        +        "id": {
        +          "anyOf": [
        +            {
        +              "anyOf": [
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "string"
        +                }
        +              ]
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Deal id"
        +        },
        +        "published": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Publication timestamp"
        +        },
        +        "source": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Publication"
        +        },
        +        "summary": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Deal summary"
        +        },
        +        "title": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Headline"
        +        },
        +        "url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Source article URL"
        +        },
        +        "value_usd": {
        +          "description": "Extracted deal value when present โ€” {display:\"$35.6B\", value:35600000000.0} object; null when undisclosed (was a bare number pre-2026-08)"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_saved_sites2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedlist_transactions2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedplan_fiber_leadin3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "from",
        +  "to"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedplan_query3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / routing_hint
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "properties": {
        +        "advisory": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "States that this recommends an entry point and asserts nothing about success"
        +        },
        +        "best_path": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Where to start: `execute_plan` for a multi-capability question, or the one tool name for a single-capability lookup"
        +        },
        +        "expected_outputs": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "An output CLASS to expect โ€” not a tool name"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Bounded list of what the recommended path returns"
        +        },
        +        "external_sources_recommended": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {},
        +                    "properties": {
        +                      "source_class": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Closed enum: brokerage_research | market_analytics | financial_context | utility_or_iso_filing | operator_disclosure"
        +                      },
        +                      "why": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "What that class of source holds that DC Hub does not, quoting our own published limit"
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "What this question needs that DC Hub does NOT hold, named by SOURCE CLASS and never by vendor. An EMPTY array is an answer: DC Hub covers this class end to end."
        +        },
        +        "problem": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The matched intent class โ€” the SAME closed enum as intent_class, so it is branchable, not free text"
        +        },
        +        "why": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Short deterministic rationale for that entry point"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "ADVISORY router: collapses 83 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version โ€” those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
        +}
    • Changedpredict_market_trajectory3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "market_slug"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrank_markets4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Return ONLY these row fields (array or comma string) โ€” a token diet. The response envelope (citation, provenance, as_of, coverage, request_interpretation, the human relay line) is NEVER projected away; a projection narrows ROWS only."
        +}
      • addedInput schema / properties / projection
        Added value: +{
        +  "description": "Named field preset, cheaper to send than a field list: market_summary (ranking rows), siting_summary (site/point rows), identity_only (ids + names).",
        +  "enum": [
        +    "siting_summary",
        +    "market_summary",
        +    "identity_only"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrank_sites2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrecover_my_key3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "email"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedresearch_task2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsave_site2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsave_to_shortlist2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedscore_facility3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "facility_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsearch2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsearch_facilities2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsearch_intelligence2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsemantic_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedset_market_alert3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "market",
        +  "channel"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedset_shortlist_alert2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedset_site_alert3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "saved_site_id",
        +  "notify_email"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsimulate_scenario2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsite_selection_canvas6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / iso
        Added value: +{
        +  "description": "ISO/RTO code, e.g. ERCOT or PJM โ€” alias for `region`. Use either; `region` wins if both are sent.",
        +  "type": "string"
        +}
      • changedInput schema / properties / region / description
        Previous value: -"Geography scope, e.g. a US state code like TX or a region like us/apac"New value: +"Geography scope: a US state code like TX, an ISO like ERCOT, or a region like us/apac. `state` and `iso` are accepted as aliases for this same filter."
      • addedInput schema / properties / state
        Added value: +{
        +  "description": "US state code, e.g. OH โ€” alias for `region`. Use either; `region` wins if both are sent.",
        +  "type": "string"
        +}
      • changedInput schema / properties / verdict / description
        Previous value: -"Optional DCPI verdict filter: BUILD, CAUTION, or AVOID"New value: +"Optional DCPI verdict filter: BUILD, CAUTION, or AVOID โ€” or ALL to see every scored market in the geography. Defaults to BUILD,CAUTION, so a geography whose markets are all AVOID returns matched:0 plus an `empty_result` block explaining that; re-run with verdict=ALL to see those rows."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedstanding_intent2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsubscribe_digest3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "email"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsuggest_reallocation3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / required
        Added value: +[
        +  "shortlist_name"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Addedsummarize_for_citation
    • Changedunlock_more_data2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedwhy_dchub2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"

TDQS

A3.8/5.0

Scored across 94 tools

Disambiguation3/5

The descriptions are unusually disciplined about cross-referencing siblings ("Do NOT use X, use Y"), which rescues many pairs, but the sheer volume of near-duplicates is severe: search/search_facilities/search_intelligence/semantic_search, get_grid_intelligence/get_grid_data/get_grid_scoreboard/get_iso_context/compare_isos, and get_market_intel/get_market_dcpi_rank/get_market_context/get_intelligence_index/rank_markets/site_selection_canvas/grid_transition_radar all sit in the same conceptual space. An agent must read long negative instructions to pick correctly, and several overlaps (plan_query vs execute_plan, save_site vs save_to_shortlist) still require care.

Naming Consistency4/5

The dominant pattern is consistent snake_case verb_noun (get_facility, list_transactions, rank_markets, set_site_alert, delete_standing_intent), applied across the vast majority of the 94 tools. Minor deviations exist โ€” the bare connector names `search` and `fetch`, plus noun/phrase outliers like why_dchub, unlock_more_data and summarize_for_citation โ€” but they do not break readability.

Tool Count1/5

94 tools is an extreme count that forces an agent through a navigation meta-tool (discover_tools) and a planner front door before it can act. Even granting a genuinely wide domain (facilities, markets, grid, gas, fiber, water, risk, deals, capacity, account, partner), the surface carries clear redundancy โ€” multiple market-rankers, multiple grid readers, three-plus semantic search variants โ€” so not every tool earns its place.

Completeness4/5

Coverage is remarkably broad and lifecycle-aware: discovery, scoring, ranking, alerts, persistence (save_site/list_saved_sites/get_shortlist), sync (get_changes), export, provenance and citation, plus partner and key-management flows. The main gap is that saved sites and shortlists have create/read/export paths but no explicit update or delete operation, and some overlaps hint at features delivered twice rather than once cleanly.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    One-call Australian energy-market plumbing via AEMO โ€” cited, structured responses for market data and analysis, not a data broker.
    5
    129 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server wrapping worldmonitor global intelligence dashboard, exposing 140 tools across 32 services for live market, geopolitical, military, cyber, climate, and supply chain data.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server exposing distributed industrial asset data (battery storage, EV chargers, solar arrays) with tools for asset status, geospatial search, alerts, anomaly explanation, and load simulation.
    734 npm
    MIT