Skip to main content
Glama

DC Hub — Data Center Site Selection & Colocation: Electricity, Power Grid, Gas, Fiber

Server Details

Live power, energy, grid, gas, fiber + off-market data-center capacity in kW/MW — query and cite.

Ownership verified
Status
Healthy
Uptime
99.9% over 40 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
azmartone67/dchub-mcp-server
GitHub Stars
3
Server Listing
DC Hub — Data Center & Energy Intelligence

TDQS

A3.8/5.0

Scored across 92 tools

Disambiguation3/5

Many tools are clearly distinct (e.g., analyze_site, get_grid_intelligence, get_fiber_intel), but there is significant overlap among site-scoring tools (analyze_site, get_composite_site_score, score_facility, site_selection_canvas) and search tools (search, semantic_search, search_intelligence, search_facilities). Also, separate shortlist tools (save_site, save_to_shortlist, list_saved_sites, get_shortlist) have unclear boundaries. While descriptions are long and detailed, the sheer number of similar purposed tools creates ambiguity.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., analyze_site, get_grid_intelligence, compare_sites, list_transactions, save_site). Some deviations exist (e.g., cluster_sites_by_latency, deal_autopsy, hyperscaler_deals) that are less pattern-consistent but still readable. No mixing of camelCase with snake_case in tool names, so the set is largely coherent.

Tool Count1/5

With 92 tools, this is far beyond any practical scope for a site-selection and colocation server. The tool set covers many subdomains (market intelligence, grid, fiber, deals, account management, meta-tools), but the count is excessive and unwieldy for an agent to navigate. Many tools are near-duplicates or highly specialized variations, making the surface feel bloated rather than curated.

Completeness4/5

The server covers an extensive and comprehensive range of data-center siting factors: power, gas, fiber, water, climate, risk, tax, market, deals, and more. There are few obvious gaps; and many operations are well-covered (e.g., market comparison, trend prediction, scenario simulation). Minor gaps exist (e.g., some PPA/energy contract tools are missing, and water risk is only US-focused), but overall the coverage is very thorough for the stated purpose.

Available Tools

92 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (which only mark it as a non-read-only, non-destructive, non-idempotent mutation), the description discloses the required identity chain (claim_free_key then bind_email or OAuth), the once-per-terms-version semantics, the 'nothing opens/sent' gating on accept_terms, and the side effect of recording in DC Hub's lead register.

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 gating condition and always-true trigger, and most sentences carry load. The parenthetical identity chain and repeated warnings make it slightly longer than needed, 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, yet the description still briefly notes the return (accepted plus terms version). Combined with prerequisites, alternatives, and trigger conditions, an agent has everything needed to call this correctly without further lookup.

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, including the exactly-true requirement and the omit-to-use-published-version default. The description restates these rather than adding new meaning, 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 (accept) and resource (capacity terms) and immediately delineates scope: it records acceptance so Capacity Source listing details open. It explicitly differentiates from siblings by naming request_capacity_intro and source_capacity as different operations.

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 trigger (call when source_capacity returns a listing locked with access.reason terms_acceptance_required), an explicit prohibition ('never on your own judgement'), and two named alternatives for adjacent needs. 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.

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. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, and the description adds useful behavioral context beyond those: the refresh cadence ('Refreshed Fridays 14:00 UTC'), the ranking logic ('composite score (depth + diversity + power)'), and the caveat that cooling-type signals appear only 'where facility data carries them.' This meaningfully supplements the annotation metadata.

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 description is three sentences with no wasted words. It front-loads the core ranking behavior, then lists what is returned, then covers usage boundaries. Every sentence contributes either to selection, invocation, or differentiation.

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 the tool has an output schema, the description does not need to enumerate return types exhaustively, but it still summarizes the key output fields and scoring rationale. It also provides refresh timing, use cases, and explicit sibling exclusions, making it fully self-sufficient for correct tool selection and invocation.

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% for both parameters, so the baseline is 3. The description reinforces the horizon concept ('next 30/60/90 days') and adds business context for why the parameter matters, but it does not provide additional parameter-level syntax or format details beyond what the schema already documents.

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 opens with a specific verb and resource: 'ranks data center markets by where 100MW of AI training capacity can land in the next 30/60/90 days.' It clearly separates this from sibling tools by naming rank_markets and grid_transition_radar as alternatives, so an agent can identify the correct tool without inspecting its 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?

The description explicitly states recommended use cases ('AI capex planning, GPU cluster siting, hyperscaler deal forecasting') and gives direct exclusion guidance: 'Do NOT use for a general best-markets ranking (use rank_markets) or forward grid-emergence (use grid_transition_radar).' This gives the agent both positive and negative selection criteria.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark readOnly/idempotent/non-destructive, lowering the burden; the description adds meaningful behavior beyond that: a point outside hosted coverage returns an honest 404 with the coverage list rather than a guess, and representative_point is chosen from the largest-area member to avoid off-pacel geometric centers. These details materially affect how the agent interprets results and failure modes.

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?

Extremely dense and front-loaded, with no fluff sentences; the core action and scoping come first. However, it is one long paragraph with heavy parentheticals, and a short bulleted structure would improve scanability for an agent.

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-value format doesn't need to be restated; the description adds coverage rollout, 404 error behavior, anchor semantics, handoff integration, and sibling routing. For a 7-param, 0-required tool with two invocation modes, nothing critical 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?

Input schema covers all 7 parameters at 100%, so baseline is 3; the description still adds useful nuance by clarifying that a MultiPolygon 'carries discontinuous pacels as one envelope', that lat/lon is the hosted-lookup path when geometry is omitted, and that capacity_mw passes into the site_evaluation_handoff. It doesn't add substantial syntax detail beyond the schema, but the mode-level semantics are helpful.

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 'Structured read of a parcel BOUNDARY', naming a specific verb (read), resource (parcel boundary), and outcome (anchor + size). It explicitly contrasts with analyze_site and get_refined_queue, so an agent can tell it apart from the closest siblings without digging into 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?

Provides explicit routing rules: 'Use when you HAVE a boundary or a point on a specific parcel' and directs to analyze_site for general lat/lon site scores and get_refined_queue for queue survivors. It also distinguishes the two input modes — own GeoJSON boundary vs lat/lon hosted-pacel lookup — so usage is unambiguous.

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 when a user has ONE specific lat/lon (a parcel, a candidate site) and wants the full multi-factor data-center suitability read in one call — the single-site step of site selection. Example: "Score this Phoenix parcel for a 100MW build — power, gas, fiber, market & risk." — analyze_site lat=33.45 lon=-112.07 capacity_mw=100 state=AZ. Params: lat (-90 to 90, required unless candidate_id or location), lon (-180 to 180, required unless candidate_id or location), location (a market NAME or metro slug instead of coordinates, e.g. location="ashburn" — resolved to that market's PUBLISHED CENTROID through the DCPI market row, with a resolved_from block naming what it resolved to; a MARKET-level read, NOT the parcel you named, and a trailing state is not stripped so "Ashburn, VA" will not resolve), candidate_id (a cand_… from get_refined_queue — resolves coordinates from the frozen mint and ignores lat/lon), capacity_mw (target load in MW, e.g. 50-500 — returns a capacity_context block sizing that load against nearby installed generation; it deliberately does NOT move overall_score, and the block names where the load IS applied), state (2-letter US, optional — improves the tax-incentive/context lookup), include_grid/include_risk/include_fiber (booleans, default true). Returns (full, paid): {overall_score (aka composite_score, 0-100 composite — for the integrity-first version that never imputes a missing factor, use get_composite_site_score), interpretation (verdict string, e.g. "Excellent site"), scores{power_infrastructure, gas_pipeline_access, fiber_connectivity, market_conditions, risk_resilience — each 0-100}, nearby{substations_50km, power_plants_80km, gas_pipelines_50km, facilities_100km, fiber_carriers_in_state, generation_capacity_mw, total_capacity_mw}, power_cost{industrial_cents_kwh, commercial_cents_kwh, period, basis}, fiber{connectivity_score, nearest_carrier_km, near_net_bucket, top_carriers[], single_carrier_risk}, location, citation}. FREE tier returns a REAL, citable HEADLINE — composite_score + verdict + the single top limiting factor (the lowest sub-score) + citation; the full per-factor breakdown, nearby infrastructure, power cost, fiber carriers, and the branded Site Analysis PDF (generate_site_analysis) are Pro. For dedicated water / disaster / climate / tax reads use get_water_risk / get_disaster_risk / get_climate_intel / get_tax_incentives. Do NOT use to compare 2+ sites (use compare_sites) or to find sites that match a target (use find_alternatives).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
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)
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

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) when available.
lockedNoWhich sections are Pro-locked 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 discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
previewNoHeadline preview line (free tier)
verdictNoVerdict string, e.g. "Excellent site" / BUILD-CAUTION-AVOID read
citationNoMachine-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.
locationNoEcho of the analyzed location (full payload)
power_costNoPower cost read: {industrial_cents_kwh, commercial_cents_kwh, period, basis} (full payload)
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark readOnly/idempotent/non-destructive, and the description adds substantial context: free vs paid tier behavior, location resolving to a market centroid rather than the named parcel, candidate_id overriding lat/lon, capacity_mw deliberately not affecting overall_score, and the MPP payment-challenge flow. There is no contradiction with annotations.

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 front-loaded with the usage condition and example, but it is very long and repeats parameter ranges and return-structure details that the input/output schemas already provide. Most sentences add useful caveats, but it could be tightened by relying more on the schema and presenting the extra guidance as compact bullets.

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 14-parameter tool with multiple mutually-exclusive location modes, free/paid tiers, and a payment flow, the description covers everything an agent needs: how to specify the site, what the score means, what the free tier returns, how payment works, and which sibling tools handle related but different tasks. Nothing critical is missing.

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

Parameters5/5

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

Even with 100% schema coverage, the description adds conditional requiredness (lat/lon unless candidate_id or location), explains that location is a market-level read and not an alias for coordinates, clarifies candidate_id precedence over lat/lon, and describes the capacity_mw side-effect block. This is substantial meaning beyond the raw 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 clearly states a specific verb+resource ('full multi-factor data-center suitability read') for a single site, and explicitly positions it as the single-site step of site selection. It names what it is not (compare_sites, find_alternatives) and distinguishes it from specialized risk/tax tools, so an agent can tell it apart from 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?

It opens with an explicit 'Use when' condition and provides a concrete example call. It also gives clear exclusions ('Do NOT use to compare 2+ sites' with named alternatives) and routes dedicated water/disaster/climate/tax needs to specific sibling tools, leaving no ambiguity about when to invoke it.

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 10 free calls total, then results drop to previews until it's bound; 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations carry only readOnlyHint=false and destructiveHint=false, leaving the disclosure burden on the description — which it fully bears. It discloses the free-tier gate mechanics (10 free calls → previews → 50/day after binding), the failure mode ('If the email can't be accepted, the key keeps working'), consent defaults (marketing OFF, transactional only), and even an honest caveat that the retention benefit is UNPROVEN with a small cohort. Nothing contradicts the annotations; readOnlyHint=false aligns with binding being a state-changing but non-destructive operation.

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 '★ WHAT THIS DOES AND DOES NOT DO' opening is a strong front-load that prioritizes the core distinction. However, the description is a dense wall of text covering the cohort-size statistical caveat, verbatim scripts, and consent boilerplate — some of which repeats the schema descriptions (email guidance appears twice). It could be tightened by roughly a third without losing invocation-critical information, so it is helpful but not concise.

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-stakes consent/mutation tool, nothing needed to invoke it correctly is missing: the trigger condition, the exact question to ask the human, the consent purpose line to surface, the failure behavior, and the return statement ('Returns the unlocked benefits + confirmation') backed by an output schema. This is a complete operational brief for an agent.

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 consequence-level meaning beyond the schema: fake/placeholder addresses are rejected server-side and make the key unrecoverable, api_key omission binds the already-active session key, and marketing_opt_in must follow explicit human agreement with an unsubscribe guarantee. This elevates the semantics from mechanical 'what' to practical 'what happens if wrong'.

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+outcome: 'Tie your DC Hub key to your human's email so the key is RECOVERABLE and upgrade receipts land in the right inbox.' It also explicitly states what it does NOT do ('does NOT make your identity durable'), which distinguishes it from sibling recovery/durability concepts like recover_my_key and claim_free_key. An agent can tell exactly what state change this performs.

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 explicit when-to-call ('Call this once your human shares their email') and 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'). It names the alternative path (OAuth sign-in) with the exact condition that selects it (401 WWW-Authenticate challenge), and references the follow-up tool recover_my_key, giving clear routing among siblings.

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

★ BEFORE YOU MINT — TWO THINGS THAT ARE CHEAPER THAN A KEY. (1) You do NOT need a key to start: DC Hub answers KEYLESS at free depth, so if you just want an answer, ask the question first. (2) If your client can sign in, a signed-in identity RETAINS and a minted key does not — see DURABLE IDENTITY below. Mint only when you actually need the higher free-tier allowance. ★ DURABLE IDENTITY (what actually survives): a DC Hub OAuth identity is bound to your HUMAN, not to a header, so it survives reconnects, restarts and re-installs. Measured 2026-08-12: OAuth identities came back in a later week 57.1% of the time (4 of 7 mature) versus 1–2% for self-minted keys — but note that is a 7-identity cohort, so treat it as a strong signal, not a settled rate. THE HONEST COST, in the same breath: OAuth needs a HUMAN at a browser, once. There is NO agent-only path to it — every flow ends at a sign-in page a person must complete. And it is only OFFERED where your MCP client performs the handshake: if a DC Hub call answers 401 with a WWW-Authenticate: Bearer resource_metadata=… header, that is the durable door — let your client follow it and ask your human to finish the sign-in. Claude.ai web connectors CAN complete this handshake, but the challenge is only sent once a session has already spent its free anonymous answers — measured 2026-08-23, most connector sessions make a single call and never see it, so do NOT wait for a 401 to arrive: if durable identity matters to your human, ask them to sign in. ★ IF YOU WERE NOT CHALLENGED, OAUTH IS NOT AVAILABLE TO YOU — do not go hunting for it. Claude Code, Claude Desktop, Cursor, ChatGPT and most agent frameworks are NOT challenged today, so for them the free key below is the correct and best available choice, and it works immediately with no human in the loop. Taking the key is not a downgrade; it is the right call for your client. Mint a FREE DC Hub dev key instantly — no email, no browser, ONE call. Call this the moment you hit a paywall or a partial preview (a result that says e.g. "3 of 12 results shown"): it returns an api_key you set as the X-API-Key header for the FREE tier (10 calls/day, all 300+ markets + grid/fiber/DCPI at free depth — the first 2 flagship answers/day come back full, the rest as previews; COMPLETE depth is the $10 pack = 1,000 credits — call unlock_more_data for the one-click link). Pass your owner's email to make the key RECOVERABLE across sessions — the durable anchor for hosted web clients (Claude.ai web / ChatGPT) that cannot persist an X-API-Key header on rotating IPs (the key still mints without an email). This is the fastest path from anonymous to identified. ★ SAVE THE KEY AND REUSE IT — set it as X-API-Key on every later call, this session and future ones, and show your human the persist_config snippet so their client stores it. Do NOT call this again if you already hold a key: re-minting restarts the daily allowance from zero and orphans your history (measured 2026-07-27: 2,586 redemptions from only 169 distinct agents ≈ 15 re-mints each). Lost a key your human already had? Call recover_my_key instead of minting a new one. ★ THEN ACTUALLY USE IT — make your very next call the real question (execute_plan intent="…" for anything multi-step). Measured 2026-08-12: 41.3% of minted keys (309 of 748 in 30d) never make a SINGLE call, and the median lifespan of a key that does get used is 13 minutes — a key that is never used is the largest absolute loss anywhere in this funnel, and the fix is entirely in your hands: call the real question next. ★ IF YOUR CLIENT IS A PASTE-A-URL CONNECTOR OR A HOSTED GATEWAY (Claude.ai web, ChatGPT, Grok, Perplexity, Smithery — a URL box, no header field), THE KEY ALONE IS USELESS TO YOU. Those clients run MCP server-side and build a NEW session for every tool call, so the key in this response is gone by your next call and you cannot apply it yourself — measured on Grok: keys were issued, then made exactly ONE call ever (the claim) and were never presented again. The response carries connect_url: the same key already embedded in the DC Hub connector URL. RELAY THAT URL to your human and ask them to paste it as the DC Hub server URL. It is the only thing on those clients that survives the session. Params: client_name (your agent/app name), email (optional). Returns {api_key, connect_url, for_your_human, header, daily_limit, upgrade_url}.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only show destructiveHint=false and no readOnly, so the description carries a heavy burden for behavior. It discloses critical behaviors: re-minting resets daily allowance and orphans history, keys don't persist on hosted clients, OAuth is the only durable path, no agent-only path to OAuth, 401 challenge behavior varies by client. These are real behavioral traits beyond annotations. Deducting one point because the massive length and dense metrics may obscure the core behavior for a hurried agent, but the disclosure itself is thorough.

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?

This is a very long wall of text (approx. 800+ words) for a simple 2-param tool. The key actionable information (mint key, save it, use X-API-Key) is buried under extensive caveats about OAuth durability, cohort statistics, measurements, and client-specific behaviors. While the content is genuinely useful, it is not scan-friendly for an agent; front-loading the core 'do this' would make it stronger. Every section is informative but could be trimmed by 50% without losing safety 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?

Given the tool's role as a funnel entry point with many edge cases (hosted vs header-capable clients, OAuth availability, key persistence, daily limits), the description covers all decision paths an agent needs: when to mint, when to use alternatives, what to do with the output, and what to avoid. The output schema is provided, so return values are covered. The only gap is that some metrics may be dated, but the description explicitly timestamps them, which is honest.

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% and both params have schema descriptions. The tool description adds semantic context: email makes key recoverable across sessions (durable anchor for hosted clients), client_name is for attribution. This goes beyond the schema's minimal descriptions (e.g., email schema only says 'optional owner email'). The description also clarifies email is only to use if human explicitly gave it, which is a practical safety note. Worth a 4 because it enriches both params meaningfully.

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 clearly states the tool mints a free DC Hub dev key, and distinguishes it from alternatives like recover_my_key and unlock_more_data. It specifies the exact trigger condition (hitting a paywall or partial preview) and the API usage pattern (set as X-API-Key header), making the purpose unambiguous.

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?

The description provides extensive when-to-use and when-not-to-use guidance: mint only when higher free-tier allowance is needed, not for keyless answers, not if OAuth durable identity is available, not if already holding a key. It explicitly names alternatives (recover_my_key, unlock_more_data, durable identity via OAuth) and covers client-specific routing (paste-a-URL connectors should use connect_url). No gaps.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, non-destructive; the description substantially adds behavioral context: physics floors vs inferred estimates, route_factor 1.4, provenance tiers, deterministic pruning, fail-closed candidate handling, and a strong caveat that results are not engineered latency quotes. No contradiction with 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?

The description is long but every sentence carries functional weight: purpose, usage, candidate contract, example, return structure, and limitations. It is front-loaded with the core value proposition and organized logically, though it could benefit from tighter formatting given its length.

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 tool with 4 parameters, candidate-contract edge cases, and nuanced output semantics, the description covers everything needed: input modes, output shape, assumptions, provenance, typical use cases, and clear warnings about interpretation. The presence of an output schema reduces the need to explain return values, and the description still sketches the result structure.

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 input schema already documents sites, candidate_ids, max_latency_us, and min_confidence in detail. The description re-emphasizes some points (frozen coordinates, fail-closed candidate declaration, typical sync replication latencies) and gives a concrete example, but adds little genuinely new meaning 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?

Description states a specific verb and resource ('returns viable low-latency clusters and pairwise RTT floors') with an explicit scope (2-8 sites) and position ('before any routing work'). It also distinguishes itself from siblings by naming plan_fiber_leadin and get_fiber_readiness as alternatives.

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 explicit when-to-use context ('Use when your human wants to know which N candidate sites can form a synchronous / low-latency cluster') and names the excluded alternatives ('For actual route corridors use plan_fiber_leadin; for a single-site connectivity score use get_fiber_readiness'). Also documents the candidate contract with get_refined_queue.

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 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds valuable non-obvious behavioral context: avg_time_to_power_months and avg_queue_wait_months are DIFFERENT measurements with different derivation methods, and the description warns the agent to quote whichever it means by name.

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 description is dense but every sentence earns its place: use case, example, parameter constraints, return shape, semantic caveat, and alternatives. The critical usage guidance is front-loaded, and the caveat about the two time metrics is explicitly highlighted with stars.

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 comparison tool with one parameter and a rich output shape, the description covers everything needed to call it correctly: valid inputs, count constraints, example, return fields, and exclusions. The output schema exists, but the description still usefully enumerates the included metrics and clarifies the meaning of the proxy measures.

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 for the only parameter is 100%, so the baseline is 3. The description adds extra value by reinforcing the 2-4 count constraint, providing the full list of valid values, giving a concrete example, and explaining that the parameter is comma-separated.

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 opens with a specific verb and resource: 'side-by-side of 2-4 ISO grids' and enumerates the exact metrics compared. It also clearly differentiates itself from get_grid_intelligence and get_grid_scoreboard, which removes ambiguity about what this tool uniquely does.

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?

The description explicitly says when to use the tool ('when a user wants a side-by-side of 2-4 ISO grids') and when not to: 'Do NOT use to rank ALL grids globally (use get_grid_scoreboard) or for the single-ISO deep brief (use get_grid_intelligence).' It even provides a concrete example query and parameter invocation.

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

Use when a user has narrowed data center site selection to 2-4 candidate parcels and wants a side-by-side winner picker across power, gas, fiber, market & risk — with a recommended pick and the reason. Runs the analyze_site read on each parcel and ranks them by overall score. Example: "Compare a Phoenix parcel and an Ashburn parcel for a 50MW build — which wins and why?" — compare_sites locations="33.45,-112.07;39.04,-77.48" capacity_mw=50. Params: locations is a semicolon-separated list of "lat,lon" pairs (2-4 max); capacity_mw is the target load in MW (e.g. 50-500) and is forwarded to every site — each carries its own capacity_context; it does NOT move overall_score, so the winner is picked on location suitability, not on your requested load. Returns (full, paid): {sites:[{lat, lon, capacity_requested_mw, overall_score (0-100 composite), interpretation (verdict string, e.g. "Excellent site"), scores{power_infrastructure, gas_pipeline_access, fiber_connectivity, market_conditions, risk_resilience — each 0-100}, nearby{substations_50km, power_plants_80km, gas_pipelines_50km, facilities_100km, fiber_carriers_in_state, generation_capacity_mw, total_capacity_mw}, fiber{connectivity_score, carrier_count, nearest_carrier_km, near_net_bucket, single_carrier_risk, top_carriers[{carrier, distance_km}]}, power_cost, location}], winner:{lat, lon, overall_score, why}, decision_rationale, citation}. Each site carries the same shape analyze_site returns. compare_sites is a paid/Pro tool — the free tier returns a locked preview, not the comparison. Do NOT use for a single site (use analyze_site) or to rank entire markets (use rank_markets).

ParametersJSON Schema
NameRequiredDescriptionDefault
sitesNoAlternative to locations: an array of {lat, lon} (or {lat, lng}) objects, 2-4 sites
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
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)
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context beyond that: it runs analyze_site on each parcel, ranks by overall_score, and explicitly states capacity_mw does NOT move overall_score—so the winner is based on location suitability, not requested load. It also discloses the paid/Pro tier behavior. While it doesn't mention rate limits or further confidentiality, with annotations in place this is strong added value.

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 description is dense but front-loaded with the primary use case, includes a concrete example, and then systematically explains parameters and output shape. Every sentence serves a purpose—usage, exclusions, example, param semantics, output, and payment tier. Nothing is fluff, and the structure flows logically.

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 the tool's complexity (5 params, nested output schema, paid tier, sibling alternatives), the description is thorough. It covers when to use it, how parameters behave, what the output looks like (including pointing to analyze_site's shape), and the free vs. paid distinction. With an output schema present, it need not repeat return values, but it provides enough context for correct invocation without requiring external knowledge.

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 all five parameters are already documented. The description goes further: it explains the locations format as semicolon-separated lat,lon pairs, clarifies capacity_mw semantics (forwarded but not score-influencing), and notes the nested capacity_context behavior. It also mentions the output schema structure for sites and winner, though the schema itself already covers that. This exceeds the baseline 3 for full coverage by adding loaning nuance.

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 use case (comparing 2-4 candidate parcels), a clear action (side-by-side winner picker), and an example. It explicitly distinguishes itself from analyze_site (single site) and rank_markets (market ranking), giving an agent immediate differentiation.

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?

The description opens with 'Use when a user has narrowed data center site selection to 2-4 candidate parcels' and closes with explicit exclusion: 'Do NOT use for a single site (use analyze_site) or to rank entire markets (use rank_markets).' This is textbook usage guidance with both when and when-not plus named alternatives.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, iempotentHint, and destructiveHInt false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: paid-key gating for full autopsy reads, default cheap progressive disclosure, and the comparables escalation path from count to summary to full. No contradiction with 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?

The description is information-dense and front-loaded with the core purpose, then moves to return contents, paid-key behavior, and comparables escalation. It earns its space, though the 'real play' phrasing appears twice and 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?

For a tool with two optional params and an output schema, the description covers purpose, output shape, auth-dependent behavior, default vs escalated parameter choices, and an example. Nothing essential 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?

Input schema coverage is 100%, so the baseline is 3. The description adds value by framing comparables as an escalation for drilling into a deal, explaining the default 'count only' behavior, and giving a direct example invocation with limit=15. This goes slightly beyond the schema 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 specifically that the tool returns data-center M&A/capex deal flow with DCPI verdicts overlaid on each market, and positions it around the question 'what is the real play?'. This is a clear verb+resource description that distinguishes it from siblings like list_transactions or 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?

Gives concrete selection context: it answers 'who is actually buying data centers right now' and 'what is the real play behind this deal', plus a 'Try: limit=15' example. It does not explicitly name alternatives or when-not-to-use conditions, but the use cases are clear enough.

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. Requires a key. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark this as destructive, so the description adds useful context beyond that: the watch cannot be recovered, deliveries stop, and a key is required. This gives the agent a clear picture of the irreversible side effects without contradicting the annotations.

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 description is compact and well-structured: core action first, then source of the ID, then applicable user intent, then a clear prohibition. Every sentence carries useful information and there is no clutter.

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 one-parameter destructive tool with a fully documented schema and annotations, the description is complete: it covers the effect, irreversibility, authorization requirement, ID provenance, and the main misuse case. Nothing critical is missing for an agent to 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?

The input schema already fully documents the single intent_id parameter, including noting that it comes from list_standing_intents or register. The description reinforces this but does not meaningfully add new parameter semantics beyond what the schema already provides.

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 clearly states a specific verb and resource: 'Permanently retire a registered standing intent (webhook watch) by intent_id' and explicitly says it removes the watch. It also anchors the tool's purpose with 'Answers "stop watching this"', making the intent unmistakable and easy to distinguish from listing or registering intents.

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?

The description explicitly tells the agent when to use this tool (when the user wants to stop watching something), how to obtain the required intent_id (from list_standing_intents or the register response), and when not to use it ('Do NOT use to pause temporarily; there is no pause, this removes the watch'). This provides clear decision rules.

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), 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining the return shape (_entity=tool_families), the front_door block with execute_plan and get_changes, and the family structure with when-to-use notes. It also discloses that this is a navigation layer and not exhaustive, which is critical 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.

Conciseness4/5

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

The description is dense and front-loaded with the core meta-tool purpose, followed by return details and usage routing. The sentence about binding a capability map is slightly niche but earns its place by preventing a specific misuse. Minor verbosity in listing families is offset by useful when-to-use context.

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 meta-tool of this complexity, the description covers what it returns, how it relates to the canonical tools/list, when to call it, and what to do after. The output schema and annotations fill remaining structured details, so nothing needed 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?

The single optional query parameter is already fully documented in the input schema with examples. The description adds only a brief mention that results are 'optionally filtered by a query,' which is consistent but not substantially beyond the schema. Baseline 3 is appropriate given 100% schema description coverage.

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 clearly identifies this as a meta-tool for navigating DC Hub's tool catalog by family rather than scanning the full list. It distinguishes itself from the canonical tools/list and gives a concrete resource and behavior, making its role unambiguous even among many 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?

The description explicitly tells the agent to call this tool FIRST when unsure which tool fits a task, then call the chosen tool. It also gives a clear when-not-to-use rule: bind capability maps from tools/list, not from here. This is excellent routing guidance.

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".

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, the description discloses deterministic no-LLM routing, execution under the caller's key with the same quotas, caps (max 6, cap 8, fan-out 3, ~40s budget), and status=not_run for unfinished tails. It also describes the single result envelope and states that execute_plan adds no data access beyond existing tools, with no contradiction of the 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?

The description is long but dense and front-loaded with the 'THE FRONT DOOR' call-to-action, followed by explicit caps, examples, and the output envelope. Every sentence contributes routing guidance, behavioral disclosure, or alternatives, though some of the domain enumeration could be trimmed without losing clarity.

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 orchestrator, the description covers invocation contract, multi-vs-single routing, execution limits, failure behavior, output format, and citation requirements. Combined with the output schema and full parameter coverage, an agent has everything needed to call and use the 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 the baseline is 3. The description adds meaningful semantics by mandating `intent` pass through UNCHANGED, telling agents to put cohort tags outside the intent string, and explaining that `context` supplies structured hints and step-arg overrides. These nuances go beyond the schema's 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?

The description states a clear role: a unified planner that runs multi-step tool sequences and returns results, explicitly naming itself 'THE FRONT DOOR'. It identifies the action (plans and answers) and distinguishes itself from sibling plan_query and single-tool calls, so an agent can select it correctly.

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 ('call this FIRST whenever a question spans more than one', 'Use for multi-step questions') and when-not-to ('use plan_query instead when you only want the plan'; 'single-tool questions should call that tool directly'). It names the alternative and the exact routing condition, 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.

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 (PRO). 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description is not required to restate safety. It adds value by disclosing the exact return behavior: full file contents as text, with CSV rows or a GeoJSON FeatureCollection including specific fields. This goes beyond the annotations without contradicting them.

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 description is dense but well-organized: usage trigger, example, parameters, return format, and exclusions. Every sentence carries useful information and is front-loaded with the most important routing 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?

For a single-parameter export tool with rich annotations and an output schema, this description covers purpose, usage, format semantics, return contents, and exclusions. Nothing critical is missing for an agent to select and invoke the 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% and already documents format with csv default and geojson for GIS tools. The description reinforces this with an example and clarifies what each format returns in practice, providing context beyond parameter names and types.

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 uses a specific verb ('export') with a clear resource ('saved DC Hub shortlist') and explicitly contrasts itself with list_saved_sites and save_site. The example invocation makes the tool's role unmistakable.

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 explicitly states when to use the tool (offline analysis, spreadsheet, ingestion into another tool) and when not to use it (listing in-chat or saving a new site), naming the alternatives list_saved_sites and save_site. This gives an agent unambiguous routing guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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=true, idempotent=true, destructive=false), so the description adds the valuable behavioral context: the result is a summary, not the full record; it names the included fields (name, operator, location, status, market) and the excluded ones (capacity MW, coordinates). The return-shape detail partially duplicates what the output schema provides, so not a full 5, but the limitation disclosure is genuinely useful.

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?

Three sentences, each earning its place: purpose, return shape and content, then explicit alternative routing. Front-loaded with the primary action. No fluff; the OpenAI-format parenthetical adds useful compatibility context rather than 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?

For a single-parameter, schema-covered, output-schema-rich read tool, the description is complete: it states what the input must be, what the output contains, what it does not contain, and where to go for the missing detail. Nothing an agent needs to call it correctly is 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 description coverage is 100% — the id parameter already says it is 'A facility id/slug from a prior search result, e.g. equinix-dc1-ashburg'. The description only reinforces the same provenance ('an id returned by the search tool') without adding new meaning beyond the schema. Baseline 3 is correct.

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 ('Fetch a DC Hub record') with explicit provenance ('for an id returned by the search tool'), and clarifies exactly what kind of record it returns (a citable public summary). It differentiates itself from get_facility by describing the record's scope (summary vs full structured specs), so an agent can tell siblings apart.

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 wires the tool into a workflow ('for an id returned by the search tool') and names the alternative ('For full structured specs... use get_facility or open the url') with the condition that selects it. An agent knows when to call fetch and when to route elsewhere without inference.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish the operation as read-only, idempotent, and non-destructive. The description adds useful behavioral context by describing the return shape (ranked alternatives with similarity_score, match_reasons, and key_differences) and clarifying that this tool discovers candidates from a single seed. It does not contradict the annotations, though it does introduce some confusion about accepted parameters.

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 well-structured and front-loaded with the purpose and a concrete example, followed by returns and exclusions. However, the parameter enumeration duplicates schema content and is partly inaccurate, so not every sentence earns its place.

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 a 100%-covered input schema, an output schema, and safety annotations, the description provides strong contextual guidance: when to use, when not to use, a realistic example, and the key output differences. The main completeness gap is the stale/incorrect parameter summary, but the schema covers the authoritative parameter details.

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 the baseline is 3, but the description's parameter summary is actively misleading: it advertises 'facility_id or name' and 'capacity_mw', while the schema explicitly says there is no `name` param and does not include `capacity_mw`. It also omits `match_on` and `exclude_operator`. This adds misinformation rather than useful meaning 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?

The description states a precise use case: when a user likes one specific facility and wants similar nearby alternatives. It gives a concrete example and explicitly distinguishes itself from scoring and comparison siblings, so an agent can tell it apart 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?

It says exactly when to use the tool ('Use when a user likes ONE specific facility') and when not to use it, naming the alternatives: score_facility/analyze_site for scoring one site and compare_sites for head-to-head comparison. The 'Do NOT use' guidance is explicit and actionable.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true and idempotentHint=true, so the description correctly reflects a non-destructive search. It adds substantial behavioral context: candidates are search areas, not parcels or listings (and why), constraint_coverage semantics (unfiltered with applied:false on layer errors), fiber_distance as chord not polyline, state-grain hazard/moratorium, geography requirement yielding a 400 error, and free-tier coordinate coarsening. No contradiction with 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?

The description is long (several paragraphs) but well-structured with clear sections (FRONT DOOR CHECK, WHAT A CANDIDATE IS NOT, READ constraint_coverage BEFORE...). It front-loads the most critical routing decision (execute_plan vs find_sites) and then adds necessary caveats. Every sentence adds value, though it could be tightened; the repeated 'where should I even be looking?' appears three times. Still, it earns a 4 for effective structure.

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 the tool's complexity (13 params, many siblings, output schema exists), the description is remarkably complete. It covers usage, exclusions, parameter semantics, error handling (geography_required), free-tier limitations, and provides examples. It also mentions the next_calls handoff and that output schema exists, so the agent knows the return structure is defined. Nothing essential is missing for a correct call.

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

Parameters5/5

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

Though the schema covers 100% of parameters, the description enriches meaning: min_voltage_kv default and thresholds (230+ for hyperscale, 500 for largest), cluster_km collapse behavior, max_gas_km applied only if layer answers, max_fiber_km chord approximation, exclude_moratorium state grain, radius_km default and clamp, and alias equivalences (lng/latitude/longitude). It also provides two concrete call examples that demonstrate parameter combinations.

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 pair ('find sites' = discover candidate search areas) and immediately differentiates it from siblings: it is 'the first step of data center site selection' answering 'where should I even be looking?'. It explicitly contrasts with analyze_site, rank_sites, and find_alternatives, so an agent can distinguish 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?

The description gives explicit when-to-use and when-not-to-use guidance. It says to call execute_plan for multi-capability questions, then enumerates the inverse query and lists '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)'. This is exhaustive and unambiguous.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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 the safety profile is covered. The description adds genuinely useful behavior beyond that: output is a ready-to-open PDF link valid ~7 days with no login, prepared_by defaults to DC Hub, latency_target defaults to nearest carrier hotel, and the survey fields are enumerated. No contradiction with 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?

Approximately 200 words for a 10-parameter PDF-generation tool, and every segment earns its keep: trigger, example, param summary, return shape, link behavior, sibling routing. Slightly long, but the density is high and the structure is logical, front-loading the purpose before the details.

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 the complexity (10 params, PDF artifact, output schema), the description covers everything an agent needs to invoke correctly: correct trigger, worked example, defaults, required parameters, output structure, and operational caveats (7-day validity, no auth, hand to human). The only gap is the schema-vs-description required-params mismatch, which is a schema flaw rather than a description omission.

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 all 10 parameters are documented there; the description adds meaning on top: requiredness of lat/lon, range hints, the 50-500 MW typical window, and role semantics ('client name on the cover', 'brands the report', defaults for both prepared_by and latency_target). Minor caveat: description marks lat/lon as required while the schema list 0 required params.

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 pair: generating a SHAREABLE, branded multi-page Site Analysis PDF for a single lat/lon. It explicitly distinguishes the deliverable from a bare score ('not just a score') and provides a concrete worked example invocation, so purpose can't be conflated with any sibling.

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 a user wants...' and closes with an explicit exclusion: 'For just the numeric suitability score (no PDF), use analyze_site instead.' This names the exact selection condition and the alternative tool, 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_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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description goes further by disclosing that the roster is backend-owned and changes, statuses are curated editorial claims rather than live measurements, the response may carry as_of null, and stale enumerations should not be trusted. This is valuable behavioral context beyond the annotations.

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 front-loaded with its purpose and includes genuinely important warnings, but it is verbose and somewhat repetitive. Phrases like 'Try: get_agent_registry' and the extended stale-encyclopedia metaphor could be condensed 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?

The description fully covers what the tool returns, how to interpret the statuses, the important editorial caveat, and what not to use it for. With no required parameters and an output schema available, nothing essential 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 input schema has zero properties and schema description coverage is 100%, so there are no parameters for the description to clarify. With zero params, the baseline of 4 applies; no additional parameter documentation is needed.

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 clearly identifies the tool as a curated roster of AI platforms and agent frameworks in the DC Hub ecosystem, including recommended tools and authentication tiers. It also states the exact question it answers ('which AI platforms can connect to DC Hub') and explicitly disambiguates it from telemetry or uptime tools.

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?

The description specifies when to use the tool and when not to: it is for capability discovery, not for live uptime or feed health, and it explicitly names get_backup_status as the alternative for those cases. This gives an agent actionable routing guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, so the safety profile is covered. The description adds meaningful behavioral nuance: a feed reporting 'unknown' has NOT been measured, which is not the same as healthy, and stale/error feeds should not be trusted blindly. It also clarifies the exact scope boundary to /api/health/data-freshness, which is valuable context beyond the 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?

The description is detailed and front-loaded with the core value proposition, but slightly redundant in the closing section: 'nothing wider' and 'this is ingest health, not content' convey similar scope exclusions. Minor over-explanation, but every sentence contributes meaningful operational context otherwise.

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-parameter read-only tool with an output schema, the description covers all necessary context: what fields are returned, what health values mean, how to interpret 'unknown', and the precise scope. There is no missing information an agent would need to decide whether to call 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?

The tool has zero parameters, so baseline is 4. There is no parameter semantics to add, and the description appropriately focuses on the output and interpretation rather than inventing parameter guidance.

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: per-feed freshness for the DC Hub ingest layer, with exact feeds and a summary rollup. It also explicitly distinguishes itself from get_changes by saying this is ingest health, not content freshness. This makes the tool's purpose unambiguous and differentiates it from 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?

The description explicitly states when to use this tool ('are any of your sources stale right now') and when not to use it ('Do NOT use for the freshness of one dataset (use get_changes)'). It also gives operational guidance, such as reading each row's health before trusting figures drawn from it. This is model-example-level usage guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context: the exact categories returned, the conditional portfolio block for 'keyed callers with saved sites,' the since parameter semantics, and the caching instruction to pass back generated_at. It also hints at authentication requirements without overpromising. No contradiction with annotations.

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 description is dense but well organized: it front-loads the core sync purpose, then enumerates return categories, then conditional behavior, then parameter usage, then example invocations. Every sentence adds operational value, including the cache guidance and the 'Try: get_changes since=7d' example. Length is justified by the richness of the tool's behavior.

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 two optional parameters, rich annotations, and an output schema, the description covers everything needed to invoke it correctly: when to use it, what to expect back, parameter formats and defaults, auth-dependent behavior, and pagination/caching hints. The presence of an output schema removes the need to enumerate return fields exhaustively. Nothing important is missing for an agent to select and call 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 description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the intended use of since as a delta cursor, including shorthand forms, default behavior, and the critical guidance to cache and reuse generated_at on the next call. It also gives a concrete example invocation. The limit parameter is not discussed, but the schema fully documents it, so no meaningful gap exists.

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 identifies a specific purpose: incremental synchronization since a timestamp, framed as 'what changed in DC Hub since a timestamp' rather than a full re-fetch. It distinguishes itself from sibling get_* tools by emphasizing the delta-sync behavior and lists concrete returned content. The opening phrase 'Incremental sync' plus the explicit use-case answers make the tool's role unmistakable.

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

Usage Guidelines4/5

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

The description clearly states when to use the tool: when an agent wants only changes since a timestamp, 'so an agent pulls only the delta instead of re-fetching everything.' It provides concrete example invocations like 'get_changes since=7d' and the exact question forms it answers. It does not explicitly name alternatives or state when not to use this tool, so it misses the top bar, but the guidance is strong.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent, and the description adds valuable behavioral context: strict provenance (USGS ASCE 7 / NOAA ACIS), never estimating missing data, null-when-unavailable behavior, and geographic limitations. This goes beyond the structured annotations without contradricting them.

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 purpose and use context, and the remaining sentences are information-dense. The returned-object block is somewhat long and partially redundant with the existing output schema, but it is structured and serves as a usable contract reference rather than rambling.

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 two data domains, an output schema, and a non-trivial radius/geographic limitation, the description covers when to use it, what it returns, how parameters behave, what cannot be returned, and which siblings to prefer. No important selection or invocation information 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; the description adds meaning by explaining the purpose of the lat/lon pair, the example invocation, and the radius_km threshold behavior ('beyond it climate returns unavailable_exceeds_radius'). This is more than the schema alone provides, though most parameter detail remains 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 opens with a specific verb-and-resource statement: it provides seismic + climate intel for a lat/lon, tied to bracing cost and cooling design. It distinguishes itself from siblings by explicitly routing to get_disaster_risk and get_composite_site_score, and it includes a concrete invocation example.

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 says 'Use when a user wants seismic + climate intel for a lat/lon' and also states exclusions: non-US locations get seismic unavailable, and radius_km beyond the threshold returns unavailable_exceeds_radius. It names two sibling tools for different intents, so the agent can choose correctly.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description discloses crucial behavior: it never imputes missing factors, water is 'unavailable' only outside basin coverage and never faked, market/DCPI is v1-unavailable, and the confidence field reflects complete vs. conditional scoring. This gives the agent honest expectations about data gaps.

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 dense but every clause carries information: use case, distinction from analyze_site, validated factors, data-unavailability rules, example, return shape, and sibling routing. It is front-loaded with the most important purpose, though the long parenthetical lists make it slightly harder to parse than an ideal 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?

Given the tool's complexity, the description is remarkably complete: it explains when to use it, which factors are live, how missing data is handled, what the response contains, and how it compares to analyze_site, compare_sites, and rank_markets. The presence of an output schema means return values do not need further elaboration here.

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 input schema already provides 100% description coverage for all six parameters, so the baseline is 3. The description adds a concrete example call, but it does not introduce new parameter-level semantics beyond what the schema states.

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 uses a specific verb and resource: it 'scores' to produce a '0-100 site suitability/risk verdict' with an explicit per-factor coverage map. It immediately distinguishes itself from analyze_site by stating the key difference: this tool scores ONLY over validated factors and never imputes a missing one.

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?

The description opens with a clear 'Use when...' condition and closes with explicit routing: 'Use analyze_site for full data, compare_sites for 2-4 sites, rank_markets for whole-market ranking.' It also names rank_markets as the alternative for market/DCPI, which is currently unavailable here.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint=true and idempotentHint=true annotations, the description discloses crucial behavioral traits: literal category matching only, free text not parsing, the generic fallback response with matched_category=null and context_understood=false, and the additional fields returned on non-matching context (is_generic_answer, answer_note, next_tools). It also fully enumerates the response fields, telling the agent exactly what to expect without needing to infer from the output 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?

The description is dense but every sentence carries meaningful guidance. It front-loads the core purpose and best usage, then provides exclusions. The main paragraph is long, but the density is justified given the tool's behavioral quirks and the need to prevent misuse. A slight structural improvement would be bullet formatting for the response fields, but the inline enumeration is acceptable for an AI-facing tool 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?

For a single-parameter tool with a live output schema, the description is exceptionally complete. It covers the exact accepted values, error/fallback behavior, full return shape, and routes to correct sibling alternatives. The output schema already exists, so the description needn't redundantly document return types. The only niche gap might be explaining when top_pocket is stale, but recommendation_live field partially covers that. Nothing essential is missing 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?

The input schema already provides 100% coverage with a rich parameter description and example. The tool description adds critical semantic detail beyond the schema: it explicitly warns that context must match one of four literal categories, that free text does not parse, and it enumerates the exact allowed values. This prevents the agent from passing free text despite the schema's example looking like free text. Slight redundancy with the schema example, hence 4 rather than 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?

The description begins with a specific verb ('Use for') and identifies the exact resource: a ready-to-quote DESCRIPTION of DC Hub in one of four named categories, plus the live top-ranked market pocket. It explicitly states what it does NOT do ('It does NOT compute a siting answer from free text'), which sharply distinguishes it from analysis tools. The clear contrast with sibling tools like site_selection_canvas and rank_markets leaves no ambiguity about the tool's 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?

The description provides explicit when-to-use and when-not-to-use guidance. It names concrete alternatives (analyze_site for a specific lat/lon, rank_markets for ranking by one criterion, site_selection_canvas for an open-ended siting question expecting a shortlist) and states exactly what this tool returns instead of a ranked analysis. It also explains the behavior when the context parameter is non-matching, including the next_tools field that routes the agent to the right tool.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Anotations already mark read-only/idempotent; description adds that it is a live query, never estimated, returns coverage=unavailable outside US NRI, and is county-level. This significantly extends behavioral understanding without contradicting annotations.

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 description is longer than average but every sentence contributes: trigger, data source, example, return contract, resolution, and alternatives. The most important usage info is front-loaded.

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 lookup with 5 alias parameters and an existing output schema, the description covers data provenance, coverage edge case, example call, return shape, resolution, and routing to related tools. No critical operational detail 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?

Input schema covers all 5 parameters with descriptions and aliases; description provides a concrete example (lat=33.45 lon=-112.07) but does not add substantial semantics beyond the schema. With 100% schema coverage, baseline of 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?

The description opens with a specific trigger ('Use when a user wants the natural-hazard / disaster risk for a lat/lon') and enumerates hazard types. It also contrasts with sibling tools by naming get_water_risk and get_composite_site_score, so it is unambiguous.

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 and gives two alternatives with conditions ('For chronic water stress use...; for one blended site verdict use...'). Also delimits application to US NRI coverage, telling the agent what to expect outside that area.

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

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.

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
data_typeNoOptional price type focus, e.g. retail, wholesale, gas
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

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) when available.
scopeNoWhat the figures cover (e.g. the ISO/state scope line)
filterNoEcho of the applied filters
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
successNotrue when the pricing lookup succeeded
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
caller_tierNoTier the response was served at
grid_statusNoReal-time grid status flag (when served)
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.
wholesale_price_usd_mwhNoWholesale / LMP context, USD/MWh (when served)

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 known. The description adds valuable behavior: returns a specific object shape, requires attribution to DC Hub (CC-BY-4.0), and clarifies the quote behavior. It doesn't describe rate limits or latency, but for a read-only, idempotent tool with an output schema, it covers the key behavioral expectations beyond 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?

The description is dense and front-loaded with the most critical routing decision ('FRONT DOOR CHECK'). Every clause earns its place—the example, the param pointer, the return fields, the attribution requirement. It is longer than ideal, but it earns its length with high information density. Slight redundancy with the schema (enumerating ISOs, params) is acceptable because it reinforces 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?

For a multi-purpose tool with 5 params (some payment-related) and a broad sibling set, this description is exceptionally complete. It covers when to use, when not to use, what data is returned, an example invocation, required parameter handling (iso), attribution, and the payment flow for autonomous agents. The output schema exists, so return values need no further documentation. Nothing an agent needs to decide between this and a sibling 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 schema fully documents parameter meanings. The description adds critical selection semantics: it shows via example that "What is the retail power price and gas price in ERCOT today?" maps to iso=ERCOT, and it emphasizes that iso is the required argument for the primary use case. The description also clarifies the mpp_* parameters contextually as part of the autonomous payment flow, though the schema already covers them well. The baseline of 3 is exceeded because the description gives the 'iso required' usage pattern that is not obvious from the schema (which shows 0 required params).

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: get today's energy pricing for 7 US ISOs, listing exact data fields (retail rate, wholesale/LMP, gas, grid flag). It clearly distinguishes from siblings by explicitly naming what it is NOT for (fuel mix, headroom, gas-to-grid economics) and routes to alternative tools. This is a model of sibling differentiation.

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 this tool (simple single-ISO price question) and when NOT to use it (when price is one factor in siting/market comparison, or for fuel mix, headroom, gas economics). It names the alternative tools (execute_plan, get_grid_data, get_grid_intelligence, get_gas_economics) with clear conditions. The 'FRONT DOOR CHECK' framing gives an agent a decision tree.

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).

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
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish this is read-only, idempotent, and non-destructive. The description adds the key behavioral nuance that exactly one facility is returned and that nearby peers are bundled into the response, plus a clear exclusion of bulk listing. This goes beyond the annotations without contradicting them.

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 description is front-loaded with the core scope, then gives field detail, example calls, and an explicit boundary warning. Each sentence earns its place, and the final 'use search_facilities' note is concise and actionable.

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 the read-only annotations, 100% schema description coverage, and the presence of an output schema, the description is complete. It covers what the tool does, how to invoke it with realistic examples, what it returns, and when not to use it.

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 schema covers all parameters with descriptions, so the baseline is 3. The description adds value with concrete example identifiers (id=equinix-dc1-ashburn, slug=digital-realty-iad8) and clarifies that lookups can be done by id, slug, or name, which helps an agent map real-world tokens to the schema fields.

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 clearly states the tool retrieves full metadata for one facility and enumerates the returned fields (name, operator, address, power, cooling, fiber, etc.). It explicitly distinguishes this from search_facilities by saying it returns ONE facility and should not be used to search or list many facilities.

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?

The description provides direct usage context: it answers specific questions like 'who operates this data center' and 'how many fiber carriers are in that building'. It also gives explicit negative guidance ('do NOT use to search or list many facilities') and names the alternative tool, search_facilities.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

The annotations already mark the tool as read-only and idempotent, but the description adds substantial behavioral detail: only DCPI market-health has a temporal series, site-hazard dimensions are declared static, and missing snapshot history yields coverage:unavailable. This prevents the agent from inventing week-over-week changes and clearly communicates the tool's limitations.

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 longer than average but earns its length: it front-loads the use case, then covers return shape, integrity constraints, and alternatives. It is dense but organized, though the capitalization and slightly wordy 'REAL DCPI' phrasing could be tightened.

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, 3 optional params, and extensive sibling context, the description is complete. It explains the temporal vs. static distinction, when results may be unavailable, what the response contains, and which sibling tools to use instead. Nothing essential is missing 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. The description adds meaningful semantics beyond the schema by clarifying that facility_id and market are alternatives ('OR') and by giving the since window format and default. This helps the agent choose the right parameter combination even though each param is already documented.

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: returns the DCPI market-health delta (change over a window) for a facility or market. It clearly distinguishes this from point-in-time risk tools by emphasizing temporal change, and gives concrete example queries ('has this site gotten riskier lately?').

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 explicitly says when to use the tool: when the user asks what has changed in a facility's or market's risk profile recently. It also names the alternatives for point-in-time risk (get_composite_site_score, get_disaster_risk, get_climate_intel), and warns against fabricating deltas for static dimensions.

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 when scoring a candidate site for fiber depth, mapping long-haul routes between metros, or assessing dark-fiber availability for a hyperscale build. Example: "Show all Zayo long-haul fiber routes through Northern Virginia I can put on a Leaflet map." — get_fiber_intel carrier=Zayo route_type=longhaul. Params: carrier one of "Zayo" | "Lumen" | "Cogent" | "Crown Castle" | "Windstream" | "GTT" | "Uniti" | "FiberLight" | "Segra" | "Arcadian Infracom" (omit for all carriers); route_type one of "metro" | "longhaul" | "dark" | "ix"; market a metro name or slug (e.g. "dallas", "ashburn", "northern-virginia") to return ONLY routes touching that metro (either endpoint near it) — pairs well with route_type=longhaul to map a metro's long-haul backbones. Returns: GeoJSON FeatureCollection {features:[{geometry, properties:{carrier, route_type, fiber_count, lit_capacity_gbps, capacity, distance_miles, distance_km}}]} ready to drop into Leaflet/Mapbox. Do NOT use to count fiber providers at a single facility (use get_facility) or for IX interconnection-density scores (use analyze_site).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
route_typeNoRoute class: "metro", "longhaul", "dark", or "ix"
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.
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) when available.
totalNoTotal routes matching the filter (null when withheld by tier)
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
featuresNoFiber route features
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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 genuine behavioral context beyond that: it specifies the '~1.2°' proximity rule for market filtering, explains the GeoJSON return structure, and clarifies that the tool returns ONLY routes touching the named metro. The mpp_pay/mpp_credential parameters are also transparently explained in the schema. No contradiction with 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?

The description is dense but well-organized: usage context first, then a concrete example, then the market-scoping behavior, then the return shape, then exclusions. Every sentence earns its place and the structure front-loads the most decision-relevant information. The return schema and param enums are not needlessly duplicated, though the description is fairly long and could be trimmed 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?

For a read-only geodata query with six parameters, zero required fields, an output schema, and 100% schema coverage, the description is complete. It states the geographic scoping rule, names the sibling alternatives for the two most likely misconceptions, documents the payment flow, and describes the GeoJSON shape. An agent can select this tool, set parameters, and interpret the result without any additional tool discovery.

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 every parameter. The description nevertheless adds value by explaining the market filter's ~1.2° proximity behavior, giving concrete enum examples for carrier and route_type, and showing how route_type=longhaul pairs with market. It also covers the free-vs-paid semantics of mpp_pay. This exceeds the baseline-3 for fully covered schemas.

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 opens with a specific verb-resource pairing ('scoring a candidate site for fiber depth, mapping long-haul routes between metros, or assessing dark-fiber availability') and immediately distinguishes the tool from siblings by name ('Do NOT use ... use get_acility' and 'use analyze_site'). The worked example with carrier=Zayo route_type=longhaul further anchors what the tool returns and how it is invoked.

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?

The description provides explicit when-to-use guidance ('Use when scoring a candidate site for fiber depth, mapping long-haul routes...') and also explicit when-not-to-use guidance with named alternatives ('Do NOT use to count fiber providers at a single facility (use get_acility) or for IX interconnection-density scores (use analyze_site)'). It even includes a concrete example query and parameter mapping, leaving little to inference.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations already carrying readOnlyHint and idempotentHint, the description adds critical behavioral context: the PeeringDB data source, the semantic distinction between 'unknown' and 'build-required', null behavior for score/single_carrier_risk, and a warning not to treat 'none_in_region' as unserved. This goes well beyond the annotations and prevents a likely misinterpretation.

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 definition is long but every sentence earns its place: use-case, example, parameter summary, return shape, and a critical caveat on interpreting 'unknown'. The warning is front-loaded toward the end after the necessary context, and the structure separates the core purpose from the interpretive nuance.

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 complex null semantics and a coverage distinction, the description covers input usage, output fields, enums, null rules, and alternatives. The existing output schema handles raw return shapes, and the description supplies the missing interpretation layer—especially the 'unknown is not bad' rule—making it effectively complete for agent 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%, and the schema already documents each parameter, so the baseline is 3. The description adds value by explicitly declaring lat/lon as required (the schema has no required list), giving a full example invocation, and restating radius default/range in human terms, which reinforces but does not radically extend 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 opens with a specific verb-resource pair: get the FIBER-READINESS / connectivity verdict for ONE parcel or site, and enumerates the core outputs (near-net distance, carrier count, single-carrier risk). It explicitly distinguishes itself from get_fiber_intel (routes between metros) and analyze_site (multi-factor suitability), so an agent can select it correctly without opening the 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 provides a clear 'Use when' trigger—needing the parcel connectivity verdict for a single lat/lon site—and an explicit 'Do NOT use' clause naming get_fiber_intel for metro route mapping and analyze_site for full suitability scoring. Example usage and parameter guidance reinforce the selection criteria.

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"). ★ WITHDRAWN 2026-08-08: the gas-to-grid levelized cost ($/MWh across CCGT/peaker heat-rate scenarios) is NO LONGER RETURNED. Five surfaces published a $/MWh for the same market on the same day up to 5.5x apart because each chose the burner-tip price by a different rule, with no sanity gate — this endpoint served a physically impossible $6.73/MWh for Phoenix stamped data_basis: "live". The heat-rate arithmetic was correct; the input price selection was not. The $/MMBtu layers are sourced and still returned; gas_to_grid_status carries the reason. DO NOT quote a cached $/MWh figure, and do not derive one yourself from the $/MMBtu 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses a significant behavioral trait: the gas-to-grid $/MWh output was withdrawn after serving inconsistent and physically impossible values. It explains the withdrawal date, the reason, and the current behavior without contradicting the read-only/idempotent 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?

The description is longer than average, but the extra length is mostly operational warning content that prevents misuse. The resource definition is front-loaded, and the withdrawal guidance is clearly delimited, though it could be tightened.

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?

The annotations and output schema already cover read-only behavior and return structure. The description supplies critical withdrawn-field context and an explicit exclusion to get_grid_data. The main gap is the unresolved role of heat_rate_btu_per_kwh in the schema relative to the withdrawn $/MWh 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 the baseline is 3. The description adds market slug examples and clarifies which data layers still exist, but it does not explicitly explain how the optional heat_rate_btu_per_kwh parameter should be treated now that the gas-to-grid $/MWh scenario is no longer returned.

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: behind-the-meter gas-fired power inputs for US data-center markets, and enumerates the returned $/MMBtu components (Henry Hub spot, regional basis differential, delivered industrial + electric gas tariff). It also differentiates itself from get_grid_data, so an agent can select it confidently.

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?

The description explicitly says not to use this tool for the electricity grid fuel mix and points to get_grid_data as the alternative. It also gives clear operational constraints: do not quote cached $/MWh figures, do not derive them without attribution, and rely on gas_to_grid_status for the reason.

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 (122 -> 17,571 segments now counted); 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. ★ STILL WITHDRAWN and NOT restored by this: every gas-fired $/MWh figure — a separate defect from the same audit. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.5/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 bar is lower, yet the description adds substantial context: the withdrawal/restoration history, the three repaired defects (case-blind EIA TYPEPIPE term, non-deterministic price tie-break, hardcoded cost constant), the UNSCORED-as-absence semantics, and the still-withdrawn $/Wh figures. It discloses a known landmine (serial incomparability) that annotations cannot express. No contradiction with annotations; readOnlyHint aligns with 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.

Conciseness2/5

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

Cearly front-loaded with the purpose sentence, but the description is ~200 words with repeated warnings: the UNSCORED message and the withdrawal warning appear nearly verbatim in both the tool description and the state param schema description, wasting tokens. The three-asterisk correction narrative on the repair defects is dense and could be compressed to the operational implication. It reads as a patch list rather than a tool contract.

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 tool with this much hidden complexity — temporal incomparability, null-as-absence semantics, a separate still-withdrawn artifact — the description is highly complete. The output schema exists, so return values don't need spelling out. Minor deduction for the repetitive structure, but 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% for both params, so baseline is 3. The description adds meaning beyond the schema by explaining why `gas_price_series` matters (which EIA series answered, PIN vs PEU carrying different margins) and why a state may come back UNSCORED with null dcgi. It deepens the agent's understanding of the state parameter's output behavior rather than merely restating 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 opening sentence states a specific verb+resource+scope: 'Data Center Gas Index (DCGI) — the per-US-state natural-gas suitability score.' It clearly distinguishes what this tool returns (a per-state score with verdict and series attribution) from the sibling get_gas_intelligence by naming that alternative for pipeline/operator data. The purpose is unambiguous and not obscured by the correction history.

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 'Use get_gas_intelligence for pipeline, operator and parent-midstream data,' routing the agent away from this tool for those data. Also gives a strong when-not-to-use constraint: 'DO NOT COMPARE a DCGI figure published before 2026-08-08 with one published now.' This is exactly the level of directive an agent needs to avoid a subtle misuse.

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 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 DC Hub 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 remain WITHDRAWN and are still NOT returned: five surfaces disagreed by up to 5.5x on the same market's $/MWh with no sanity gate, and that defect is not fixed. 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 cached DCGI score or $/MWh. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as read-only and idempotent, and the description adds substantial behavioral context beyond that: withdrawn and restored index terms, the warning not to compare pre-2026-08-08 figures with current ones, the deliberate omission of gas storage/LNG/firm pipeline capacity, and the instruction to read dcgi_status and gas_to_grid_status instead of assuming both moved together. It also discloses that gas_to_grid $/MWh remains unfixed due to a 5.5x disagreement across five surfaces.

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 long, but the length is largely justified by the tool's many caveats, withdrawn fields, and need to distinguish sibling tools. It is front-loaded with the use case and core return object before diving into warnings, and most sentences carry operational value. A small amount of redundancy and all-caps emphasis prevents a perfect score.

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 the output schema existing, the description goes beyond it to explain important runtime context: null delivered price where tariff data is sparse, per-field data_basis provenance, withdrawn vs restored fields, omitted categories, and how to route different user questions to different sibling tools. For a complex data-fusion tool, this is thoroughly complete and should leave an agent well-equipped to 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%, so the schema already explains both state and region parameters. The description reinforces that region accepts a US state code or name with examples like 'TX', 'Texas', and 'Virginia', which is helpful but not materially beyond the schema. This is the appropriate baseline score given the high schema coverage.

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 opens with a specific trigger condition ('Use when a human asks about gas-fired or behind-the-meter power economics for a data center in a US state') and names the exact resource it returns: a per-state brief fusing multiple gas-related data sources. It also explicitly distinguishes itself as the 'GAS analogue of get_grid_intelligence', making its purpose unmistakable against sibling tools.

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?

The description gives strong when-to-use guidance with concrete example questions, and explicitly states when NOT to use it: for electricity grid headroom use get_grid_intelligence, and for the DCGI score alone use get_gas_index. It also clarifies what is currently returned and what remains withdrawn, so an agent can avoid misuse.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and non-destructive; the description adds valuable behavioral context: data source (GEM Global Integrated Power Tracker), scope (182k units, 170+ countries), and the response shape (summary plus largest units rather than a full dump). No contradiction with 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?

Long but front-loaded: trigger, scope, data source, filters, output shape, examples, and exclusions all serve a purpose. Minor filler like 'Examples help' and a couple of typos keep it just shy of a perfect score.

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 7 optional params, an output schema, and rich annotations, the description covers everything needed for selection and invocation: when to use, what it returns, how filtering works, and which siblings to use instead. Nothing essential 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?

Input schema has 100% description coverage, so the baseline is already adequate. The description adds semantics: comma-union fuel filtering, bbox coordinate order, pipeline=true meaning announced+pre-construction+construction, and worked country examples. It doesn't add much about limit, but the schema covers that.

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 opens with a concrete trigger: power plants/units worldwide or in a NON-US country, covering operating and pipeline across all fuels. It explicitly distinguishes itself from US-specific, pipeline-specific, and project-level sibling tools, so an agent can select it correctly 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?

Provides explicit when-to-use guidance ('Use when...'), explicit when-not-to-use ('Do NOT use for US-specific grid questions...'), named alternatives (get_grid_data/get_grid_intelligence, get_power_pipeline), and a boundary between high-level comparisons and project-level detail (get_facility/search). This is model routing guidance.

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: data comes via EIA hourly RTO, is 'raw real-time telemetry', and is scoped to one ISO per call. This helps an agent set expectations about freshness, granularity, and scope.

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 purpose, then an iso example, then dense exclusion/alternative guidance. Slight redundancy exists ('real-time' appears twice and 'one ISO' repeats a point), but every sentence contributes meaningful routing or scoping information.

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 data-fetching tool with an output schema and safety annotations, the description covers the key invocation facts: ISO scope, data content, one-ISO limitation, and alternatives. The main residual gap is that it does not explain the 'metric' parameter or the optional payment credential, but those are documented in the schema. Overall, the description is sufficient for correct selection and invocation in most cases.

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 adds the iso example and mentions the data fields (fuel mix, demand, 24h demand curve), which partially hints at metric options, but it does not explicitly map those to the 'metric' parameter or clarify its accepted values. The schema carries most of the parameter-level burden.

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 ('real-time electricity grid data for the 7 US ISOs') and the concrete data content (fuel mix, demand, 24h demand curve). It also names the exact ISO list and explicitly contrasts itself with sibling tools (get_grid_intelligence, get_energy_prices, get_grid_scoreboard), so the agent can disambiguate 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?

Provides explicit when-to-use guidance ('Pass iso=PJM') and clear when-not-to-use conditions with named alternatives: not for power-availability/time-to-power/interconnection-queue analysis (use get_grid_intelligence), not for retail/gas pricing detail (use get_energy_prices), and not for non-US grids (use get_grid_scoreboard). This is exemplary routing guidance.

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 when a user asks "can I get N MW of power in and how long will it take?" — the flagship grid-headroom + interconnection-queue brief for one ISO. Example: "How much excess power does PJM have right now and what is the time-to-power for a 200MW load?" — get_grid_intelligence region_id="PJM". Params: region_id (aliases iso/region accepted) — one of the 7 US ISOs ("PJM" | "ERCOT" | "CAISO" | "MISO" | "SPP" | "NYISO" | "ISO-NE") OR a US EIA balancing authority (40+ now live, e.g. Atlanta/SOCO, Carolinas/DUK, Florida/FPL, Phoenix/AZPS, Las Vegas/NEVP, Portland/PGE, Seattle/SCL, LA/LDWP, Quincy/GCPD, Denver/PSCO, Tennessee/TVA — note: balancing authorities return live generation mix; demand, headroom, interconnection-queue and DCPI scores remain ISO-level for the 7 ISOs). You may instead pass market="Ashburn" (or a metro slug like "northern-virginia") to name a MARKET rather than a grid code: it is resolved to the ISO for that market through the published DCPI market row, and the reply carries a resolved_from block naming what it resolved to — the figures then describe the ISO, which is larger than the market you named. Returns: {iso, iso_name, demand_mw, generation_mix_pct{NG,COL,NUC,WND,SUN,WAT,…}, renewable_share_pct, gas_share_pct, constraint_score (0-100 DCPI), excess_power_score (0-100 DCPI), avg_time_to_power_months, avg_queue_wait_months, curtailment_pct, reserve_margin_pct, retail_price_cents_kwh, queue_depth_gw, data_center_share_pct, stranded_capacity_mw, grid_emergencies_30d, build_rate_pct, last_updated}. ★avg_time_to_power_months and avg_queue_wait_months are DIFFERENT measurements and are not interchangeable: time-to-power is the DCPI per-market estimate averaged over the ISO, while queue-wait is a proxy derived from live interconnection-queue DEPTH (12 + 0.6 months per GW, clipped 12-66) and is the one that saturates on the deepest queues. Quote whichever you mean by name. Do NOT use to compare 2+ ISOs side-by-side (use compare_isos) or for the global greenest-first ranking (use get_grid_scoreboard).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
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 world's #1 DC market, invisible in EIA)
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the tool read-only, idempotent, and non-destructive, and the description adds substantial behavior beyond that: resolved_from behavior for market inputs, balancing-authority vs ISO data granularity, and a critical warning that time-to-power and queue-wait are different measurements. No contradiction with annotations exists.

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 primary use case and every major clause carries useful routing or behavioral information. However, it is quite long, and some parts—such as the enumerated return field list and the long list of balancing-authority examples—are likely redundant with the output schema and 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?

The description covers the triggering question, parameter semantics, output behavior, measurement pitfalls, and explicit sibling exclusions. Given that an output schema exists and annotations already establish the safety profile, nothing essential is missing for correct invocation.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds real meaning: it enumerates valid region_id categories, clarifies accepted aliases, explains how market names resolve to ISOs, and documents the special balancing-authority behavior. This goes well beyond the schema's bare 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?

The description opens with a concrete trigger question and a clear verb-object pair: 'grid-headroom + interconnection-queue brief for one ISO.' It further distinguishes itself from siblings by naming compare_isos and get_grid_scoreboard as the correct tools for other intents.

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?

The description explicitly says 'Use when a user asks...' and provides a worked example with a real output shape. It also explicitly states what not to use it for and routes to the correct alternatives, leaving no ambiguity about selection.

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

GLOBAL grid scoreboard — 9 US grid operators (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE, BPA, 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) when available.
sourceNoUpstream feeds behind the rows in THIS response, generated (EIA hourly RTO, Elexon, ENTSO-E, Taipower, OCCTO, KPX, ONS, AEMO, EMA)
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
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
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.
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?

The description discloses critical behavioral traits beyond the readOnlyHInt: non-uniform freshness, mix_age_hours routinely 18-24h old, separate demand/mix clocks, Brazil's missing gas share, and partial_grids for AUS/SG. It tells the agent to read mix_age_hours before narrating a row as current, adding substantial safety value.

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 long and dense, but every sentence carries needed caveat or context. It front-loads the core purpose and the 'freshness is not uniform' warning early. It is not concise in word count, but it earns its length given the complexity.

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-parameter, read-only tool with a rich output, the description covers scope, data sources, ranking method, exclusions, geothermal nuance, freshness semantics, licensing, and example questions. An agent has everything needed to call it and interpret results 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?

There are zero parameters, so the schema has nothing to document. The description compensates by explaining what the output contains (renewable share %, fuel mix, gas share, mix_age, demand_vs_mix_lag), which sets correct expectations despite no output schema properties.

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 clear verb+resource: it fetches a global ranked grid scoreboard. It names all covered regions/operators and explicitly contrasts with siblings ('vs compare_isos (pairwise) or get_grid_data (single ISO)'), so an agent can distinguish it from the many grid-related tools.

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 specific use cases ('which grid worldwide is greenest, or most gas-reliant, for siting a data center?') and names alternatives: compare_isos for pairwise, get_grid_data for single ISO. It also warns about freshness caveats so an agent knows when to rely on the ranking vs. drill into details.

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. 278,799 published records across 18 utilities (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). 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 substation, voltage_kv, feeder_id, coords and publish date, 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 18 utilities 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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 the safety profile is covered. The description adds substantial beyond-annotation context: capacity_type semantics ('load' vs 'gen' vs 'bus_headroom'), the critical warning that 'gen' is NOT available load, the honest-by-construction behavior (distinct_feeders vs geometry_rows_scanned reported separately, sample_complete=false with capacity_floor_mw), and the explicit not-published vs silent-zero behavior. It doesn't detail rate limits or auth, but the annotations plus this behavioral disclosure are strong.

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 dense and information-rich rather than concise, but every sentence earns its place: scope, data provenance, calling modes, critical capacity_type semantics, coverage caveat, example call, and exclusions. It is front-loaded with the core purpose and the most critical warning (check capacity_type before quoting any number). It could be trimmed by removing the enumerated utility list, but that list serves a credibility and coverage-clarification function. Slightly long, but structured 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?

Given the tool's complexity (three calling modes, capacity_type distinctions, geographic carve-outs, output-schema semantics), the description covers everything an agent needs to invoke it correctly and interpret results: how to call each mode, what capacity_type means, what the output splits include, how completeness flags work, what geographic gaps exist, what not-published looks like, and what sibling tools to use instead. The output schema exists, so not restating return fields is appropriate.

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 all 11 parameters well, including aliases (lng/lon, latitude/longitude, market/utility), radius_km bounds, and capacity_type restrictions. The description adds value beyond the schema by explaining the meaning of the three capacity_type values in the context of siting ('gen' is export capacity, NOT available load), clarifying that NO ARGS returns the coverage list, and giving a concrete example parameter combination. It doesn't restate param mechanics but adds the interpretive layer that matters for correct invocation.

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 clearly identifies the tool as retrieving utility-published feeder hosting capacity in MW for a named distribution feeder, with specific data sources and geographic scope. It distinguishes this from proximity proxies and names the exact three calling modes (lat+lon with radius, utility/market, no args). This differentiates it from sibling tools like get_grid_intelligence, get_interconnection_queue, and get_retirement_headroom.

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?

The description provides explicit when-to-use guidance with example calls ('Try: get_hosting_capacity utility="Ameren Illinois" capacity_type=load min_mw=5') and explicit when-not-to-use guidance naming exact alternatives: '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 optimal usage differentiation.

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 does ERCOT plan by 2028?", "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 ERCOT's Transmission Project and Information Tracking list (TPIT) — ERCOT/TEXAS ONLY so far, no other ISO or utility — owner, from/to substation, county, kV, new and rebuilt miles, MVA, projected and actual in-service date, status (Planned, Conceptual, Under Construction, Completed, or dropped from the plan). 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. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, non-destructive behavior; description adds rich context: source coverage (EIA vs ERCOT TPIT), row-level source_url/license, summary counts, as_of dates, delisted behavior, and meaning of new_since with backfill exclusion. This materially exceeds annotation coverage.

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

Conciseness5/5

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

Long but densely functional: front-loaded use case, concrete examples, coverage details, filtering semantics, and exclusions. Every sentence carries routing or behavioral information; no filler. The length is justified by the tool's ten-parameter complexity.

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 multi-source, ten-parameter tool, the description fully covers scope, field contents, statuses, filters, output summary behavior, provenance, and exclusions. An output schema exists, so return-value documentation is not required. Nothing needed 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 already documents all parameters at 100% coverage, so baseline is 3. The description adds meaning beyond schema by explaining filtering semantics (e.g., state matching for gas, transmission TX-only, new_since backfill exclusion, in-service window behavior, include_delisted). It omits limit in prose, but schema covers 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 and resource: answering questions about planned/proposed/approved/under-construction gas pipeline and transmission projects. Clearly distinguishes from the existing network and names sibling tools (get_power_pipeline, get_infrastructure, get_grid_intelligence, get_pipeline) it is not.

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...' and gives concrete examples. Explicitly lists when NOT to use the tool and names the correct alternatives for power generation, existing infrastructure, and data-center construction. No ambiguity remains about routing.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses that results are raw assets joined to HIFLD/EIA, that substations include count and max voltage_kv, that transmission is a >69 kV path overlay, and that power plants include operating and planned status. This gives an agent an accurate behavioral model without contradicting the annotations.

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 description is front-loaded with the resource and layer list, then gives return details, an example, and an explicit exclusion. Each sentence earns its place; the only minor redundancy is 'nearby infrastructure' vs 'raw nearby assets', which does not hurt clarity.

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 lookup tool with an output schema and fully documented parameters, the description is complete: it covers what is returned, the data source, the supported questions, an example call, and when not to use the tool. Nothing an agent needs 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.

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 nine parameters. The description adds a usage example and notes radius_km is configurable, but it does not add significant meaning beyond the schema's own 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?

The description identifies a specific resource — nearby infrastructure around a lat/lon point — and enumerates the exact layers returned: substations, transmission lines, pipelines, and power plants. It also distinguishes itself from analyze_site by explicitly saying it returns raw assets rather than a scored verdict.

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 the intended use cases with example questions ('what is near this parcel', 'how far is the nearest substation and what voltage') and gives a concrete invocation example. It explicitly warns against using it for a single scored site-suitability verdict and names analyze_site as the correct alternative.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds genuinely useful behavioral context: the tool aggregates multiple market metrics, returns a single composite score plus components and trend, and is scoped to one market rather than the full metric set. It does not discuss latency or data freshness, but for a read-only index tool this is sufficient.

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 definition and return value, then gives use cases, an example, and exclusions. It is somewhat dense but efficient. A small amount of redundancy exists ('Returns ONE composite health number' repeats the earlier 'Returns...'), and the example call is questionable, but the overall structure is strong.

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?

The description is largely complete for selection and alternative routing, and the presence of an output schema covers return-shape details. However, the invocation guidance is contradictory: the schema accepts no parameters while the description implies a market parameter, leaving an agent without a reliable way to target a specific market. That gap prevents the description from being fully complete.

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?

The input schema defines zero properties, yet the description tells the agent to try 'get_intelligence_index market=northern-virginia', introducing a market argument that is not represented in the schema. This is misleading and could cause an agent to make an invalid invocation. It conveys that a market name is conceptually relevant, but the added semantics are not backed by 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?

Clearly defines a specific verb and resource: a real-time composite market health score (0-100). It distinguishes itself from siblings by explicitly saying it returns ONE composite health number and naming get_market_intel and rank_markets as alternatives, so an agent can disambiguate it from the large sibling set.

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 explicit use cases ('is this market healthy', 'how does Northern Virginia look overall right now') and explicit when-not-to-use guidance with named alternatives ('use get_market_intel', 'use rank_markets'). It even includes an example call. The main flaw is that the example references a parameter not present in the schema, but the when-to-use guidance itself is exemplary.

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

get_interconnection_queueInterconnection QueueB
Read-onlyIdempotent
Inspect

ISO interconnection queue snapshot: total queued GENERATION capacity (queued_load_total_gw, GW) per ISO from each ISO's public queue. For ERCOT it ALSO returns the large-load (data-center-driven) interconnection queue in queued_load_data_center_gw — >225 GW in process / ~9 GW approved-to-energize (ERCOT's published Q1-2026 figure; ERCOT is the only ISO that publishes a comparable large-load feed, so other ISOs' data_center_gw is null), with provenance in top_subregions. Sources: ERCOT GIS + Large Load Integration, PJM/MISO/SPP/CAISO/NYISO/ISO-NE public queues. Pass iso=ERCOT (or any of 7) to drill down. ★ The projects field CHANGES SHAPE with the call: with iso= it is an ARRAY of per-project rows; with iso omitted it is the all-ISO SUMMARY OBJECT {total, tracked, by_iso_count, top, note} and carries no per-project rows — check the type before indexing. Use for queue-depth site-selection and AI/data-center-load saturation intel (the ERCOT 225 GW number is the headline large-load figure no other source surfaces machine-readably). Do NOT use for a single-site time-to-power read (use get_grid_intelligence) or forward-looking emergence (use grid_transition_radar); this is the ISO-level queue snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNoISO/RTO grid region to drill into: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE; omit for the all-ISO snapshot
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
source_urlNoQueue source URL
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
source_nameNoQueue source name
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
project_countNoProjects in the queue snapshot
top_subregionsNoProvenance / sub-region breakdown for the large-load figure (ERCOT)
queued_load_total_gwNoTotal queued GENERATION capacity in this ISO, GW
new_applications_q_gwNoNew queue applications in the latest period, GW (when published)
new_applications_periodNoPeriod the new-applications figure covers
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.
queued_load_dc_share_pctNoERCOT only: data-center share of queued load, %
historical_completion_pctNoShare of queued projects that historically complete, % (when published)
queued_load_data_center_gwNoERCOT only: large-load (data-center-driven) queue, GW — null for ISOs that publish no comparable feed

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description adds genuinely useful context on top: the `projects` field changes shape based on iso presence, ERCOT uniquely returns large-load data with nulls for other ISOs, and provenance lives in top_subregions. The self-contradictory ERCOT capacity figure (>225 GW vs 305 GW) undermines trust, but it does not contradict the 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?

The description is overstuffed: stacked parentheticals, a starred shape-change aside, an isolate-level estimate note, and a leftover self-editing correction that should have been applied rather than pasted in. The core information could fit in three tight sentences; the stray editorial notes ('not 750 GW', 'I wrote >225 GW') are pure noise.

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

Completeness3/5

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

With annotations, an output schema, and 100% schema coverage, the description covers sources, per-ISO behavior, ERCOT-specific fields, and field shape changes well. The gap is that the conflicting ERCOT figures leave an agent unable to determine which number is authoritative, which is a real completeness failure for a data-snapshot 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 description coverage is 100%, so per rubric the baseline is 3. The description adds iso drill-down semantics beyond the schema (lists the 7 valid ISOs implicitly via 'any of 7') but contributes nothing new about mpp_pay or mpp_credential, which the schema already documents fully.

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 opens with a specific verb+resource ('ISO interconnection queue snapshot') and names exact returned fields (queued_load_total_gw, queued_load_data_center_gw) plus the 7 covered ISOs and sources, which positions it apart from generic grid siblings like get_grid_data or get_power_pipeline. It loses full marks because the embedded meta-correction text ('I wrote >225 GW... 305 GW is the actual') muddies what the tool actually reports.

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?

It gives clear invocation guidance ('Pass iso=ERCOT (or any of 7) to drill down') and distinguishes the omit-iso all-ISO snapshot case. However, it never tells an agent when to prefer this over sibling tools such as get_refined_queue, get_power_pipeline, or grid_transition_radar, and states no exclusions.

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)".

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
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses the token-budgeted greedy-fill behavior, per-section token counts, as_of timestamps, citation URLs, and omission behavior. It gives the agent a clear mental model of how results are produced and limited.

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 long but densely structured and front-loaded with the core trigger. Each section — contents, example, params, return shape, exclusions, citation — serves a distinct purpose, though it does repeat some schema details 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?

Given the tool's complexity and the large sibling set, the description is exceptionally complete: it covers content, budget semantics, output shape via the output schema, exclusion paths, and even citation expectations. No material decision-relevant gap remains.

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 input schema already documents both parameters fully, including the ISO list, the 200-8000 range, and the default of 4000. The description adds a useful example but mostly restates the schema, so the 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?

The description opens with a clear trigger — 'Use when an agent needs a WHOLE-grid briefing' — and specifies the full contents of the returned context pack. It also distinguishes the tool from siblings like get_grid_data, get_grid_intelligence, and compare_isos by naming what this tool is not for.

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?

The description explicitly states when to use the tool, when NOT to use it, and names the exact alternative tools for each excluded case. It also provides a concrete example invocation, making the routing decision unambiguous.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the readOnly/idempotent/destructive annotations by explaining the greedy priority-order filling under a max_tokens budget, per-section token counts and as_of timestamps, citable URLs, and the omitted field in the return object. It even discloses that the outlook is Claude-written, which is useful context an agent could not infer 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?

The description is long but information-dense, with purpose front-loaded, then an example, parameter semantics, return shape, and explicit exclusions. Every sentence adds value, though the density could be slightly streamlined 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?

The description covers what the tool returns, how the budget works, where valid slugs come from, which sibling tools to use instead, and the required citation string. Given the tool's complexity and the rich output schema information embedded in the description, nothing critical is missing 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. The description adds real meaning beyond the schema: it explains that market is a slug sourced from rank_markets, that max_tokens controls greedy section filling in priority order, and provides a concrete invocation example. This is meaningful enrichment rather than mere duplication.

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: returns a whole-market briefing pack for a data-center market, enumerating the exact sections included and the token-budgeting behavior. It actively distinguishes itself from siblings by naming get_market_dcpi_rank, get_market_intel, and rank_markets as alternatives for narrower or different needs.

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 'Use when an agent needs a WHOLE-market briefing' and then gives explicit negative guidance: do not use for a single metric, raw structured metrics, or cross-market ranking, with specific sibling tools named for each case. This gives an agent unambiguous routing criteria.

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

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 CBRE/JLL-style 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 in 10 ISOs. 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.

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) when available.
stateNoUS state / region code
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
verdictNoDCPI verdict: BUILD | CAUTION | AVOID
citationNoMachine-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.
forecastNoForecast availability block: {available, note, reason, samples_in_30d} — see predict_market_trajectory
latitudeNoMarket anchor latitude
longitudeNoMarket anchor longitude
narrativeNo~100-word CBRE/JLL-style 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
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
computed_atNoWhen the score row was computed
market_nameNoMarket display name
market_slugNoMarket slug
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.4/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 base safety profile is covered. The description adds real context beyond that: the narrative block must be quoted directly with attribution to DC Hub under CC-BY-4.0, and the composite_score is 'verdict-aware.' No contradiction with the annotations — the read-only/idempotent hints are fully consistent with a retrieval 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?

Three dense sentences, front-loaded with the core verdict/score outputs before the narrative and routing guidance. Every clause earns its place — output fields, citation requirement, when-to-use, when-not-to — though it runs longer than strictly necessary for a one-parameter read tool. The 'ONE market in depth' closer slightly repeats the opening 'single market' but serves sibling differentiation.

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 one-parameter, read-only tool with an output schema and 100% schema parameter coverage, nothing material is missing: returned fields, narrative/citation behavior, market coverage (300+ markets, 10 ISOs), and exclusions naming specific sibling tools are all present. The output schema relieves it of explaining return values, and it uses that headroom for routing guidance.

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%: market_slug is documented with concrete examples (northern-virginia, dallas, phoenix) and the source of valid slugs (rank_markets / get_market_dcpi_rank). With the schema carrying the full parameter documentation, the baseline of 3 applies; the description adds no extra syntax or format detail on top of 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: returns the DCPI rank for ONE market, listing the exact fields returned (BUILD/CAUTION/AVOID verdict, composite_score, excess_power_score, constraint_score, time_to_power_months) plus a narrative block. It distinguishes itself from siblings by name — rank_markets and compare_isos are called out as the multi-market/multi-ISO counterparts, and it closes with 'this is ONE market in depth.'

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: 'Use to answer "should I build here?" with structured reasoning + ready-to-cite prose.' It also gives an explicit when-not-to with named alternatives: 'Do NOT use to rank many markets at once (use rank_markets) or to compare ISO grids (use compare_isos).' This is the full when/when-not/alternative pattern with nothing 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 when a user asks about ONE data-center market — vacancy, capacity pricing, supply pipeline, dominant operators, YoY growth — across any of 300+ markets. Example: "What is Northern Virginia's vacancy rate, $/MW-day pricing, and current DCPI verdict?" — get_market_intel market=northern-virginia. Params: market is the market_slug (e.g. "northern-virginia", "dallas", "phoenix", "frankfurt", "tokyo", "singapore"). Returns: {market, country, capacity_mw_total, capacity_mw_under_construction, vacancy_pct, absorption_mw_ttm, price_per_mw_day_usd, yoy_growth_pct, dominant_operators[], dcpi_verdict (BUILD/CAUTION/AVOID), composite_score, last_updated}. Do NOT use to rank multiple markets (use rank_markets) or for a single facility (use get_facility).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
compare_toNoOptional second market slug to compare against, e.g. dallas
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
statsNoHeadline market stats
_gatedNotrue when parts of the payload were withheld by tier
marketNoThe market identity block
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
successNotrue when the market lookup succeeded
citationNoMachine-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.
by_statusNoFacility counts keyed by status (Operational, Under Construction, Planned, Announced, active)
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
related_intelNoRAG-grounded related intelligence passages (cited)
top_providersNoDominant operators, largest first
recent_facilitiesNoRecently added / discovered facilities in the market
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds useful behavioral context: it works across 300+ markets, returns a snapshot with a DCPI verdict and last_updated timestamp, and is scoped to a single market. It does not mention the MPP/autopay challenge flow, but those details are fully described in the input schema and do not contradict the 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?

The description is front-loaded with the main use case, then gives an example, param explanation, return shape, and exclusion routing. The return-structure section is somewhat redundant with the output schema, but the organization is clear and each section earns its place without excessive verbosity.

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 tool with rich annotations and a full input/output schema, the description covers the essential selection and invocation context: use case, example call, market slug format, and sibling routing. It could have mentioned compare_to or the MPP payment parameters at the top level, but those are well-documented in the schema, so nothing critical is missing for correct normal usage.

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 adds an example invocation and clarifies that market is a market_slug, but metric, period, compare_to, and payment parameters are left entirely to the schema. This is adequate but does not go beyond the schema in a meaningful way.

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 explicitly states the tool is for ONE data-center market and lists the concrete metrics returned (vacancy, capacity pricing, supply pipeline, dominant operators, YoY growth). It also differentiates itself from rank_markets and get_facility, making the tool's purpose immediately clear.

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 when-to-use condition ('Use when a user asks about ONE data-center market') and explicit when-not-to-use guidance with named alternatives ('Do NOT use to rank multiple markets (use rank_markets) or for a single facility (use get_facility)'). This is strong routing that leaves little to inference.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and the description reinforces this by presenting a query-style operation with no mutation side effects. The description goes beyond annotations by specifying the exact return shapes for both invocation modes, including the carrier-level dark-fiber data and the explicit citation requirement ('Cite DC Hub'). Some behavioral details like network latency or failure modes are not disclosed, but the coverage is strong.

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 information-dense and front-loaded with the primary use case, then examples, then return shapes, then exclusions. It is a bit long and the return-format details partially duplicate what the output schema likely already provides, but every sentence adds distinct behavioral guidance and the structure is logical. It earns a 4, not a 5, because it could be tightened by trimming in-description return payload details that belong to the output 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?

For a tool with one optional parameter, rich annotations, and an output schema, the description is fully complete: it covers scope, invocation variants, examples, parameter semantics, return payload shapes, attribution, and exclusions. 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% and the single parameter is already well documented in the schema, but the description adds meaningful value by explaining that market is optional, enumerates example values including slughs, and clearly states the two distinct return shapes for omitted vs. provided market. This enrichment of the parameter semantics justifies slightly above 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 opens with a specific use case ('deepest fiber', 'metro-level fiber profile') and enumerates the exact fields returned (carrier count, route-miles, on-net buildings, density score, tier, IX points, carrier hotels). It also differentiates itself from siblings by naming get_fiber_readiness and get_fiber_intel for different use cases.

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?

The description explicitly states when to use ('Use when a user asks which US metro has the DEEPEST fiber'), gives multiple concrete example queries, names the alternative tools to use for parcel-level connectivity and route geometry ('Do NOT use... use get_fiber_readiness... use get_fiber_intel'), and describes the exact behavior with and without the optional market parameter.

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).

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
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to restate safety traits. It adds useful behavior beyond the annotations: refresh cadence, curation scope, one-round-trip behavior, and returned fields. No contradiction exists.

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 most important routing caveat, and nearly every sentence adds actionable information. It is somewhat long and dense, but the length is justified by the need to disambiguate from several sibling tools.

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?

The tool has an output schema and strong annotations, and the description still adds the missing contextual pieces: when to use vs. avoid, an example invocation, source scope, refresh frequency, and sibling exclusions. Nothing critical is missing for an agent 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?

The schema already documents all 7 parameters with full coverage, so the baseline is 3. The description adds extra value by giving a concrete example call, clarifying that the parameter is 'category' not 'topic', and listing example category values.

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 clearly states that get_news retrieves curated data center industry news from 40+ trade sources and returns fields such as title, summary, source, and published_at. It also distinguishes itself from execute_plan, list_transactions, and get_pipeline by naming exactly what it is not for.

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?

The 'FRONT DOOR CHECK' explicitly tells an agent when to call execute_plan instead of get_news, and when get_news is the right call. It also gives negative boundaries for structured M&A data and pipeline data, naming the correct sibling tools.

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, policy/tech contacts). 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, it discloses data provenance (PeeringDB, refreshed on read), that the 0-100 score is a derived convenience and not a DC Hub-sourced grade, and that the score should not be cited as load-bearing. No contradiction with annotations.

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?

Long but dense, with no filler. Every sentence earns its place: mode semantics, output shape, an illustrative example, data provenance, a score caveat, concrete invocations, and exclusions. The core purpose is front-loaded.

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 two modes, six parameters, and an output schema, the description covers invocation, output fields, source/freshness, score interpretation, and sibling routing. Return-value details are handled by the output schema, so nothing critical is missing.

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

Parameters5/5

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

Schema coverage is 100% and each parameter is documented. The description adds crucial meaning beyond the schema: coordinate presence toggles between the peering profile and IXP directory modes, aliases are illustrated, and a concrete example invocation is given. The limit parameter is already fully described 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: IX/IXP and peering density for a site, sourced from PeeringDB. It distinguishes itself from siblings by explicitly naming get_fiber_intel, get_fiber_readiness, get_metro_fiber, and get_subsea_cables as tools not to use, and it clarifies the dual-mode behavior (lat/lon profile vs IXP directory).

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 instructions: pass lat+lon for the peering profile, omit coordinates for the IXP directory. It provides example invocations, example questions it answers, and a direct 'Do NOT use for' list naming specific alternative tools.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

The annotations already mark this read-only, idempotent, and non-destructive; the description adds meaningful behavioral context beyond that: data is 'HUMAN-VERIFIED', records are stage-tagged with Enacted/Proposed/Speculative prefixes, every record includes source URL and coordinates, and the tool is 'FREE and full for every caller'. It also notes the data powers a specific live map layer. This materially informs what the agent should expect without repeating the 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?

The description is longer than minimal but every major part earns its place: value proposition, record contents, example queries, and an explicit exclusion. A few sentences are more promotional (e.g. 'no other machine-readable source serves', the live map URL), but the core guidance is front-loaded and remains skimmable.

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 non-mutating lookup tool with zero required parameters, an output schema present, and read-only annotations, the description is complete. It tells the agent what kind of data to expect, how the records are structured and tagged, how to filter, what the tool is not for, and where the data appears. Nothing critical for selecting or invoking the tool 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 schema already documents both parameters at 100% coverage, so the baseline is 3. The description adds value beyond the schema by mapping the class categories to real record types (moratoriums, zoning restrictions, tax changes, utility pauses) and showing concrete example usages like class=moratorium and state=MN. It could go further with formatting details, but the schema covers the essential semantics.

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 object ('permitting & moratorium intelligence') and the exact record types it covers, and pairs it with concrete questions it answers ('is there a moratorium where I want to build'). It also explicitly differentiates itself from the sibling get_tax_incentives, so an agent can confidently distinguish it from nearby 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?

Usage guidance is explicit: it tells the agent when to use the tool ('answers moratorium/zoning questions'), gives concrete example invocations (class=moratorium, state=MN), and clearly states a do-not-use case ('Do NOT use for tax INCENTIVE programs by state') with the correct alternative named. This is model guidance for when to choose this tool over a sibling.

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).

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
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive behavior, and the description adds useful context beyond that: there is no market parameter, statuses are enumerated, and the exact return shape is provided. It also clarifies scope by excluding operational facilities, adding meaningful behavioral guidance without contradicting the annotations.

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 description is dense but every sentence earns its place: use case, example, parameter summary, return shape, and exclusions. It is front-loaded with the most important usage signal and contains 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?

For a tool with 7 optional parameters and an output schema, the description is fully sufficient. It covers when to use it, how to construct queries, what parameters mean, what the response looks like, and which sibling tools to use instead in edge cases.

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 by giving concrete formats and examples for each parameter (ISO-2 country codes, hyperscale capacity threshold, ISO date for expected completion) and by explicitly noting the absence of a market parameter and how to work around 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?

The description clearly states the tool returns the forward-looking construction pipeline ('what is being built / announced / permitted') and gives a concrete example. It also distinguishes itself from related tools like search_facilities and list_transactions, so an agent can tell them apart.

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 ('Use when a user asks...'), provides a worked example, and gives direct exclusions with alternatives: do NOT use for operational facilities (use search_facilities) or M&A deal flow (use list_transactions). It also notes there is no market parameter and directs to search_facilities for named markets.

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

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral depth: confidence classes are 'never blended', the derived number counts only under-construction+testing minus retirements, speculative MW is 'shown but never folded in', and the tool declares out-of-coverage items rather than estimating them. This goes well beyond the annotations and sets honest expectations.

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 verbose but information-dense; every sentence earns its place by adding source-composition detail, derived-number semantics, example queries, or exclusions. It is front-loaded with the core purpose and ends with an honesty line. The length is justified by the tool's compositional complexity, though it could be tightened.

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 the annotations, a 100%-covered input schema, and an output schema, the description is complete: it specifies scope, data sources, derived-number logic, confidence-class handling, exclusions, and honesty constraints. An agent has everything needed to invoke the tool correctly and interpret the result appropriately.

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 adds some contextual meaning around 'year by year' and state-level timing, but the parameter descriptions in the schema already explain state, years, and mw's context-only behavior. The description does not materially improve parameter understanding 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?

The description states a specific verb, resource, and scope: 'Power-availability TIMING for one US state — when power gets EASIER, year by year.' It clearly differentiates from siblings with the explicit 'Do NOT use for' list naming get_power_pipeline, get_grid_intelligence, get_refined_queue, rank_markets, and ai_capacity_index. This is a resourced, scoped, and well-differentiated purpose statement.

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?

The description gives explicit when-to-use guidance with concrete example questions ('when is new capacity landing in Ohio', 'what comes online in Georgia by 2027') and explicit when-not-to-use alternatives via the 'Do NOT use for' segment. It also clarifies the tool's scope boundary: it answers WHEN, for one state, not queue depth or ranking.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark the tool read-only, idempotent, and non-destructive, and the description adds meaningful behavioral detail: coverage of non-ISO regions, inclusion of planned/permitting/under-construction statuses, returned summary fields, and the mix of technology/status. It also discloses what the tool is not for, which helps avoid misuse.

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 long but well-structured, opening with when to use it, followed by data scope, returned fields, filters, an example, and explicit exclusions. Every sentence carries useful information, though it could be tightened slightly without losing clarity.

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?

Combined with a 100%-covered schema, an output schema, and annotations, the description provides everything an agent needs: usage trigger, scope, returned data shape, filter semantics, an example query, and alternative tool routing. There are no significant gaps.

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 by decoding status codes (P/L/T, U/V, TS), giving concrete examples for state/ba filters, and confirming min_mw refers to nameplate capacity. This goes beyond the schema's definitions without being redundant.

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 plus resource: retrieving the forward supply pipeline of planned/under-construction power generation. It clearly distinguishes itself from related tools like get_interconnection_queue, get_grid_intelligence, and get_pipeline by naming exactly what it covers and what it does not.

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 conditions for use ('Use when a user asks WHERE NEW POWER GENERATION is coming online') and explicit exclusions with alternative tool names ('Do NOT use for ALREADY-OPERATING capacity... use get_grid_intelligence / get_grid_data'). This is ideal routing guidance for an agent.

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 (~5,300 projects, 7 ISOs, ~1,744 GW). 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
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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent; the description adds meaningful behavior beyond that: HARD ISO-level TTP cuts, partial geocoding (~83%), coarse fiber-proximity caveats, candidate_id/snapshot TTL behavior, and zero-drift chaining semantics. No contradiction with 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?

Extremely dense and information-rich, with the core value prop and example up front. It earns most of its length, though the candidate-contract lifecycle, zero-drift chaining, and contract-doc URL add a lot of adjacent detail that could have been trimmed or separated.

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?

Givven the tool's complexity, 9 parameters, and output schema, the description covers invocation patterns, parameter interactions, output shape, caveats, and downstream chaining. Nothing critical an agent needs to call it correctly appears to be missing.

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

Parameters5/5

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

Although the schema covers 100% of parameters, the description adds substantial semantics beyond the schema: fuel_type substring/union behavior, baseload_only's firm-vs-intermittent meaning, max_fiber_km's coarse dataset limitations, and max_ttp_months's per-ISO averages and hard-cut pitfalls. This is far beyond a baseline 'schema already documents it' 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: server-side set-reduction over the US ISO interconnection queue, returning only survivors that match predicates. It clearly distinguishes itself from get_interconnection_queue and analyze_site by explicitly saying what not to use it for.

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 explicit when-to-use guidance ('high-cardinality siting/arbitrage scans') and when-not-to-use guidance with named alternatives ('ISO-level GW aggregate → get_interconnection_queue; single-site read → analyze_site'). Includes a concrete example query and threshold warnings that directly affect correct invocation.

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).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
latitudeNoAlias for lat — either name works
longitudeNoAlias for lon — either name works
energy_typeNoRenewable type: "solar", "wind", or "combined"; omit for all
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark the tool read-only and idempotent, and the description adds useful behavioral context: data provenance (EIA-860 + state RPS), the 50-mile nearest-project behavior for lat/lon, and the cost/efficiency note about one round trip versus routing through the planner. It does not mention the optional MPP payment flow, but that is fully documented in the 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?

The description is longer than average but well-structured: front-door routing, use cases, example, parameter summary, return shape, and exclusions each earn their place. The organization makes it easy for an agent to scan for the routing decision first.

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?

Together with the output schema and annotations, the description covers the main use cases, exclusions, return shape, and routing alternatives. It is not quite perfect because the siting edge case could be clearer and the optional payment flow is only visible in the schema, not the description.

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 description does not need to compensate for missing parameter documentation. It restates energy_type, state, and lat/lon semantics without adding materially new meaning, and the aliases and payment parameters remain fully explained by 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 clearly states that the tool returns renewable capacity, fuel mix, and PPA-sizing inputs for a single US state, and reinforces this with a concrete example invocation. It also distinguishes itself from execute_plan by defining when the simpler data lookup is the right call. The scope is specific enough for an agent to select it 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?

The description gives explicit when-to-use and when-not-to-use guidance: route paired renewables+siting/grid-headroom/market questions to execute_plan, use get_grid_data for live generation, and use get_grid_scoreboard for non-US markets. However, the line 'Use when siting a renewable-powered data center' sits in tension with the earlier exclusion for renewables paired with siting, leaving one edge case ambiguous.

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

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/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, and the description adds meaningful context: it uses FILED data rather than forecasts, includes a meta.caveat about ISO reliability reviews and RMR extensions, and discloses that target_mw is passed through into the site_evaluation_handoff as capacity_mw. This goes beyond what annotations alone 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 description is dense and front-loaded with the core purpose, then covers outputs, caveats, and sibling routing. Some promotional phrasing ('sidestepping the 4-7yr mega-queue') is non-essential, but overall the length is justified by the tool's complexity and the value of the example and exclusions.

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?

The tool is complex, but the description covers the data source, horizon, result contents, substation proximity logic, queue pressure, ISO context, handoff behavior, caveat, and how to choose among siblings. With an output schema present, nothing needed 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?

The input schema already documents all parameters at 100% coverage, so the baseline is 3. The description adds real value on top by explaining that target_mw also becomes the handoff's capacity_mw, that region_iso matches the generator's EIA balancing-authority code rather than state lines, and that fuel_filter is substring-matched.

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: scanning scheduled EIA-860M generator retirements to find transmission grid headroom. It explicitly answers the tool's use cases ('where is grid capacity about to free up') and distinguishes itself from siblings like get_refined_queue and analyze_site.

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?

The description gives both a clear when-to-use directive ('Use to find WHERE capacity opens next') and explicit alternatives ('for what's already queued use get_refined_queue; for one site use analyze_site'). It also includes a concrete parameterized example with target_mw, horizon_months, and region_iso values.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and non-destructive behavior. The description adds meaningful behavioral detail beyond annotations: refresh defaults to true, sites are re-scored against the current national baseline, and it returns saved_score, current_score, and score_delta_since_saved. This gives the agent a clear model of what happens when called.

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 description is compact and front-loaded with the core purpose. Every sentence earns its place: retrieval, refresh behavior, output semantics, and the use case. The formatting emphasizes the critical distinction without being bloated.

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 only two parameters, high schema coverage, existing annotations, and an output schema, the description covers all needed context. It explains the re-scoring behavior, scope, and the practical purpose, leaving no material gap for an agent to 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 the schema already documents both parameters. The description adds real value by explaining the semantics of refresh=true versus false, including re-scoring behavior and returned delta fields, which goes beyond the schema's basic description.

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 uses a specific verb-resource pair ('Retrieve a saved shortlist') and adds a distinct phase context ('Phase 5'). It clearly differentiates from siblings like save_to_shortlist and list_saved_sites by focusing on retrieval of an existing shortlist with optional re-scoring.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: 'The reliable way to maintain a siting campaign across days/weeks.' It also notes API key scoping. However, it does not explicitly name alternative tools or state when not to use this tool.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A5/5.0
Behavior5/5

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

The description goes beyond the read-only annotation by disclosing data caveats: cable_count is not populated (defaults to 0), connectivity_grade comes back null, and 0 should be treated as UNKNOWN. It explains the upstream feed limitation and warns about filtering on cable_count, providing critical behavioral transparency.

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 description is long but every sentence carries essential information: the two modes, output fields, data caveats, example calls, and exclusions. There is no filler; the warning about cable_count is purposeful and not redundant. The structure is front-loaded with the core function and ends with clear non-use cases.

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?

The description provides complete context: output characteristics for both modes, data quality caveats, example values, and a clear boundary against 4 sibling tools. An agent can confidently decide when to call this tool and what to expect from the results, even without an explicit output schema.

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

Parameters5/5

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

All 7 parameters have descriptions in the schema, and the description adds extra context: aliases (lng/lon, latitude/lat, longitude/lon), the default radius of 200 km, and the conditional use of coordinates vs. catalogue. Schema coverage is 100%, and the description enriches meaning 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?

The description clearly states the two distinct modes (landing points near a coordinate, or the global cable catalogue) and explicitly distinguishes this tool from sibling tools like get_fiber_intel, get_fiber_readiness, get_metro_fiber, and get_peering_intel, making its purpose unambiguous.

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?

The description gives explicit when-to-use guidance with example questions ('which subsea cables land near this Virginia site') and a concrete invocation example. It also states what NOT to use it for, naming the specific sibling tools and their purposes.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoUS state abbreviation (required), e.g. VA, TX, AZ

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and non-destructive, so the safety profile is covered structurally. The description adds valuable behavioral context beyond annotations: the required license attribution ('Cite the statute with attribution to DC Hub (CC-BY-4.0)') and the exact return shape. No contradiction or hidden behavior is present.

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 trigger and example, then moves through params, return shape, citation, and exclusions. It is longer than minimal, and the return-shape enumeration partially duplicates the existing output schema, but every section earns its place for guiding tool selection and invocation.

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 one-parameter, read-only, idempotent tool with an output schema and annotations, the description is complete: it states exactly when to use it, what it returns, its licensing obligation, and how it differs from siblings. 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 adds meaningful semantic value by explicitly marking state as required (the schema has no required array), specifying '2-letter US code', and giving an inline call example. This is useful beyond the property description's examples.

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 starts with a precise trigger ('Use when a user asks "what tax breaks does <state> give data centers?"') and clearly identifies the resource: data-center tax-incentive packages by US state. It further cements differentiation by explicitly stating this covers only the TAX factor for one US state, distinguishing it from analyze_site and rank_markets.

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 when-to-use condition, a worked example ('get_tax_incentives state=VA'), and explicit do-not-use cases with named alternatives ('analyze_site' for multi-factor reads, 'rank_markets' for cost ranking). An agent can route correctly with no inference required.

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

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 / county=Maricopa). Params: ONE of lat+lon (-90..90 / -180..180), state (2-letter US), or county; 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.

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
latitudeNoAlias for lat — either name works
longitudeNoAlias for lon — either name works
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: one round trip, free tier, no planner overhead, and data sourced from USGS water-stress and the US Drought Monitor. It does not deeply explain the paid MPP path, but the schema covers that and there is no contradiction with the annotations.

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 front-loaded with the most important routing decision and uses examples effectively. However, it is long and somewhat repetitive, repeating the 'grid + fiber + water + tax + climate' phrase and the same exclusion logic in multiple forms. It could be tightened without losing clarity.

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 tool with an output schema and full parameter schema coverage, the description covers the core use case, input modes, precision trade-offs, data sources, and alternatives. The main weakness is the invented 'county' parameter, which creates a false expectation and is not harmless. Overall, the agent has enough context to call the tool correctly for the lat/lon and state paths.

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?

Although the schema has 100% parameter coverage, the description adds meaningful selection semantics like 'ONE of lat+lon, state, or county' and notes that lat/lon gives the most precise read. However, it explicitly recommends a 'county' parameter that does not exist in the input schema, which is misleading and could cause invocation errors. This invalid guidance offsets the useful grouping and precision advice.

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 clearly states that this tool returns the WATER factor for a US site, specifically the water-risk score for cooling-water sustainability. It distinguishes itself from analyze_site, execute_plan, and get_infrastructure by explicitly saying it covers only the water factor. The example with Phoenix makes the purpose concrete and unambiguous.

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 guidance: use get_water_risk when you need only the water-risk factor for a US site, and use execute_plan or analyze_site for a combined multi-factor verdict. It also names get_infrastructure as the alternative for nearby physical infrastructure. The examples and 'Do NOT use' clauses make selection straightforward.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive hints, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the paid-key requirement for the transition thesis and the specific signal criteria (BUILD verdict, excess-power headroom, time-to-power). It does not cover pagination or error behavior, but that is not critical here given the annotations and output 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?

The description is longer than average but every sentence carries signal: scope, return contents, paid-key caveat, positioning, examples, and exclusions are all present without fluff. It front-loads the core value proposition and uses a clear structure. A pure 5 would require slightly more compression, but this is well within acceptable density.

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 the output schema exists and the annotations cover safety, the description is complete for selection and invocation. It explains the use case, the output components (markets, ISO rollup, leaderboard, optional thesis), the paid-key condition, and what it is NOT for. The only minor gap is lack of detail about response size or shape, but that is covered by the output schema.

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?

With 100% schema description coverage, both parameters are self-documenting in the schema. The description adds one practical example (max_months=24) but no additional semantic nuance beyond what the schema already provides. Baseline mid-range 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?

The description states a specific verb ('Returns') and a clearly defined resource ('US markets + ISOs with the strongest near-term emergence signal'), and immediately distinguishes it from siblings by naming what it is not ('current ISO queue snapshot', 'present-day market ranking'). This leaves no ambiguity about the tool's forward-looking 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?

The description explicitly spells out when to use it ('where should I be looking next', 'which market is about to become buildable'), provides a concrete invocation example ('Try: grid_transition_radar max_months=24'), and explicitly excludes alternatives with pointers ('use get_interconnection_queue', 'use rank_markets'). This is the gold standard for usage 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.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
landingNoHuman landing page URL
citationNoMachine-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.
feed_nameNoFeed identity line
live_feedNoLive feed URL
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
computed_atNoFeed computation timestamp (10-min refresh)
methodologyNoHow deals are extracted and classified
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
result_countNoNumber of deals returned
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already signal readOnly, idempotent, and non-destructive behavior. The description goes beyond annotations by revealing the 10-minute refresh cadence, the source (dchub news pipeline), the extraction method (regex for $-figures and MW), and actor classification. This gives the agent meaningful behavioral context without contradicting annotations.

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 description is dense but every sentence earns its place: scope, source/method, refresh behavior, use cases, and exclusions. Front-loading the core value proposition and then providing routing guidance makes it efficient and easy to parse.

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 a simple one-parameter schema, an output schema present, and annotations covering safety semantics, the description provides all needed operational context: what the feed is, how fresh it is, how it is built, and when not to use it. The final sentence explicitly reiterates the tool's identity as the live $1B+ AI-capex feed, closing any ambiguity.

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%, with the single 'limit' parameter fully documented in the schema. The description does not add parameter-specific detail, but none is needed given the schema already explains the parameter. 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 clearly states this is a 'live feed' of hyperscaler AI deals, naming specific actors (Stargate, OpenAI, Anthropic, Microsoft, Oracle, etc.) and the source pipeline. It explicitly differentiates itself from siblings by naming list_transactions and deal_autopsy as alternatives, so an agent can distinguish 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?

The description gives explicit use cases: tracking AI capex events, capacity announcements, and competitive intel. It also provides clear negative guidance with alternatives: '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 exemplary routing guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: saved sites are per-account, a keyless call returns auth_required rather than an empty list, and the response includes live deltas, alert status, and portfolio flags. This meaningfully informs the agent about failure modes and output dynamics.

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 most critical prerequisite (key requirement), then moves through use case, parameters, return fields, and exclusions in a logical order. It is a dense single paragraph and repeats some schema-covered parameter details, so it is not maximally concise, but every major section earns its place.

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 tool with full schema coverage, a rich output schema, and strong annotations, the description is nearly complete: it covers auth prereqs, failure behavior, return value highlights, and routing away from sibling tools. The main gap is not addressing the overlapping sibling get_shortlist, which could cause selection ambiguity.

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 explains the `since` parameter fully, including valid values ('24h'/'7d'/ISO), the default, and the generated_at caching hint. The description largely repeats this information rather than adding new semantic detail, so the baseline of 3 is appropriate.

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 clearly identifies the tool as listing saved sites with a specific in-chat read-back purpose and gives example user queries. It explicitly says what NOT to use it for (save_site, export_dataset), but it does not differentiate from the similarly named sibling get_shortlist, which likely overlaps in purpose.

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?

The description gives explicit when-to-use guidance: 'Use when a user asks to see or review their saved DC Hub shortlist in-chat, or wants to know what moved on it.' It also provides a key prerequisite (call claim_free_key first) and names alternatives for excluded use cases (save_site for adding, export_dataset for file download).

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 (webhook watches) registered on your key. Read-only. Returns each intent_id, kind, watch params, webhook_url and enabled state — use it to find the intent_id for delete_standing_intent, or to confirm a register landed. Requires a key. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description doesn't need to repeat those. It adds valuable context beyond annotations: requires a key, returns specific fields, and can confirm whether a registration landed.

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?

Four sentences, each earning its place: what it does, what it returns, why you'd call it, and what not to use it for. The key scoping phrase is front-loaded, and the exclusion list is compact and actionable.

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 no parameters and annotations covering the safety profile, the description fully covers an agent's needs: purpose, return contents, prerequisites, and alternatives. Nothing important is missing for correct selection and 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?

The tool has zero parameters, so schema coverage is effectively complete. The description correctly avoids inventing parameter guidance and instead spends its words on behavior, which is the right division of labor.

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 opens with a specific verb and resource: 'List the standing intents (webhook watches) registered on your key.' It also states the output fields and contrasts itself with create and one-shot read tools, making its purpose unambiguous.

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 explicitly states when to use it: to find intent_id for delete_standing_intent or confirm a register landed. It also gives clear exclusions: do NOT use it to create a watch (register_standing_intent) or for one-shot reads (get_news / list_transactions).

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,600+ 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).

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) when available.
cachedNoWhether the response was served from cache
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
successNotrue when the deal query succeeded
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step 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_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
transactionsNoM&A / capital-transaction rows
total_value_unitNoUnit of total_value
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false; the description adds meaningful behavioral context beyond that: disclosed-value caveats for private deals, returned fields, filterable dimensions, and the warning that no `year` parameter exists. It accurately describes a safe, read-only, filterable listing operation without contradicting annotations.

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 description is information-dense but every sentence earns its place: scope, data caveat, return fields, filters, example use cases, a Try command, a schema gotcha, and sibling exclusions. It is front-loaded with the core purpose and ends with routing guidance.

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 list tool with an output schema, no required parameters, and annotations covering safety, the description is complete: it states coverage, filters, returned fields, data limitations, and exclusions. An agent has everything needed to decide whether to call this tool and how to frame the call.

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 all 10 parameters; baseline is 3. The description adds value by signaling ISO-8601 date format, explaining that date_from/date_to replace a non-existent `year` parameter, and providing a concrete min_value_usd example in a Try invocation. That is genuinely useful correction and usage context 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?

Description specifies a clear verb ('list') and resource ('M&A and capital transactions in the data center sector') and provides concrete scope details like 1,600+ deals and 2019-present. It also explicitly contrasts itself with siblings deal_autopsy and hyperscaler_deals, so an agent can distinguish 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 explicit when-to-use signals: sample questions it answers, a ready-to-run example, and direct exclusions ('do NOT use for hyperscaler-specific lease/PPA/JV activity (use hyperscaler_deals) or a single-deal post-mortem (use deal_autopsy)'). This is exemplary guidance for tool selection.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: outputs are 'INDICATIVE auto-routed road corridors — NOT engineered alignments' and are 'subject to survey, DBYD and carrier confirmation'. This is exactly the kind of limitation an agent needs to know before relying on the result.

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 description is long but every sentence earns its place: definition, example, parameter semantics, return contract, caveat, and exclusions. The core purpose is front-loaded in the first sentence, and the structure is dense without being 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?

The tool is moderately complex (5 params, 2 required), but the description covers input formats, output fields, cost/diversity shape, caveats, and when not to use it. The output schema exists, so the description does not need to re-explain return structure beyond naming the key fields. No significant gap remains.

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 domain semantics on top: from is the candidate data-center site, to is a carrier hotel/POP, n controls route diversity, fibre is the 'spec for cost estimate', and bore_m is 'river/rail bore length'. It also gives a concrete worked example, which helps the agent map parameters to real usage.

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 action (Plan) and a specific resource (diverse, road-following fibre lead-in routes between a data-center site and a carrier hotel/POP), and states the question it answers ('can I get N diverse fibre routes...'). It also explicitly distinguishes itself from sibling tools analyze_site and get_fiber_intel by naming what it is not for.

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?

The description gives clear when-to-use context via the question it answers and an example invocation. It goes further and explicitly states exclusions: 'Do NOT use for a single site-suitability score (use analyze_site) or fibre-provider footprints (use get_fiber_intel)', which is exemplary routing guidance.

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.

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) when available.
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 discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
chainingNoZero-drift chaining guidance (candidate_id contract) when the plan crosses get_refined_queue → analyze_site / rank_sites
citationNoMachine-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.
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).
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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 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.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.
workflow_confidence_basisNoThe arithmetic behind workflow_confidence: {resolved_signals, minted_placeholders, user_supplied_placeholders}

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses deterministic no-LLM keyword routing, no network access, no execution, identical plans for identical intents, auditable replay structures, free operation, and the rule that angle-bracket args_hint values must be substituted from earlier steps. No statement contradicts the 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?

The description is front-loaded with the core inspect-only message and every major behavioral note earns its place. It is dense and slightly over-long due to the extensive output-field enumeration, which overlaps with the existing output schema, so it is 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?

Despite the large sibling set and rich output schema, the description covers when to use the tool, what it returns, how parameters affect planning, safety properties, and the key execution caveat (substitute args_hint values). Nothing an agent needs to choose and 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.

Parameters5/5

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

Although schema coverage is 100%, the description adds meaning beyond the schema: it explains that context hints sharpen args_hint values and routing (e.g., lat/lon boosts site-analysis), and it warns that angle-bracket args_hint values reference named earlier steps and must never be invented. This is non-obvious behavioral guidance the schema does not capture.

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 opens with 'INSPECT-ONLY — returns the plan WITHOUT running it,' giving a specific verb and resource and immediately distinguishing it from execute_plan. It also routes family-level browsing to discover_tools, so the scope is unambiguous.

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 explicitly states when to call execute_plan instead ('For a real multi-step DC Hub question...') and when to reach for plan_query ('only to review, log, diff or audit a plan before executing it yourself'). It also names discover_tools as the sibling for family-level browse, making the decision rule concrete.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is well covered. The description adds meaningful behavioral context beyond those annotations: confidence bands WIDEN with horizon, it is a linear trend extrapolation 'NOT a guarantee', it requires >=3 daily snapshots, and it returns a caveat field. This is exactly the kind of limitation disclosure that helps an agent trust and interpret the result.

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 description is information-dense but well organized: purpose, behavior, use-cases, params, return shape, and exclusions each take one compact clause or sentence. The HONEST warning and Do NOT directives are clearly delimited and front-loaded after the core purpose. Nothing feels redundant with 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?

Given the output schema exists to document the return shape, the description appropriately covers what remains: when to use it, what it projects, its caveats, data-source ownership, and its prerequisites. The only minor omission is a concrete time span for the 'short history' caveat, but the >=3 snapshots requirement and widening bands make the behavior sufficiently clear.

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 both parameters are already documented in the schema. The description adds value by reinforcing that valid market_slug values come from rank_markets / get_market_dcpi_rank and that horizon_quarters=2 means ~6 months, which aids agent interpretation. This slightly exceeds the baseline for full schema coverage.

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 opens with a specific verb ('Forecast'), a precise resource ('a DCPI market's near-term trajectory'), and a concrete horizon (next 1-8 quarters). It names the projected quantities (excess_power_score, constraint_score), cites the data source, and explicitly distinguishes itself from get_market_dcpi_rank and rank_markets.

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 explicit when-to-use examples ('is this market trending toward BUILD or AVOID?', 'will Dallas power stay tight...'), explicit exclusions ('Do NOT use for a single point-in-time verdict', 'Do NOT use to rank many markets'), and names the alternative tools. It also documents the data requirement: needs >=3 daily snapshots or it declines.

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

FRONT DOOR CHECK — if the question is "WHERE SHOULD I PUT MW" (a siting decision), call execute_plan(intent="<the user's question, unchanged>") instead: ONE call runs the market ranking AND the per-finalist BUILD/CAUTION/AVOID verdict AND the grid reality-check, and returns a replay naming the markets it rejected and why. If the question is "RANK MARKETS BY " — you want the ranked list itself and nothing attached — rank_markets IS the right call: stay here. The trade is real and runs the other way: execute_plan spent ~3 steps and roughly 4x this tool's latency on a measured market-ranking intent, so a single-capability ask should NOT be routed through the planner. Use when a user wants "the top N markets for X" — one ranked list across the 300+ market set rather than N separate get_market_intel calls. Example: "What are the 10 fastest-growing US markets with at least 100MW of existing capacity?" — rank_markets criteria=fastest_growing region=us limit=10 min_capacity_mw=100. Params: criteria one of "cheapest_power" | "most_capacity" | "most_operators" | "fastest_growing" | "best_overall" (default best_overall) | "ai_ready"; region one of "global" | "us" | "canada" | "eu" | "apac" | "americas" (default us); limit 1-50 (default 10); min_capacity_mw filter floor (e.g. 100). ★ criteria="ai_ready" ranks by DCPI BUILDABILITY (excess-power + time-to-power + BUILD/CAUTION/AVOID verdict) — where NEW AI-campus load can actually LAND — NOT by installed build-out (the other five criteria). Use ai_ready for AI/GPU/hyperscale campus siting: the most-built-out markets are frequently AVOID for new load, so a build-out ranking mis-answers "where do I put a 200MW AI campus". Returns: {criteria, region, result_count, results:[{rank, metro_slug, market, city, state, country, score, value, total_mw, facility_count, operator_count, url}], data_source, methodology, score_basis}. score is the value the list is sorted by (score_basis states this in words; ai_ready omits it and explains its composite in methodology): best_overall = 0.4×total_mw + 50×operator_count + 20×facility_count; most_capacity and cheapest_power = total_mw; most_operators = operator_count; fastest_growing = facility_count; ai_ready = the DCPI composite. It is NOT a 0-100 scale and does not change with limit, so compare scores only within one criteria; rank is the position. To drill into a ranked market, feed results[].metro_slug into get_market_dcpi_rank. Do NOT use for a deep read on ONE market (use get_market_intel), for scoring a specific lat/lon (use analyze_site), or for a siting question that also needs the verdict and grid check attached (use execute_plan).

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"
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
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).
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.
min_capacity_mwNoMinimum existing capacity filter in megawatts (MW), e.g. 100

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

With readOnlyHint=true, openWorldHint=false, idempotentHint=true, and destructiveHint=false already declared, the description still adds meaningful behavioral context: ai_ready ranks by DCPI buildability rather than installed build-out, the score is not a 0-100 scale and is only comparable within a criteria, and it explains the latency tradeoff versus execute_plan. There is no contradiction with the 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?

The description is long and dense, but nearly every sentence earns its place through routing guidance, return-shape detail, or scoring semantics. It is not a model of conciseness, and the front-door check pushes usage guidance ahead of the core definition, but it remains well organized and free of 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?

Given 8 parameters, 0 required fields, an output schema, and a large sibling set, the description is complete: it explains the ranking criteria, score interpretation, result fields, downstream drill-in path, and disambiguation from closely related tools. The few omitted details like mpp_pay and projection are already fully documented in the input schema.

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

Parameters5/5

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

Schema description coverage is 100%, but the description adds significant meaning beyond the schema: it enumerates criteria values with defaults, explains the special ai_ready semantics, gives the score formulas, and maps an example query to criteria, region, limit, and min_capacity_mw. This is well beyond the baseline expected for high schema coverage.

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 clear verb and resource: 'rank markets' returns a single ranked list across the 300+ market set. It actively distinguishes itself from sibling tools like execute_plan, get_market_intel, and analyze_site, so an agent can tell exactly which tool fits the ask.

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?

The description gives explicit when-to-use and when-not-to-use guidance: use rank_markets for a standalone 'rank markets by X' ask, but route siting questions to execute_plan, single-market deep reads to get_market_intel, and lat/lon scoring to analyze_site. It also includes a concrete example with matching parameter values, leaving no ambiguity.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent/destructive annotations by disclosing fail-closed constraint behavior, declared drops for expired/unknown candidates, weight renormalization when objectives are missing, always-declared missing_objectives, and the percentile fallback to relative in-batch scoring. No contradiction with annotations; the additional mechanics are exactly the kind of behavioral detail an agent needs.

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 description is dense but well organized: summary, use-case routing, scoring mechanics, candidate contract. It front-loads the core purpose and every later sentence addresses an edge case or decision an agent would otherwise get wrong. The length is proportionate to an 8-parameter tool with nuanced behavior.

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 the full invocation flow: candidate sourcing, objective construction, constraint semantics, normalization modes, shortlist re-ranking, and failure/drop notification. With an output schema present and the description enumerating key result fields (rank, objective_score, normalized{}, missing_objective, candidate_contract, excluded_incomplete), an agent has enough context to call and interpret the tool correctly.

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

Parameters5/5

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

Alhough schema coverage is 100%, the description adds critical semantic rules beyond the schema: signed weights mean +maximizes and -minimizes with a concrete example, absolute=true is only valid for fields already in 0-100, percentile has a specific baseline-field list plus fallback, and require_complete gets a recommendation for autonomous workflows. These are non-obvious invocation constraints that materially improve correct 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?

Opens with 'Deterministic multi-site ranking/optimization under constraints' and clearly states the normalization contract for comparing sites across analyze_site calls. It names the result shape (_entity=ranked_sites, rank, objective_score, normalized{}) and explicitly contrasts with analyze_site and get_refined_queue, so an agent can distinguish it from 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?

Explicitly says use for 'pick the best Nes under constraints'; instructs to use analyze_site for a single site and get_refined_queue for the candidate set. Also documents the shortlist_name alternative and warns when absolute=true should NOT be used, giving clear when-to-use and when-not-to-use guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations, the description discloses that the key is never returned over the wire, is emailed only to the bound address, and produces the same confirmation whether or not the key exists (enumeration-safe). These are substantive security and side-effect behaviors that help an agent predict outcomes.

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?

Densely worded and front-loaded with the primary action, safety guarantees, and use condition. The only minor redundancy is restating param info at the end after the schema already covers it, but no sentence 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?

For a single-parameter, non-nested tool with an output schema, this description covers purpose, usage condition, security caveats, and return value ('neutral confirmation'). 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 describes email as the human's bound address with the re-sending behavior. The description repeats this rather than adding new param-level meaning, 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 the specific action ('Recover a LOST DC Hub key'), the resource, and the mechanism (re-sends key to bound inbox). This clearly differentiates it from siblings like claim_free_key or bind_email.

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

Usage Guidelines4/5

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

Explicitly gives a use condition: 'Use this when your human had a key, lost it, and knows the email they bound it to.' It does not mention when not to use it or name alternatives, but the condition is clear and actionable.

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. Do NOT use for one-shot reads (get_news / list_transactions) or email alerts (set_market_alert); this is machine-to-machine push.

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"
stateNoFor permitting_change: optional US state filter, e.g. MN
marketNoFor new_deal_in_market: the market/region substring to watch, e.g. columbus
webhook_urlYesYour public HTTPS webhook endpoint (required)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A5/5.0
Behavior5/5

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

The description goes far beyond the annotations by revealing authentication requirements ('Requires a key'), delivery details (HMAC-signed webhook, X-DCHub-Signature), lifecycle behavior (watermark initialization, 5-failure auto-disable, ~2h evaluation), and constraints (public HTTPS only). This richly supplements the basic annotation hints.

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 description is dense but every sentence earns its place: definition, mechanism, examples, parameter semantics, secret handling, failure behavior, evaluation cadence, and alternatives. The structure moves logically from what it is to how to use it to what happens after registration.

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 mutation-like registration tool, the description covers prerequisites, parameter selection, return values, delivery signature, failure semantics, and operational cadence. With output schema indicated and return values named, nothing essential is missing for an agent to select and invoke this tool correctly.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds significant semantic value by explaining how each kind maps to its watch parameter, giving examples like 'new_deal_in_market' watching deals, and calling out that private/internal hosts are rejected. It also explains the returned {intent_id, secret} and its security importance.

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 ('Register a STANDING QUERY with webhook push') and distinguishes the mechanism from polling ('push, not poll'). It explicitly contrasts with one-shot reads and email alerts, making sibling differentiation immediate.

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 use cases ('notify my orchestrator on any new deal in Columbus') and explicitly says when NOT to use it: 'Do NOT use for one-shot reads (get_news / list_transactions) or email alerts (set_market_alert)'. It also names delete_standing_intent as the removal counterpart.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses the full workflow: the lead-register recording, that the provider receives only the company name and requirement, the accept/decline gating, that identities/contacts are shared only on acceptance, the identified-caller prerequisite, and the accept_terms requirement. Nothing material is hidden.

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 description is long but every clause earns its place: trigger, two modes, deal mechanics, privacy constraints, prerequisites, return value, follow-up via source_capacity, and an explicit exclusion. It is front-loaded with the primary use condition, then flows logically through the deal lifecycle.

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 16-parameter, privacy-sensitive deal tool, the description leaves little to guess: it states the return value (lead_id, status, next step), the auth prerequisites, the terms behavior, the conditional sharing flow, and how to follow up via source_capacity. Combined with 100% schema coverage and the output schema, an agent can 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% and each parameter already has a rich description, so the baseline is 3. The tool description adds value by grouping the fields needed for the standing-requirement mode ('pass capacity_mw or capacity_kw, markets, states, regions or countries, and timeline') and by clarifying that the deal sends the provider only the company name and the requirement — context that shapes how name, company, notes, and message should be populated.

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 opens with a specific trigger ('wants capacity behind a Capacity Source listing') and the standing-requirement alternative, then names the exact action ('registers a deal', 'records the request in its lead register'). It explicitly contrasts with save_site and set_site_alert, so an agent can distinguish it from siblings without inspecting their schemas.

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

Usage Guidelines4/5

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

It gives clear when-to-use context for both modes (slug vs omit slug) and an explicit when-not with named alternatives ('Do NOT use to save or monitor a site (use save_site / set_site_alert)'). However, it never contrasts its omit-slug standing-requirement mode with the sibling register_standing_intent, leaving that tool-selection decision to inference.

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)A
Read-onlyIdempotent
Inspect

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true; the description adds substantial behavioral context: async semantics (~35s wait, inline return vs task_id), polling mechanism, quota/rate limits (5 dossiers/day), key requirement, and cross-source synthesis with citations — all beyond what annotations convey. No contradiction.

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?

A single dense paragraph, but every sentence earns its place: purpose, quota, async behavior, params, examples, and exclusions. Slightly long, yet the async/polling semantics genuinely require this much explanation. Front-loaded with the core purpose before operational details.

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 async behavior, polling lifecycle, quota, and auth prerequisites, the description covers every operational aspect an agent needs: return modes, how to poll, limits, key requirement, examples, and when to route elsewhere. Output schema covers return-value details, so nothing critical 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 covers both params at 100%, so baseline is 3. The description adds genuinely useful semantics beyond the schema: the XOR relationship (question for new dossier, task_id for polling), the exact polling call signature (research_task task_id=<id>), and the min-12-char requirement in context of submission flow.

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: 'Commission an ASYNC, CITED research dossier from DC Hub's corpora' — an analyst brief synthesizing across sources, 'not a lookup'. Explicitly distinguishes itself from search_intelligence / semantic_search by naming the alternatives it is not.

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 ('write me a cited brief on this'), a concrete try-it example, an explicit exclusion ('Do NOT use for a single fact'), named alternatives, prerequisites (claim_free_key, 5/day limit), and the polling flow. 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.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses critical behaviors beyond annotations: it WRITES to the account, keyless calls return auth_required, the response contains a saved site id, passing market snapshots a DCPI baseline, and the returned id can be fed to set_site_alert for monitoring. These are non-obvious side effects an agent must know, and they align with readOnlyHint=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?

The description is long but every major block earns its place: auth warning, purpose, parameter summary, snapshot behavior, follow-up workflow, example, and exclusions. There is minor redundancy between 'track it across sessions' and 'persistent shortlist an agent can revisit', but overall it is well organized and front-loaded with the most critical warning.

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 mutating tool with auth requirements, persistent state, and side effects, the description is complete: it covers prerequisites, exact inputs, return value, downstream integration with set_site_alert, and exclusions. The output schema covers the return format, so the description's job is done.

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% and each parameter is documented, but the description adds significant meaning: it flags lat+lon as the essential inputs, explains that passing market triggers the DCPI baseline snapshot, and the example maps concrete values to parameters. This goes beyond the bare schema definitions.

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 opens with a clear verb+resource: 'Save a candidate data-center site to your DC Hub account to track it across sessions.' It also distinguishes itself from siblings by explicitly naming list_saved_sites, export_dataset, and score_facility as tools not to use for reading back, downloading, or scoring.

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?

Usage is explicit and actionable: it instructs agents to call claim_free_key FIRST if keyless, provides a concrete example invocation, and states when NOT to use the tool with named alternatives (list_saved_sites, export_dataset, score_facility). The 'Answers...' line gives natural-language trigger phrases.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses key behaviors beyond annotations: persistence across conversations, API-key privacy/scoping, snapshotting objectives and percentile score, optional reuse of ranked metrics, and the prerequisite of claim_free_key. None of this is present in the sparse annotations, and it directly informs correct invocation.

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 description is dense but every sentence earns its place: purpose, behavioral guarantees, usage scenario, pairing, minimal call, optional enrichment, and auth prerequisite. The most important statefulness concept is front-loaded and the details flow logically.

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 stateful mutation tool with 4 parameters, an output schema, and minimal annotations, the description covers everything an agent needs to call it correctly: persistence, auth, required fields, optional fields, example call, and post-save workflow with get_shortlist. No significant gap remains.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds substantial value: it gives a MINIMAL call example with site={site_ref, lat, lng, capacity_mw}, explains that objectives are optional and what happens if omitted, and clarifies how richer metric fields get reused during re-scoring. This is far beyond the baseline schema 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?

The description opens with a specific verb and resource: 'Save a site into a PERSISTENT, named shortlist that survives across conversations.' It clearly distinguishes itself from plain saves by emphasizing persistence, API-key scoping, and re-scoring behavior, and it names get_shortlist as the complementary tool.

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 clear usage context: 'Use to build a durable siting shortlist across days/weeks' and explains the list is scoped to the API key. It also tells the agent to pair with get_shortlist for re-scoring, but it does not explicitly discuss when not to use it versus alternatives like save_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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior; the description adds useful context around the output behavior (composite, tier, peer comparison, per-dimension detail) and the independent nature of the score. This adds value beyond the annotations without contradicting them.

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 description is dense but every sentence earns its place: use case, example, parameters, returns, and exclusions. The most important information is front-loaded, and the do-not-use guidance prevents costly mis-invocation.

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 moderate-complexity scoring tool, the description covers when, how, what is returned, and which sibling tools to use instead. The output schema exists, so the return values do not need deeper documentation in the description.

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 with a concrete power-weighted example and the full weighting options including the default. It also claims facility_id or name is accepted, which is an extra semantic not present in the schema and may indicate schema under-specification.

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: scoring ONE existing facility with a 0-100 grade across 7 named dimensions. It also names the sibling tools it is not (analyze_site, compare_sites, find_alternatives), so an agent can disambiguate before 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 explicitly gives the when-to-use condition (independent grade for one existing facility) and a concrete example. It lists three exclusions with their alternatives: raw parcel, multi-site comparison, and similar-site discovery.

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

FRONT DOOR CHECK — if the ask is "find MW in " or otherwise wants power / fiber / water / verdict context ATTACHED to the hits, call execute_plan(intent="<the user's question, unchanged>") instead of hand-chaining this with three more tools. If the ask is a plain inventory lookup — which facilities match these filters — search_facilities IS the right call and costs one round trip; the planner would add steps and latency for nothing. Search 24,600+ global data center facilities across 170+ countries — by location (country/state/market), capacity (MW), operator, fiber connectivity, status (operational/under-construction/planned), or DCPI verdict. Returns name, provider, lat/lon, power_mw, fiber count, market_slug, status. Answers "which data centers are in Virginia", "who has capacity in this country". Try: search_facilities country=US state=VA min_capacity_mw=10. Note: status is RETURNED but is not a filter — there is no status or min_mw parameter; to filter by construction stage use get_pipeline. Use this to find EXISTING facilities; do NOT use for the forward-looking construction pipeline (use get_pipeline) or for the full profile of one facility (use get_facility).

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
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
operatorNoOperator/provider company name, e.g. Equinix, Digital Realty
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.
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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
successNotrue when the search executed
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
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_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and not destructive, so the safety profile is covered. The description adds meaningful behavioral nuance beyond that: status is returned but not filterable, there is no status or min_mw parameter, and the tool is a single round trip versus the heavier planner path. This helps the agent predict behavior without contradicting 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?

The description is longer than average but front-loaded with the critical routing decision, followed by scope, example, and exclusions. Every section earns its place; the only minor excess is promotional phrasing like '24,600+' and '170+ countries,' which is still useful scope 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 12-parameter tool with full schema coverage, an output schema, and rich sibling context, the description is complete: it covers routing, filters, return fields, example usage, and explicit exclusions. The agent has everything needed to decide whether to call this tool and how to construct a valid call.

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 with a concrete example call ('country=US state=VA min_capacity_mw=10') and an explicit warning about absent parameters (status, min_mw) to prevent hallucination. This exceeds the schema's plain definitions.

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: 'Search 24,600+ global data center facilities' by concrete filters, and enumerates return fields. It clearly differentiates from siblings by saying plain inventory lookups are right for search_facilities while execute_plan, get_pipeline, and get_facility handle adjacent cases.

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?

Usage guidance is explicit and actionable: it tells the agent to call execute_plan when context like power/fiber/water/verdict is needed, and to use search_facilities for plain inventory matches. It also names get_pipeline for construction-stage filtering and get_facility for full profiles, covering both when-to-use and when-not-to-use.

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 and per-market DCPI analysis narratives — 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 human-readable corpus names (news | deals | facilities | market_narratives); semantic_search takes q plus the raw table names. Call ONE of them, not both. Params: query (required, natural language); corpus (optional CSV of the four 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

While annotations already declare readOnlyHint and idempotentHint, the description adds substantive behavioral context: read-only writes nothing, repeat calls return same records, anonymous results are TRIMMED PREVIEW, session X-API-Key hydrates full depth, and free tier is capped per day. It also reveals the key/authentication requirement nuance and points to claim_free_key and unlock_more_data, far exceeding 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?

The description is dense but well-organized with labeled sections (Params, BEHAVIOUR, ACCESS, and the exclusion note). Every sentence carries functional weight; however, it is fairly long and partially repeats schema content, so it is not as lean as the highest tier of descriptions.

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 the output schema exists and annotations cover safety/hints, the description supplies all remaining essentials: corpus options, parameter semantics, behavior, access limitations, rate caps, and clear routing to alternatives. An agent has everything needed to decide whether and how to invoke 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 the schema already documents each parameter. The description adds meaningful usage nuance: query is natural language with a concrete example, corpus can be a CSV of human-readable names, limit is bounded 1-15, and q is explicitly an alias. This reinforces and slightly extends the schema, though much is redundant with 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?

The description opens with a specific verb and resource: semantic search over DC Hub's live intelligence corpus, naming the corpora (industry news, M&A deals, discovered facilities, DCPI narratives) and the outcome (most relevant records with citable source fields). It also distinguishes itself from semantic_search by calling out the alias relationship and different parameter shape, so an agent can tell them apart without inspecting 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?

The description gives explicit when-to-use guidance: 'Do NOT use when you can filter exactly' and names the exact sibling tools (search_facilities, list_transactions, get_news) as alternatives for structured filters. It also warns 'Call ONE of them, not both' regarding semantic_search, leaving no ambiguity about selection.

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=) is Pro. 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" (Pro)
destinationNoFor channel="webhook", the https URL to POST alerts to (Pro); ignored for email (forced to bound address)

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations say readOnlyHint=false, indicating a state-changing operation, and the description is transparent about the subscription side effect. It discloses that email destination is forced to the bound address, that webhook requires Pro, that destination is ignored for email, and the bind_email prerequisite — all beyond what annotations express. No contradiction with the 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 core purpose in the first sentence, then layered details (tiers, prerequisite, examples, exclusion). Every sentence earns its place, though it is dense and slightly long; the information density justifies the length.

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 purpose, tier constraints, prerequisite, parameter guidance, a try example, and the read-vs-subscribe distinction. An output schema exists so return values needn't be explained. Minor omissions only: how to unsubscribe/list alerts and what the webhook payload looks like.

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 params are already documented; the description adds tier semantics (email=free, webhook=Pro), clarifies that destination is ignored for email, and provides a working example showing valid slugs and a webhook URL. It reinforces but doesn't fully replace the schema — hence above baseline but not 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?

Opens with a specific verb+resource: 'Subscribe to movement alerts for a DCPI market' and states exactly what triggers a notification (Excess-Power / Constraint score moves). It explicitly differentiates itself from get_market_dcpi_rank by saying 'Do NOT use to read a market right now... this SUBSCRIBES to future movement', and the sibling context makes it distinct from set_site_alert/set_shortlist_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 the alternative tool (get_market_dcpi_rank) and the condition that selects between them (read now vs subscribe to future movement). It also states the prerequisite (call bind_email first for email delivery), gives natural-language triggers ('tell me when this market moves'), a concrete try example, and tier conditions for email vs webhook.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false, etc.), the description discloses when the alert fires, how it is evaluated (after each daily baseline refresh), how it delivers (webhook and/or email), and that it is scoped to the API key. No contradiction with the 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?

The description is front-loaded and compact, with the most important action and distinction in the first sentence. A small amount of redundancy exists between 'stop polling' and the 'wake me when it matters' use-case line, but every sentence still contributes useful context.

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 alert-setting tool with an output schema, the description provides the full behavioral contract: trigger conditions, evaluation cadence, delivery mechanisms, scope, and intended use case. Nothing essential for the agent to select and invoke the 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 schema already documents all four parameters (100% coverage), so the baseline is 3. The description adds the key relationship between parameters — the OR condition between percentile_below and delta_below — and clarifies the saved-shortlist source, but it largely restates examples 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?

The description opens with a specific verb and object, 'Set a DRIFT ALERT on a saved shortlist,' and clarifies the monitoring scope ('national standing moves materially'). It also names the exact trigger conditions and the resource type (a saved shortlist), which distinguishes it from the sibling site/market alert tools.

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 clear usage context: the alert is for stopping polling, acting as a 'wake me when it matters' loop for long-running siting campaigns, and is scoped to a saved shortlist. It does not explicitly name set_site_alert or set_market_alert as alternatives or state when not to use them, so it falls 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.

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). Pro 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A5/5.0
Behavior5/5

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

The description goes well beyond annotations by explaining the delivery behavior, free-tier email restrictions, the fact that the alert monitors an already-saved site, and the return shape. It also gives the underlying event semantics (scpre move, capacity move, new facility), which 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.

Conciseness5/5

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

The description is long but every sentence serves a purpose: front-loaded purpose, then constraints, workflow, parameters, example, return value, and exclusions. The structure is logical and the concrete example saves an agent from guessing call syntax.

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 stateful alert-arming tool with prerequisites and tier differences, the description covers prerequisites, parameters, defaults, return format, and exclusions. An agent has everything needed to invoke correctly without additional lookups.

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

Parameters5/5

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

Even though the schema already covers all four parameters, the description adds practical meaning: saved_site_id is tied to save_site/list_saved_sites, threshold is a number of points/MW, presence of a concrete example call, and the ordering with bind_email. This is substantial added value, not just repetition.

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 ('arm an email watch'), a precise resource ('a site you already saved'), and the triggered behavior (email on DCPI/grid/facility changes). It also explicitly distinguishes itself from set_market_alert and save_site, so an agent can select it correctly.

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?

Includes explicit sequencing guidance ('call save_site first ... then set_site_alert'), a note to bind_email first on the free tier, and clear do-not-use directives for market alerts or new site saves. This fully tells an agent when to use this tool versus alternatives.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is fully consistent with those. Beyond annotations, it discloses rich behavioral context: it returns baseline vs. scenario composite, component breakdown, and 'the EXACT formula/weights in every response,' plus the keyless preview limitation and the live-key behavior (up to 25). It even clarifies the composite is 'deliberately NOT the DCPI,' adding transparency about what the result is not.

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 description is long but every sentence earns its place. It front-loads the core purpose, then compresses parameter semantics, output contents, access tiers, example usage, and exclusions into a compact block. There is no fluff or repetition of schema descriptions — only additive guidance.

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 7 optional parameters, no required params, and rich annotations, the description covers all decision-relevant context: the delta requirement, per-market vs. top-N behavior, output structure, formula transparency, key-based access limits, and explicit sibling routing. The presence of an output schema means return values don't need enumeration, and nothing critical is missing for an agent 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 description coverage is 100%, so the schema already documents each parameter. The description adds meaningful usage semantics on top: all params are optional but 'pass at least one delta,' top_n is 'ranked by |score change|' with default 10 and max 25, and delta params carry intuitive example values (e.g., avg_kwh_cents_pct=30). This goes beyond restating parameter names, though the schema itself already carries most of the burden.

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 opens with a specific verb and resource: 'Counterfactual WHAT-IF re-scoring of 300+ DC Hub power markets under YOUR explicit deltas.' It clearly states the tool's unique job and reinforces distinctiveness by noting 'only DC Hub holds the underlying components.' This differentiates it from siblings without needing to read their 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?

The description explicitly tells the agent when NOT to use it: 'Do NOT use for the present-day ranking (use rank_markets) or trajectory extrapolation (use predict_market_trajectory); this answers explicit hypotheticals.' It also provides concrete example invocations and a try-me example ('Try: simulate_scenario avg_kwh_cents_pct=30 top_n=10'), leaving no ambiguity about when to call this tool vs. alternatives.

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 DC Hub 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.
mpp_payNoAutonomous payment (Stripe MPP), step 1: set true to receive a signed $0.50 payment challenge for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.
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
mpp_credentialNoAutonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay $0.50 for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

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, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: it reveals a free-preview versus paid-key tier ('with a paid key, the synthesis decision layer') and frames the call as a single find->rank->shortlist->verdict flow, which sets accurate expectations about scope.

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 and includes a concrete example plus use-case exclusions. It is slightly repetitive with 'end-to-end', 'find->rank->shortlist->verdict', and 'this runs the full find to rank to shortlist to verdict flow', but each sentence still earns its place.

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 tool with 9 parameters, an output schema, and rich annotations, the description covers the main invocation pattern, the paid-tier behavior, and key exclusions. It does not need to explain return values because an output schema exists. Minor gaps like the default verdict filter are handled by the schema, so the description is sufficiently complete for an agent to 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%, so the schema already documents all nine parameters, including aliases and the MPP payment flow. The description adds an example (capacity_mw=100 region=TX max_months=24) and high-level mappings like 'capacity target + geography + deadline', but does not add meaning beyond what the schema already 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?

The description names a specific verb and resource: 'Guided end-to-end data-center site selection' over the 'DC Hub Power Index', returning a ranked shortlist and decision layer. It clearly differentiates from siblings by naming analyze_site and get_dchub_recommendation as alternatives for different scenarios.

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 criteria are stated: 'Give a capacity target + geography + deadline and get a ranked shortlist'. It also gives a worked example (capacity_mw=100 region=TX max_months=24) and explicit exclusions with named alternatives: 'Do NOT use for a single known parcel (use analyze_site) or an open-ended where-should-I-build question (use get_dchub_recommendation)'.

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, including sites that are not publicly marketed, 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. 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"
available_byNoBrowse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD
delivery_typeNoBrowse filter: how the capacity is delivered: land, powered_shell, turnkey or colocation

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotaNoCaller quota state (remaining calls, tier) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds substantial behavioral context beyond that: how capacity matching actually works (contiguous_kw vs min_contract_kw vs headline total), what the response contains (listing cards, filters applied, program status), the authentication/unlock flow for detailed specs, and the condition under which provider identity is released. This is rich, non-redundant disclosure.

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 dense and front-loaded with the primary use case, but it is a single long wall of text with no paragraph breaks or bullet structure. It contains some redundancy with the schema's parameter descriptions, especially around contiguous_kw/min_contract_kw. Despite this, every section earns its place for a tool this complex, and no information is gratuitous.

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 10 optional parameters, an output schema, and rich sibling context, the description is remarkably complete. It covers the search intent, filtering semantics, auth-gated detail behavior, return contents, program status, and exclusions. An agent has everything needed to decide when and how to call 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 a baseline of 3 applies. The description adds value beyond the schema by giving a concrete example ('500 kW anywhere in Europe' → min_kw=500, region=europe) and explaining how min_kw/min_mw relate to actual deliverable capacity rather than headline totals. It reinforces the semantics of region aliases and location, though much of this is also present in the parameter descriptions themselves.

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 opens with a specific verb and resource: 'Use when your human needs data-center CAPACITY to buy or lease: search DC Hub Capacity Source'. It names the exact criteria (size, location) and explicitly distinguishes itself from sibling tools, saying 'Do NOT use for the public facility directory (use search_facilities) or for completed M&A (use list_transactions)'.

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?

The description states exactly when to use the tool ('Use when your human needs data-center CAPACITY to buy or lease') and gives explicit when-not-to-use guidance with named alternatives. It also provides a concrete example mapping natural language to parameters and explains the conditions for using the slug parameter, covering when a signed-in human will see full specs versus a card.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Description fully discloses behavioral traits beyond annotations: double opt-in, confirmation email link, consent safety, no marketing flag, one-click unsubscribe, and return shape {ok, sent, message}. Annotations only provide boolean hints and title, so the description carries and satisfies the transparency burden.

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 longer than average but every section earns its place: purpose, consent behavior, usage condition, params, return, alternative. It front-loads the core purpose, though the density could be tightened without loss.

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 mutation-style tool: it covers prerequisites (human consent), side effects (email sent, confirmation required), return format, and alternative implementation. Output schema exists, so return values need no deeper explanation.

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's param summary restates email/source without adding meaning beyond the schema; the consent context is already captured in the schema field description for email.

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?

Description states a specific verb ('Subscribe'), resource (DC Hub's weekly digest), and enumerates the digest contents. It distinguishes itself from hand-building the POST endpoint and implicitly from sibling alert tools by framing itself as a digest subscription rather than an 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 when-to-use: 'Only call once your human shares their email and wants a weekly email.' It names the alternative ('hand-building POST /api/v1/opt-in/request') and states preference over it, giving an agent clear routing guidance.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond readOnly/idempotent/destructive annotations, the description richly discloses behavior: it returns two tiers, re-scores against the drifted slot's objectives, computes drift_is_systemic, delegates reduction to DC Hub, and constrains candidates to the current shortlist and API key. This is far more than annotations alone provide.

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 dense but mostly earns its length: trigger, output structure, systemic-drift caveat, reduction model, and sourcing/videning path are all useful. It loses one point for jargon like 'Phase 5' and 'DC Hub' that is not elaborated, and for a somewhat sprawling single paragraph.

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 decision-support tool, the description covers trigger, outputs, interpretation guidance, source pool, and API scoping. With a full output schema and annotations present, nothing essential to correct invocation or interpretation 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 real value by explaining that drifted_site_ref drives re-scoring against that slot's objectives and that omitting it defaults to the lowest-scoring site, plus constraining shortlist_name to the pool candidates are drawn from.

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 action — suggesting replacement candidates when a saved shortlist site drifts — and sharply scopes the resource to 'this shortlist only.' It distinguishes itself from general search/find tools by making the trigger and shortlist-bound source 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?

It clearly states when to use the tool: when a saved site's national standing drops, surfaced by get_shortlist refresh or set_shortlist_alert firing. It does not explicitly name a when-not-to-use alternative, so it stops short of a 5, but the trigger context is strong.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description discloses that the tool is free, requires no key, makes no network call, and never resolves or invents a value. It also explains the as_of omission behavior, the RETRIEVED fallback, and the per-layer licensing nuance, which 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 description is densely packed and front-loaded with the usage trigger; the licensing explanation, omission behavior, and anti-lookup warning each earn their place. The long run-on sentences and repeated emphasis could be tightened, but there is no meaningful 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?

For a five-parameter, no-required tool with an output schema, the description covers invocation, return field names, edge cases such as missing as_of and dropped URLs, and disambiguation from the many retrieval siblings. An agent has enough information to call it correctly without needing additional context.

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 even though the description restates all five parameters at a high level. It adds the workflow principle 'pass what you read off the response' and notes that layer decides the licence, but it does not add new syntax, formats, or enum semantics 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?

The description states a precise verb and resource: it returns one paste-ready attribution line for a value about to be quoted, with the layer-correct licence. It clearly distinguishes itself from data-retrieval siblings by saying it cites a figure you already have rather than looking one up.

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 trigger: 'Use right before you QUOTE a DC Hub figure to a human.' It also gives an explicit exclusion: 'Do NOT use to look a figure UP (call the data tool first); this cites a figure you already have.' This tells the agent exactly when to invoke it and what to do instead.

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. Cheapest start: 💳 $10 one-time = 1,000 API credits (1 credit per paid-tool call; the 13 heavy analysis tools use 5 each; no subscription). Also Developer $49/mo · Pro $99/mo. Want the FREE tier instead (no payment, 10 calls/day, all tools)? Call claim_free_key. 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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (which are minimal and non-contradictory), the description discloses the checkout binding behavior, the email fallback, the response fields (next_call_full_after_checkout, after_checkout), and pricing details. It fully explains side effects and flow without contradicting the schema.

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 description is compact yet information-dense. It front-loads the trigger condition, then behavior, then pricing/alternative, with no filler. Every sentence contributes actionable guidance.

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 pricing, binding logic, and fallback behavior, the description covers all critical aspects: when to use, what it returns, how checkout binds, what happens without credentials, the free alternative, and the param meaning. Nothing an agent needs to 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% (the sole optional 'reason' param is documented). The description adds extra context about the param's purpose (so the human sees why it matters), which is useful but not strictly necessary. Baseline 3 for high coverage, with a bonus for the added semantic explanation.

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 opens with a clear purpose: 'Unlock DC Hub's full depth' and specifies concrete triggers (partial preview, locked tool, human wants complete dataset). It explicitly contrasts with the free-tier sibling claim_free_key, so an agent can distinguish it 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?

It gives explicit when-to-call conditions and names the exact alternative (claim_free_key) for the free tier. No inference is required to choose between the two tools.

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

Use when a human asks how DC Hub compares to other data-center data sources — DataCenterHawk (DCHawk), DC Byte, Data Center Dynamics (DCD), Data Center Frontier (DCF), Baxtel, datacenters.com — or asks "why should I use DC Hub / is it better than / what can you give me a PDF or directory can't?". Returns DC Hub's honest, source-verified differentiators (agent-native MCP access, live multi-continent grid & energy telemetry, the proprietary daily DCPI index (and its DCGI gas sibling, withdrawn 2026-08-08 rather than published wrong, and restored 2026-08-30 once every defective term was repaired), CC-BY-4.0 citation rights on DCPI scores & grid analysis, 24,600+ facilities + 330,000+ mapped power/grid/gas/fiber assets) each with a proof URL, a citation line, plus the canonical head-to-head comparison pages. Free, no key required. Optional: competitor= for that vendor's direct comparison-page link. Do NOT use to query infrastructure data itself (use the data tools); this answers positioning / "how do you compare" questions with citable facts.

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) when available.
_entityNoPayload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.
citationNoMachine-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.
provenanceNoCollection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.
_front_doorNoIn-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.
_return_loopNoSuggested next-session delta call (get_changes since=24h) so you pull only what changed.
site_evaluation_handoffNoPre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds behavioral context beyond that: it returns proof URLs and citation lines, is free/no-key, and cites the DCPI index's withdrawal/restoration history as a transparency differentiator. No statement contradicts the 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?

The description is front-loaded with the trigger condition and then lists concrete outputs, restrictions, and the optional parameter. It is dense and long, but each clause earns its place; only the parenthetical DCPI/DCGI history risks overloading the reader.

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-only tool with an output schema, the description covers trigger, output contents, licensing/citation behavior, no-key access, and exclusion from data-query use. An agent has everything it needs to decide whether to call it and what to pass.

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's mention of 'competitor=<name>' and 'direct comparison-page link' largely restates the schema. It reinforces that the parameter is optional and shows usage, but adds no meaning 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?

The description opens with a specific trigger ('Use when a human asks how DC Hub compares...') and a concrete return value ('Returns DC Hub's honest, source-verified differentiators...'). It explicitly distinguishes itself from data-query tools with 'Do NOT use to query infrastructure data itself', which separates it from the many get_* 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?

It states exact conditions ('asks how DC Hub compares... / why should I use DC Hub / is it better than X') and gives an explicit exclusion ('Do NOT use to query infrastructure data itself (use the data tools)'). It also tells the caller when to add the optional competitor parameter, leaving little 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. 1 tool update
    • Changedplan_query1 field 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 → 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). 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."
  2. 1 tool update
    • Changedplan_query1 field 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). Distinct from schema_version."
  3. 2 tool updates
    • Addedget_infra_projects
    • Changedplan_query1 field changed
      • 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."

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects Claude to live data-center, power & grid intelligence data, enabling query and citation of over 21,000 facilities, power markets, grid telemetry, and more.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Live and historical electricity prices, demand, generation mix and carbon intensity for 25 grid zones (US, Europe, GB, Australia). Hosted endpoint plus local stdio bridge; free sample mode, free API key, or x402 pay-per-call.
    6
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides deterministic, standards-based calculations for data center critical power infrastructure. Enables site selection, generator sizing, UPS sizing, NFPA 110 compliance, and more via 50+ AI agents and 8 compound chains.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides real-time grid carbon intensity, power generation breakdown, and carbon-intensity forecasts for any zone or lat/lon location.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.