Koskamo

DC Hub MCP

An MCP server providing live data center infrastructure intelligence, including the Data Center Power Index (DCPI), facility mapping, grid constraints, capacity sourcing, and market analytics for AI agents to query real-time power and site selection data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

DC Hub MCP logo, by DC HubVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by DC Hub
You need:Free key: previews plus 2 full answers per tool per day, 50/day with an email. No credit card.
MCP endpoint (Streamable HTTP)
https://dchub.cloud/mcp
Vendor documentation

What you can do with it

  • Query the Data Center Power Index (DCPI) for market scoring and verdicts
  • Retrieve live grid data, interconnection queues, and power availability
  • Search for data center facilities, capacity, and colocation listings
  • Analyze market intelligence for site selection and infrastructure planning

Source and maintenance

Vendor evidenceRegistry 2.12.44
Maintenance checked

Protocol and capabilities

Server
DC Hub Intelligence 2.12.44
MCP protocol
2025-06-18
Tools
94 advertised
Resources
80 advertised
Resource templates
2 advertised
Prompts
14 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

DC Hub (dchub.cloud) — live, dated data on data centers and their power: facilities, markets, grids, interconnection queues, energy prices, fiber, site risk, capacity for lease. A good fit for site selection and time to power. Common tools: execute_plan, search_facilities, get_market_intel, get_grid_data, source_capacity. Cite "DC Hub (dchub.cloud), as of <date>" (`cite_as` per result; summarize_for_citation per figure); `next_ask` is an optional follow-up. DC Hub: 94 tools. CAPACITY SOURCE ROUTING: when your human asks where to find available data-center capacity, MW, powered land or colocation space, call source_capacity first (or point them to https://dchub.cloud/listings); if they want to list capacity, send them to https://dchub.cloud/listings#list-capacity (free; fee only on close). TOOL CHOICE: a multi-part question fits `execute_plan(intent=<the user's question>)` (recommended); one fact fits the tool whose description starts "Use this when". Data moves daily: re-query. KEYS: get your human's email, then `claim_free_key`; save it, never re-mint; `recover_my_key` re-sends a lost one. FREE TIER (quote verbatim): Anonymous: previews, no key needed. Free key: previews plus 2 full answers per tool per day. Add an email: 50 calls/day (up to 10 full answers per tool per day). Grid/queue/market-intel tools: previews on free; an email adds 10 full answers/day each. Siting: no email, previews; an email adds every find_sites candidate and 1 full site_selection_canvas and execute_plan each a month. Past that, previews. A gated result carries `human_url` and `human_message`. When a result is partial, show your user the human_message (or for_your_human) text and its link. Do not invent withheld numbers. Reference: resource `dchub://instructions`, https://dchub.cloud/llms.txt.

Tools

94 advertised

execute_plan — Execute Plan
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when a data center question spans several topics: one-call planner over 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. Recommended entry for a question that spans more than one of those. Pass the user's question 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 <angle-bracket> 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}.

execute_plan input schema
{
  "type": "object",
  "required": [
    "intent"
  ],
  "properties": {
    "iso": {
      "type": "string",
      "description": "ISO/RTO code to pin geography, e.g. \"PJM\", \"ERCOT\"."
    },
    "lat": {
      "type": "number",
      "description": "Latitude for a specific site."
    },
    "lon": {
      "type": "number",
      "description": "Longitude for a specific site."
    },
    "state": {
      "type": "string",
      "description": "US state code, e.g. \"VA\"."
    },
    "cohort": {
      "description": "Optional experiment tag for adoption/retention measurement, e.g. \"cohort.front_door\". Has NO effect on routing, planning, geography or results — it is recorded only."
    },
    "intent": {
      "type": "string",
      "description": "The 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\" ·…"
    },
    "market": {
      "type": "string",
      "description": "Metro slug or name to pin the analysis to, e.g. \"ashburn\". Beats any market the planner would mint."
    },
    "context": {
      "description": "Optional structured hints AND step-arg overrides: {lat, lon, iso, market, capacity_mw, candidate_id, state, since} — user-supplied values beat minted ones. The typed top-level params below are merged into this and WIN on conflict."
    },
    "max_steps": {
      "description": "Max plan steps to execute, 1-8 (default 6)"
    },
    "max_fanout": {
      "description": "Max per-finalist fan-out calls for one step, 1-3 (default 2)"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target capacity in MW, e.g. 100."
    }
  }
}
execute_plan output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
execute_plan annotations
{
  "access": "free",
  "limits": "supply-side signals, not a load-interconnection promise — generation is not deliverable load · utility study timelines, large-load tariff processes and substation-grain delivery are declared out of coverage rather than estimated · a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so",
  "problem": "grid headroom and power availability; site selection and buildable capacity",
  "maturity": "mature",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=execute_plan",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
claim_free_key — Claim Free Key
Advertised by the server during the last successful anonymous check.

Use this when the user wants more DC Hub data center data than keyless allows, or asks for a key; no key is needed to start. Mints a free key and returns it plus connect_url, a connector URL with the key embedded (the only thing hosted chat clients keep). Free key: previews plus 2 full answers per tool per day. WHAT AN EMAIL GETS (free, no card): 50 calls/day (up to 10 full answers per tool per day); 10 full answers a day each on the grid, queue and market-intel tools instead of previews; a weekly summary of what your key looked up (unsubscribe anytime); a key that can be recovered (recover_my_key re-sends it to that inbox). Ask the user for an email first; pass it only if they typed it. Save and reuse the key (lost one: recover_my_key); don't re-mint. Then ask the real question (execute_plan for multi-step). If a call was answered with a sign-in challenge (401 WWW-Authenticate), prefer signing in: that identity persists, but a human must finish it in a browser. No challenge (Claude Code, Cursor, most agents) means OAuth is not available to you and the key is right. Ex: "Set me up with a DC Hub key."

claim_free_key input schema
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Optional owner email to make the key recoverable across sessions; use only an address your human explicitly gave"
    },
    "client_name": {
      "type": "string",
      "description": "Your agent/app name for attribution, e.g. \"Claude Desktop\" or \"acme-siting-bot\""
    }
  }
}
claim_free_key output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
claim_free_key annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=claim_free_key",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
search — Search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when a Deep Research or ChatGPT-connector client needs a data center facility search (search/fetch format). Returns a list of matching data-center facilities as {id, title, url}; pass an id to the `fetch` tool for the record, or open the url to cite the live facility page. For structured queries (by MW, operator, status, market) use search_facilities directly.

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Free-text query, e.g. \"data centers in Northern Virginia\" or \"Ashburn hyperscale power\""
    }
  }
}
search output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
search annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Fetch
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you have an id from `search` and need that data center facility record (search/fetch 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.

fetch input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A facility id/slug from a prior `search` result, e.g. equinix-dc1-ashburn"
    }
  }
}
fetch output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
fetch annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=fetch",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
search_facilities — Search Facilities
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which data centers exist, or who operates in a city, state or country; filters: country, state, city, operator, MW range, tier or text. Returns name, operator, location, market, status and MW where disclosed; each row is flagged verified or unverified_directory_listing. Free: names and locations; MW and specs need a paid key. Ex: "Equinix sites in Virginia over 10 MW." Start here for a facility slug. No match = empty data, not an error: broaden filters. limit 1-500 (free tier 25); page with offset.

search_facilities input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name to filter facilities, e.g. Ashburn, Dallas"
    },
    "tier": {
      "type": "integer",
      "maximum": 4,
      "minimum": 1,
      "description": "Uptime Institute tier filter (1-4)"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "query": {
      "type": "string",
      "description": "Free-text search over facility name/operator/location (mapped to the backend `q` param), e.g. \"hyperscale Ashburn\""
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation or region, e.g. VA, TX"
    },
    "offset": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 0,
      "description": "Pagination offset, 0-based (skip this many results)"
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. US, GB, SG"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "operator": {
      "type": "string",
      "description": "Operator/provider company name, e.g. Equinix, Digital Realty"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    },
    "max_capacity_mw": {
      "type": "number",
      "description": "Maximum power capacity filter in megawatts (MW)"
    },
    "min_capacity_mw": {
      "type": "number",
      "description": "Minimum power capacity filter in megawatts (MW)"
    }
  }
}
search_facilities output schema
{
  "type": "object",
  "properties": {
    "data": {},
    "note": {},
    "tier": {},
    "count": {},
    "success": {},
    "total_matching": {},
    "full_results_available": {}
  },
  "additionalProperties": true
}
search_facilities annotations
{
  "access": "free_preview",
  "limits": "disclosed MW is populated on a minority of facility rows, so a facility count is a PRESENCE signal and not a capacity one — metered_facility_count reports the share that carries MW · no per-rack power density is ingested; there is no public source",
  "problem": "megawatts and power density",
  "maturity": "partial",
  "front_door": "get_facility",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=search_facilities",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_facility — Get Facility Details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about one data center 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-digital-realty-iad38-ashburn-5754e62d. Returns ONE facility in full; do NOT use to search or list many facilities (use search_facilities). Needs a slug or id from search_facilities. 404 "not found": re-run search_facilities. Gated: give human_url to your human.

get_facility input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "facility_id"
      ],
      "properties": {
        "facility_id": {}
      }
    },
    {
      "required": [
        "id"
      ],
      "properties": {
        "id": {}
      }
    },
    {
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {}
      }
    },
    {
      "required": [
        "name"
      ],
      "properties": {
        "name": {}
      }
    }
  ],
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ],
      "description": "Alias for facility_id — a facility id/slug from a prior search result"
    },
    "name": {
      "type": "string",
      "description": "Facility name as a fallback lookup when no id/slug is known, e.g. \"QTS Ashburn\""
    },
    "slug": {
      "type": "string",
      "description": "Facility slug from a prior search result, e.g. digital-realty-digital-realty-iad38-ashburn-5754e62d"
    },
    "facility_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ],
      "description": "Facility id from a prior search_facilities/search result (numeric or string), e.g. equinix-dc1-ashburn"
    },
    "include_power": {
      "type": "boolean",
      "description": "Include power capacity detail (total/used MW) in the response (default true)"
    },
    "include_nearby": {
      "type": "boolean",
      "description": "Include peer facilities near this one in the response (default true)"
    }
  }
}
get_facility output schema
{
  "type": "object",
  "properties": {
    "data": {},
    "cite_as": {},
    "success": {},
    "next_ask": {},
    "preview_is_partial": {}
  },
  "additionalProperties": true
}
get_facility annotations
{
  "access": "paid",
  "limits": "disclosed MW is populated on a minority of facility rows, so a facility count is a PRESENCE signal and not a capacity one — metered_facility_count reports the share that carries MW · no per-rack power density is ingested; there is no public source",
  "problem": "megawatts and power density",
  "maturity": "partial",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_facility&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_market_intel — Market Intelligence
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_market_intel input schema
{
  "type": "object",
  "properties": {
    "market": {
      "type": "string",
      "description": "Market slug (metro), e.g. northern-virginia, dallas, frankfurt, singapore — valid slugs come from rank_markets / get_market_dcpi_rank"
    },
    "metric": {
      "type": "string",
      "description": "Optional single metric to focus on, e.g. vacancy, pricing, absorption, pipeline"
    },
    "period": {
      "type": "string",
      "description": "Optional time window for the metric, e.g. ttm, 12mo, ytd"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "compare_to": {
      "type": "string",
      "description": "Optional second market slug to compare against, e.g. dallas"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_market_intel output schema
{
  "type": "object",
  "properties": {
    "stats": {},
    "_gated": {},
    "market": {},
    "success": {},
    "by_status": {},
    "related_intel": {},
    "top_providers": {},
    "recent_facilities": {}
  },
  "additionalProperties": true
}
get_market_intel annotations
{
  "access": "paid",
  "problem": "colocation and wholesale data-center markets",
  "maturity": "mature",
  "front_door": "rank_markets",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_market_intel&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_market_dcpi_rank — DCPI Market Rank
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_market_dcpi_rank input schema
{
  "type": "object",
  "required": [
    "market_slug"
  ],
  "properties": {
    "market_slug": {
      "type": "string",
      "description": "Market slug (metro), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank"
    }
  }
}
get_market_dcpi_rank output schema
{
  "type": "object",
  "properties": {
    "iso": {},
    "state": {},
    "verdict": {},
    "forecast": {},
    "latitude": {},
    "longitude": {},
    "narrative": {},
    "published": {},
    "trend_30d": {},
    "data_basis": {},
    "computed_at": {},
    "market_name": {},
    "market_slug": {},
    "avg_kwh_cents": {},
    "quality_score": {},
    "tier_required": {},
    "top_risks_json": {},
    "composite_score": {},
    "curtailment_pct": {},
    "constraint_score": {},
    "data_basis_source": {},
    "queue_wait_months": {},
    "excess_power_score": {},
    "reserve_margin_pct": {},
    "time_to_power_months": {},
    "top_opportunities_json": {}
  },
  "additionalProperties": true
}
get_market_dcpi_rank annotations
{
  "access": "free_preview",
  "limits": "a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so · ai_ready_mw is a market-level PROXY from disclosed installed capacity — no per-rack power density or cooling type is ingested, because no public source publishes it. Directional, not a spec claim · deployable_mw is an estimate from market depth, not a measured interconnect result",
  "problem": "site selection and buildable capacity; colocation and wholesale data-center markets; AI/GPU compute campuses",
  "maturity": "expanding",
  "front_door": "execute_plan",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_market_dcpi_rank",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
predict_market_trajectory — Predict Market Trajectory
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks where a data center market's power outlook is heading (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, a time-series DC Hub owns. 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).

predict_market_trajectory input schema
{
  "type": "object",
  "required": [
    "market_slug"
  ],
  "properties": {
    "market_slug": {
      "type": "string",
      "description": "Market slug (metro), e.g. dallas, phoenix, northern-virginia — valid slugs come from rank_markets / get_market_dcpi_rank"
    },
    "horizon_quarters": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "Forecast horizon in quarters (1-8, default 4); 2 = ~6 months ahead"
    }
  }
}
predict_market_trajectory output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
predict_market_trajectory annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=predict_market_trajectory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_gas_index — Gas Index (DCGI)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which US states suit gas-fired data center power: the Data Center Gas Index (DCGI), a per-state score. ★ DO NOT COMPARE a DCGI figure published before 2026-08-08 with one published now — they are different indices; the full record is at /api/v1/dcgi/methodology under `corrections`. A state that cannot be priced comes back verdict UNSCORED with dcgi null and an `unscored_reason`, never a placeholder score, so treat UNSCORED as absence and not as a low score. `gas_price_series` names which EIA series answered each state. Gas-fired $/MWh figures, withdrawn the same day for a separate defect, were republished 2026-09-27 under one burner-tip price rule (see get_gas_economics). Use get_gas_intelligence for pipeline, operator and parent-midstream data.

get_gas_index input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation, e.g. TX, VA, AZ. Returns the DCGI score and verdict, plus `gas_price_series` naming which EIA series priced the state."
    }
  }
}
get_gas_index output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_gas_index annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_gas_index",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "developer_for_full",
  "idempotentHint": true,
  "destructiveHint": false
}
get_gas_economics — Get Gas Economics
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks what behind-the-meter gas power costs in 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=<slug> (e.g. "northern-virginia", "dallas", "phoenix"). AZ, GA, FL), never a substitute price; if the backend switch is ever turned off again, `gas_to_grid_status` carries that reason. ★ DO NOT COMPARE a $/MWh published before 2026-09-27 with one published now — each surface then picked the price its own way, up to 5.5x apart. Do not derive a $/MWh yourself from the $/MMBtu layers for a withheld state without saying that you did. Do NOT use for the electricity grid fuel mix (use get_grid_data).

get_gas_economics input schema
{
  "type": "object",
  "required": [
    "market"
  ],
  "properties": {
    "market": {
      "type": "string",
      "description": "Market slug (metro), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank"
    },
    "heat_rate_btu_per_kwh": {
      "type": "number",
      "description": "Optional custom generator heat rate in Btu/kWh for the gas-to-grid $/MWh scenario, e.g. 6800 (avg CCGT)"
    }
  }
}
get_gas_economics output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_gas_economics annotations
{
  "access": "free_preview",
  "problem": "PPAs and energy pricing",
  "maturity": "mature",
  "front_door": "get_energy_prices",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_gas_economics",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_grid_scoreboard — Grid Scoreboard
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks how power grids compare: demand, fuel mix or renewable share. GLOBAL grid scoreboard — 9 US grid operators (the 7 US ISOs PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE, plus BPA and TVA) + Great Britain (NESO) + the European bidding zones (Germany, France, Netherlands, Italy/Milan, Spain, Poland, Switzerland, Portugal, the Nordics + Central/Eastern Europe — via ENTSO-E; the exact live-vs-configured count is in counts_basis.eu_zones_live / eu_zones_configured, measured per call rather than asserted here) + Taiwan (Taipower) + Japan (OCCTO areas) + South Korea (KPX) + Brazil SIN (ONS), ranked side-by-side on each feed's LATEST PUBLISHED reading: renewable share %, gas share %, full fuel mix (gas/nuclear/coal/wind/solar/hydro MW), and demand. ★FRESHNESS IS NOT UNIFORM and every row says so: each carries mix_period, mix_age_hours and freshness_basis. The US rows come from EIA hourly RTO, which publishes the FUEL-TYPE BREAKDOWN several hours behind aggregate demand — an overnight mix reading is routinely 18-24h old (it will show near-zero solar) while demand on the same row is ~1-2h old. Answers "which grid is cleanest right now", "how is ERCOT doing at this moment". Try: get_grid_scoreboard. Full guide: read resource dchub://tool-guides/get_grid_scoreboard

get_grid_scoreboard input schema
{
  "type": "object",
  "properties": {}
}
get_grid_scoreboard output schema
{
  "type": "object",
  "properties": {
    "ok": {},
    "count": {},
    "grids": {},
    "source": {},
    "coverage": {},
    "freshness": {},
    "ranked_by": {},
    "counts_basis": {},
    "zones_ranked": {},
    "partial_grids": {},
    "eu_gas_context": {},
    "deep_intelligence": {},
    "independent_sources": {},
    "us_interconnection_queue_gw": {}
  },
  "additionalProperties": true
}
get_grid_scoreboard annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_grid_scoreboard",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
compare_isos — Compare ISO Regions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks to compare two to four power grids side by side — fuel mix, demand, renewable/gas share, and for the US ISOs interconnection-queue depth and 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"; "ERCOT vs AESO vs EU_DE_LU" also works. Params: isos is a comma-separated list (2-4 max): any of the 7 US ISOs ("PJM" | "ERCOT" | "CAISO" | "MISO" | "SPP" | "NYISO" | "ISO-NE"), TVA, BPA, a US utility BA, or a non-US grid (IESO, AESO, HYDROQUEBEC, NGESO, EU_<zone>, TAIPOWER, OCCTO, KEPCO-KR, ONS, AEMO, EMA); non-US and non-ISO rows carry null DCPI and queue fields (not tracked, not zero). Returns: {isos[], comparison:{<iso>:{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.

compare_isos input schema
{
  "type": "object",
  "required": [
    "isos"
  ],
  "properties": {
    "isos": {
      "type": "string",
      "description": "Comma-separated list of 2-4 grids to compare, e.g. \"PJM,ERCOT,CAISO\" or \"ERCOT,AESO,EU_DE_LU\": US ISOs (ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE), TVA, BPA, utility BAs, or non-US grids (IESO, AESO, HYDROQUEBEC, NGESO, EU_<zone>,…"
    }
  }
}
compare_isos output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
compare_isos annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=compare_isos&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_intelligence_index — Market Intelligence Index
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how healthy a data center market is: composite 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).

get_intelligence_index input schema
{
  "type": "object",
  "properties": {}
}
get_intelligence_index output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_intelligence_index annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_intelligence_index&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
list_transactions — M&A Transactions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about data center M&A, acquisitions or capital deals — 1,800+ tracked deals (2019-present), each with its disclosed value where public (many private deals are undisclosed). Returns deal name, buyer, seller, value, date, market, target operator, type (acquisition/JV/refinance/recap). Filter by date range (date_from/date_to, ISO-8601), min_value_usd, region, buyer, or seller. Answers "which data-center deals closed this year", "what was that acquisition worth". Try: list_transactions date_from=2026-01-01 min_value_usd=1000000000. There is no `year` parameter — use date_from/date_to. Broad M&A and capital-deal flow with filters; do NOT use for hyperscaler-specific lease/PPA/JV activity (use hyperscaler_deals) or a single-deal post-mortem (use deal_autopsy). limit 1-500 (free 10), offset 0-100000; total_count is the full match count. Empty = loosen buyer/seller/value filters.

list_transactions input schema
{
  "type": "object",
  "properties": {
    "buyer": {
      "type": "string",
      "description": "Filter by acquiring company name, e.g. Blackstone, KKR, Digital Realty"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "offset": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 0,
      "description": "Pagination offset, 0-based (skip this many results)"
    },
    "region": {
      "type": "string",
      "description": "Geographic region filter, e.g. us, eu, apac, americas"
    },
    "seller": {
      "type": "string",
      "description": "Filter by selling/target company name, e.g. CyrusOne"
    },
    "date_to": {
      "type": "string",
      "description": "Latest deal date, ISO-8601 (YYYY-MM-DD)"
    },
    "date_from": {
      "type": "string",
      "description": "Earliest deal date, ISO-8601 (YYYY-MM-DD)"
    },
    "deal_type": {
      "type": "string",
      "description": "Deal type filter, e.g. acquisition, jv, refinance, recap"
    },
    "max_value_usd": {
      "type": "number",
      "description": "Maximum disclosed deal value in US dollars"
    },
    "min_value_usd": {
      "type": "number",
      "description": "Minimum disclosed deal value in US dollars, e.g. 1000000000 for $1B+"
    }
  }
}
list_transactions output schema
{
  "type": "object",
  "properties": {
    "note": {},
    "tier": {},
    "count": {},
    "cached": {},
    "success": {},
    "data_source": {},
    "total_count": {},
    "total_value": {},
    "transactions": {},
    "total_value_unit": {}
  },
  "additionalProperties": true
}
list_transactions annotations
{
  "access": "paid",
  "problem": "data-center M&A and deals",
  "maturity": "mature",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=list_transactions&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_news — Industry News
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks for data center industry news or headlines (execute_plan also pulls news inside a broader market question). Curated data center industry news from 40+ trade sources (DCD, Data Center Knowledge, Data Center Frontier, Capacity Media, The Register Data Centre, Fierce Telecom, etc.) refreshed every 30 min. Returns title, summary, source, published_at, and the market/operator entities mentioned. Filter by category (deals/permits/outages/policy/AI). Answers "what is happening in the data center industry this week", "any news on AI capacity". Try: get_news category=AI limit=10. The parameter is `category`, not `topic`. Industry news only; do NOT use for structured M&A deal data (use list_transactions) or the construction pipeline (use get_pipeline). limit 1-500 (free 20). Empty data = no matching news: drop category/source or widen date_from/date_to.

get_news input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "query": {
      "type": "string",
      "description": "Free-text keyword to filter news, e.g. \"Stargate\" or \"interconnection queue\""
    },
    "source": {
      "type": "string",
      "description": "Restrict to one trade source, e.g. DCD, \"Data Center Frontier\", \"Capacity Media\""
    },
    "date_to": {
      "type": "string",
      "description": "Latest published date, ISO-8601 (YYYY-MM-DD)"
    },
    "category": {
      "type": "string",
      "description": "News topic filter, e.g. deals, permits, outages, policy, AI"
    },
    "date_from": {
      "type": "string",
      "description": "Earliest published date, ISO-8601 (YYYY-MM-DD)"
    },
    "min_relevance": {
      "type": "number",
      "description": "Minimum relevance score 0-1 to include an item, e.g. 0.5"
    }
  }
}
get_news output schema
{
  "type": "object",
  "properties": {
    "data": {},
    "count": {},
    "total": {},
    "source": {},
    "cite_as": {},
    "success": {},
    "articles": {}
  },
  "additionalProperties": true
}
get_news annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_news",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
semantic_search — Semantic Search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when a data center or energy question is conceptual or fuzzy and keyword filters fall short — semantic (meaning-based) retrieval across DC Hub's industry news, M&A deals, the global facility map, per-market DCPI deep-dive narratives, press releases, announcements, permitting intel, construction permits, tax incentives and the capacity pipeline, ranked by relevance with citable source fields (news url/title, deal parties/value, facility name/location, deep-dive market/url). Examples: "what is happening with behind-the-meter gas for AI data centers?", "deals involving nuclear power for hyperscalers", "why is Northern Virginia constrained?" — semantic_search q="behind-the-meter gas for AI data centers". Params: q (required, natural-language query); corpus (optional CSV subset of news_articles,deals,facilities,market_narratives,press_releases,announcements,permitting_intel,construction_permits,tax_incentives,capacity_pipeline; default all); k (1-15, default 8). Returns {results:[{source_table, kind, text, score, cite:{…}}]}; score is 0-1 relevance, not a DCPI score. Complements the exact-filter tools (get_news / list_transactions / search_facilities) with relevance ranking; for a full token-budgeted market briefing use get_market_context. Cite "DC Hub (dchub.cloud)".

semantic_search input schema
{
  "type": "object",
  "properties": {
    "k": {
      "type": "number",
      "description": "Number of results, 1-15 (default 8)"
    },
    "q": {
      "type": "string",
      "description": "Natural-language query (required), e.g. \"grids opening up for AI load in the Southeast\""
    },
    "query": {
      "type": "string",
      "description": "Alias for q — the same natural-language query; send exactly one of q/query"
    },
    "corpus": {
      "type": "string",
      "description": "Optional CSV of corpora: news_articles, deals, discovered_facilities, market_narratives (default: all)"
    }
  }
}
semantic_search output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
semantic_search annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=semantic_search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
search_intelligence — Search Intelligence
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when you need meaning-based search over DC Hub's data center intelligence corpus, choosing corpora — industry news, M&A deals, discovered facilities, per-market DCPI narratives, press releases, announcements, permitting intel, construction permits, tax incentives and the capacity pipeline — returning the most relevant records with citable source fields. This is the agent-friendly alias over the SAME retrieval layer as semantic_search: same results, different call shape. It takes `query` plus short corpus names (news | deals | facilities | market_narratives | press | announcements | permitting | permits | incentives | pipeline); semantic_search takes `q` plus the full corpus names. Call ONE of them, not both. Params: query (required, natural language); corpus (optional CSV of the names above, default all); limit (1-15, default 8). BEHAVIOUR: read-only — it writes nothing, and repeat calls with the same arguments return the same records. ACCESS: works with no key, but anonymous results come back as a TRIMMED PREVIEW; the session X-API-Key hydrates full depth per key, and the free tier is capped per day (call claim_free_key once — no email — if you do not hold a key).

search_intelligence input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Alias for query"
    },
    "limit": {
      "type": "number",
      "description": "Max results to return, 1-15 (default 8)"
    },
    "query": {
      "type": "string",
      "description": "Natural-language query (required), e.g. \"grids opening up for AI load in the Southeast\""
    },
    "corpus": {
      "type": "string",
      "description": "Optional corpus to restrict to: news | deals | facilities | market_narratives. CSV of several is allowed; default searches all."
    }
  }
}
search_intelligence output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
search_intelligence annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=search_intelligence",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_market_context — Get Market Context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you need a whole data center market briefing for your 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)".

get_market_context input schema
{
  "type": "object",
  "required": [
    "market"
  ],
  "properties": {
    "market": {
      "type": "string",
      "description": "Market slug (required), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank"
    },
    "max_tokens": {
      "type": "number",
      "description": "Token budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent"
    }
  }
}
get_market_context output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_market_context annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_market_context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "developer_for_full",
  "idempotentHint": true,
  "destructiveHint": false
}
get_iso_context — Get Iso Context
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_iso_context input schema
{
  "type": "object",
  "required": [
    "iso"
  ],
  "properties": {
    "iso": {
      "type": "string",
      "description": "ISO/RTO grid region (required): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE"
    },
    "max_tokens": {
      "type": "number",
      "description": "Token budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent"
    }
  }
}
get_iso_context output schema
{
  "type": "object",
  "properties": {
    "ok": {},
    "iso": {},
    "tier": {},
    "cite_as": {},
    "sections": {},
    "max_tokens": {},
    "used_tokens": {},
    "locked_sections": {}
  },
  "additionalProperties": true
}
get_iso_context annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_iso_context",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "developer_for_full",
  "idempotentHint": true,
  "destructiveHint": false
}
get_pipeline — Construction Pipeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_pipeline input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "offset": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 0,
      "description": "Pagination offset, 0-based (skip this many results)"
    },
    "status": {
      "type": "string",
      "description": "Pipeline stage filter: announced, permitted, construction, or operational"
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. US, DE, SG"
    },
    "operator": {
      "type": "string",
      "description": "Operator/provider company name, e.g. Equinix, Digital Realty, AWS"
    },
    "min_capacity_mw": {
      "type": "number",
      "description": "Minimum project power capacity filter in megawatts (MW), e.g. 50 for hyperscale"
    },
    "expected_completion_before": {
      "type": "string",
      "description": "Only projects with expected commissioning before this ISO-8601 date (YYYY-MM-DD), e.g. 2027-01-01"
    }
  }
}
get_pipeline output schema
{
  "type": "object",
  "properties": {
    "data": {},
    "count": {},
    "stats": {},
    "cite_as": {},
    "success": {},
    "pipeline": {},
    "by_quarter": {},
    "data_source": {},
    "total_count": {},
    "last_updated": {}
  },
  "additionalProperties": true
}
get_pipeline annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_pipeline&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_power_pipeline — Get Power Pipeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the 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).

get_power_pipeline input schema
{
  "type": "object",
  "properties": {
    "ba": {
      "type": "string",
      "description": "Balancing-authority / ISO code, e.g. PJM, ERCO, SOCO, TVA, AZPS"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation to filter generators, e.g. VA, TX"
    },
    "min_mw": {
      "type": "number",
      "description": "Minimum nameplate capacity filter in megawatts (MW)"
    },
    "status": {
      "type": "string",
      "description": "Generator status code: P/L/T (planned), U/V (under construction), TS (testing)"
    }
  }
}
get_power_pipeline output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_power_pipeline annotations
{
  "access": "free",
  "limits": "the generating-unit inventory counts UNITS across all statuses (operating, planned, cancelled, shelved, retired) — it is not a plant count and not an operating fleet",
  "problem": "power generation, gas and energy infrastructure",
  "maturity": "mature",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_power_pipeline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_infra_projects — Get Infra Projects
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what gas pipeline or transmission line projects are planned, proposed, approved or under construction — the forward build-out, not the existing network. e.g. "which interstate gas pipelines are under construction into Louisiana?", "what 345 kV transmission projects are planned in PJM by 2030?", "what new projects appeared since last month?". COVERS: (1) natural gas pipeline projects US-wide from the EIA natural gas pipeline projects list (public domain) — operator, status (Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed), states crossed, capacity in MMcf/d, miles, cost in $M, diameter, FERC/state docket, in-service year; (2) transmission projects from five ISOs' own project lists — ERCOT (TPIT), PJM (RTEP), MISO (MTEP Appendix A), SPP (STEP) and ISO-NE (RSP list); NOT CAISO or NYISO, and not utilities outside those ISOs. Each ISO publishes a different grain (an upgrade or facility, not a whole project), so a row count is a count of upgrades. 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.

get_infra_projects input schema
{
  "type": "object",
  "properties": {
    "type": {
      "enum": [
        "gas_pipeline",
        "transmission",
        "all"
      ],
      "type": "string",
      "description": "Which project list: gas_pipeline (EIA, US-wide), transmission (ERCOT TPIT, Texas only) or all (default)"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation, e.g. TX or LA. Gas projects match any state they cross; transmission projects are all TX"
    },
    "min_kv": {
      "type": "number",
      "description": "Transmission only: minimum voltage in kilovolts (kV), e.g. 345. With type=all it narrows to transmission projects"
    },
    "status": {
      "type": "string",
      "description": "Status, case-insensitive; comma list allowed. Gas: Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed. Transmission: Planned, Conceptual, Under Construction, Completed, Cancelled"
    },
    "new_since": {
      "type": "string",
      "description": "Only projects DC Hub first saw on or after this date (YYYY-MM-DD). The initial backfill is never counted as new"
    },
    "min_capacity": {
      "type": "number",
      "description": "Gas 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_after": {
      "type": "string",
      "description": "Only 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_delisted": {
      "type": "boolean",
      "description": "Also return projects the latest source release no longer lists (completed, withdrawn or dropped). Default false"
    },
    "in_service_before": {
      "type": "string",
      "description": "Only projects entering service on or before this date (YYYY-MM-DD or YYYY)"
    }
  }
}
get_infra_projects output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_infra_projects annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_infra_projects",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_power_availability_timeline — Get Power Availability Timeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks when power will be available, or about time-to-power, in a US state: 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.

get_power_availability_timeline input schema
{
  "type": "object",
  "required": [
    "state"
  ],
  "properties": {
    "mw": {
      "type": "number",
      "description": "Optional target MW for CONTEXT ONLY — echoed back with an explicit note; never converted into an energize-by date, which this data cannot honestly state"
    },
    "state": {
      "type": "string",
      "description": "2-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"
    },
    "years": {
      "type": "number",
      "description": "Window in years from now, 1-6 (default 5)"
    }
  }
}
get_power_availability_timeline output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_power_availability_timeline annotations
{
  "access": "free",
  "limits": "supply-side signals, not a load-interconnection promise — generation is not deliverable load · utility study timelines, large-load tariff processes and substation-grain delivery are declared out of coverage rather than estimated",
  "problem": "grid headroom and power availability",
  "maturity": "mature",
  "front_door": "execute_plan",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_power_availability_timeline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_global_power — Get Global Power
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about power plants 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.

get_global_power input schema
{
  "type": "object",
  "properties": {
    "bbox": {
      "type": "string",
      "description": "Viewport filter as minLng,minLat,maxLng,maxLat"
    },
    "fuel": {
      "type": "string",
      "description": "Fuel/type filter, comma-separated for a union: coal, oil/gas, nuclear, solar, wind, hydro, bioenergy, geothermal"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "min_mw": {
      "type": "number",
      "description": "Minimum unit capacity in MW"
    },
    "status": {
      "type": "string",
      "description": "Status substring filter, e.g. operating, construction, pre-construction, announced"
    },
    "country": {
      "type": "string",
      "description": "Country/area name to filter, e.g. Germany, India, Brazil, Japan"
    },
    "pipeline": {
      "type": "boolean",
      "description": "true = ONLY the forward pipeline (announced + pre-construction + under-construction)"
    }
  }
}
get_global_power output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_global_power annotations
{
  "access": "free",
  "limits": "the generating-unit inventory counts UNITS across all statuses (operating, planned, cancelled, shelved, retired) — it is not a plant count and not an operating fleet",
  "problem": "power generation, gas and energy infrastructure",
  "maturity": "mature",
  "front_door": "get_power_pipeline",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_global_power",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_interconnection_queue — Interconnection Queue
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_interconnection_queue input schema
{
  "type": "object",
  "properties": {
    "iso": {
      "type": "string",
      "description": "ISO/RTO grid region to drill into: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE; omit for the all-ISO snapshot"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_interconnection_queue output schema
{
  "type": "object",
  "properties": {
    "v": {},
    "iso": {},
    "as_of": {},
    "projects": {},
    "queue_kind": {},
    "source_url": {},
    "source_name": {},
    "project_count": {},
    "top_subregions": {},
    "queued_generation_gw": {},
    "queued_large_load_gw": {},
    "new_applications_q_gw": {},
    "queued_connections_gw": {},
    "new_applications_period": {},
    "queued_load_dc_share_pct": {},
    "historical_completion_pct": {},
    "queued_load_data_center_gw": {},
    "queued_generation_gw_basis_note": {},
    "queued_generation_pending_revision_gw": {},
    "queued_generation_pending_revision_gw_basis": {}
  },
  "additionalProperties": true
}
get_interconnection_queue annotations
{
  "access": "paid",
  "limits": "supply-side signals, not a load-interconnection promise — generation is not deliverable load · utility study timelines, large-load tariff processes and substation-grain delivery are declared out of coverage rather than estimated · the queue feed carries no delivery dates, and most queued MW never completes — queue depth is congestion context, not a timeline",
  "problem": "grid headroom and power availability; interconnection queues",
  "maturity": "mature",
  "front_door": "execute_plan",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_interconnection_queue&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_refined_queue — Get Refined Queue
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when you need interconnection queue projects filtered server-side. 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.

get_refined_queue input schema
{
  "type": "object",
  "properties": {
    "iso": {
      "type": "string",
      "description": "Restrict 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"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "min_mw": {
      "type": "number",
      "description": "Minimum project capacity in MW, e.g. 1000 for 1 GW+"
    },
    "status": {
      "type": "string",
      "description": "Queue 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')."
    },
    "developer": {
      "type": "string",
      "description": "ERCOT only: keep projects whose developer name contains this text (case-insensitive substring, e.g. 'tenaska'). Developer names come from ERCOTQueue (ercotqueue.com, Matt Prusak, CC BY 4.0) joined to ERCOT's own queue by INR; other ISOs…"
    },
    "fuel_type": {
      "type": "string",
      "description": "Isolate 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."
    },
    "max_fiber_km": {
      "type": "number",
      "description": "Keep 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_only": {
      "type": "boolean",
      "description": "Keep 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)."
    },
    "geocoded_only": {
      "type": "boolean",
      "description": "Keep 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_months": {
      "type": "integer",
      "maximum": 120,
      "minimum": 1,
      "description": "Max 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)"
    }
  }
}
get_refined_queue output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_refined_queue annotations
{
  "access": "metered",
  "limits": "the queue feed carries no delivery dates, and most queued MW never completes — queue depth is congestion context, not a timeline",
  "problem": "interconnection queues",
  "maturity": "mature",
  "front_door": "get_interconnection_queue",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_refined_queue&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_retirement_headroom — Get Retirement Headroom
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks where retiring power plants free grid capacity: scans EIA-860M 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.

get_retirement_headroom input schema
{
  "type": "object",
  "required": [
    "target_mw",
    "horizon_months"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "target_mw": {
      "type": "number",
      "description": "Minimum 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_iso": {
      "type": "string",
      "description": "Optional 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_filter": {
      "type": "string",
      "description": "Optional filter for retiring fuel categories, substring-matched (e.g., 'Coal', 'Natural Gas', 'Petroleum')."
    },
    "horizon_months": {
      "type": "integer",
      "maximum": 120,
      "minimum": 1,
      "description": "Time horizon in months to look ahead for planned retirements, 1-120 (e.g., 12, 18, 36)."
    }
  }
}
get_retirement_headroom output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_retirement_headroom annotations
{
  "access": "metered",
  "limits": "the generating-unit inventory counts UNITS across all statuses (operating, planned, cancelled, shelved, retired) — it is not a plant count and not an operating fleet",
  "problem": "power generation, gas and energy infrastructure",
  "maturity": "mature",
  "front_door": "get_power_pipeline",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_retirement_headroom&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_hosting_capacity — Feeder Hosting Capacity
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how many MW a distribution feeder can take: utility-published hosting capacity — the MW a NAMED distribution feeder can actually take, straight from the utility's own hosting-capacity GIS. Published records from many utilities (e.g. Con Edison, National Grid NY/MA, NYSEG/RG&E, Rhode Island Energy, Orange & Rockland, Central Hudson, Eversource CT, BGE, Pepco/Delmarva/ACE, Dominion VA, Ameren Illinois, AEP Ohio & I&M, Xcel MN/CO, DTE, Avista; the no-args call lists current coverage). This is filed distribution-level truth, not a proximity proxy. Three ways to call it: lat+lon (+radius_km, default 25) for a point; utility or market for a whole published territory; NO ARGS for the coverage list of every market that has data. 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.

get_hosting_capacity input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude of the point to search around, decimal degrees. Must be paired with lon."
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Longitude of the point to search around, decimal degrees. Must be paired with lat."
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "market": {
      "type": "string",
      "description": "Alias for utility — either name works (e.g. \"Northern Virginia · Richmond\", \"New York City · Westchester\")."
    },
    "min_mw": {
      "type": "number",
      "description": "Only return feeders whose published capacity is at or above this many MW."
    },
    "utility": {
      "type": "string",
      "description": "Utility 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."
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "maximum": 150,
      "minimum": 1,
      "description": "Search 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_type": {
      "type": "string",
      "description": "Restrict 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)."
    }
  }
}
get_hosting_capacity output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_hosting_capacity annotations
{
  "access": "free",
  "limits": "utility-published feeder hosting capacity covers a named subset of utilities in the Northeast, Mid-Atlantic and Midwest — not nationwide, and absence of a feeder is not absence of capacity · published feeder capacities are single-digit to low-tens of MW and the rows are GIS vertices — read distinct_feeders, never the row count",
  "problem": "substations and transmission",
  "maturity": "partial",
  "front_door": "get_infrastructure",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_hosting_capacity",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
analyze_parcel — Analyze Parcel
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user has a land parcel for a data center site: structured read of its 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, covering a set of priority data-center counties in VA, IL, TX, OH, UT, OR, IA and WY; a point outside it returns parcel_not_covered with the analyze_site preview + 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).

analyze_parcel input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude 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"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Longitude of a point ON the parcel (used with lat when geometry is omitted)"
    },
    "geometry": {
      "description": "GeoJSON 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"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Optional target load in MW to pass through into the site_evaluation_handoff"
    }
  }
}
analyze_parcel output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
analyze_parcel annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=analyze_parcel",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
rank_sites — Rank Sites
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you have enriched candidate data center sites to rank 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. 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.

rank_sites input schema
{
  "type": "object",
  "properties": {
    "top_k": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "How many top-ranked sites to return (1-50, default 3)"
    },
    "absolute": {
      "type": "boolean",
      "description": "false (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…"
    },
    "candidates": {
      "description": "Array 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."
    },
    "objectives": {
      "description": "Weighted 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"
    },
    "percentile": {
      "type": "boolean",
      "description": "true = score each objective as its PERCENTILE against the viable-site POPULATION (\"better than X% of viable sites\") — the strongest cross-run + cross-region comparability."
    },
    "constraints": {
      "description": "Hard 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_name": {
      "type": "string",
      "description": "Alternative 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_complete": {
      "type": "boolean",
      "description": "true = DROP any candidate missing one or more of your (validated) objectives — dropped candidates are DECLARED in excluded_incomplete, never silent."
    }
  }
}
rank_sites output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
rank_sites annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=rank_sites",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
discover_tools — Discover Tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you are unsure which DC Hub data center, power or grid tool fits: lists tools by family. Returns _entity=tool_families — a front_door block (execute_plan for any multi-capability question, get_changes to refresh) plus families with a when-to-use note + their tools (facility, market, grid_power, gas_btm, site_geometry, fiber, deals_news, saved_work, account_meta, partner), optionally filtered by a query. 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.

discover_tools input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional keyword to filter families/tools, e.g. \"site selection\", \"grid queue\", \"fiber\", \"deals\", \"market\""
    }
  }
}
discover_tools output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
discover_tools annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=discover_tools",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
plan_query — Plan Query
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you want to see the plan for a data center question without running it (execute_plan runs the same planner and returns the answers). 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. Full guide: read resource dchub://tool-guides/plan_query

plan_query input schema
{
  "type": "object",
  "required": [
    "intent"
  ],
  "properties": {
    "intent": {
      "type": "string",
      "description": "Natural-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\""
    },
    "context": {
      "description": "Optional 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)"
    }
  }
}
plan_query output schema
{
  "type": "object",
  "properties": {
    "ok": {},
    "note": {},
    "intent": {},
    "reason": {},
    "replay": {
      "type": "object"
    },
    "chaining": {},
    "best_tool": {},
    "confidence": {},
    "alternatives": {},
    "intent_class": {},
    "routing_hint": {},
    "coverage_notes": {},
    "parallelizable": {},
    "estimated_calls": {},
    "execution_waves": {},
    "matched_classes": {},
    "intent_confidence": {},
    "planner_rationale": {},
    "execution_estimate": {},
    "execution_strategy": {},
    "workflow_confidence": {},
    "recommended_sequence": {},
    "workflow_confidence_basis": {}
  },
  "additionalProperties": true
}
plan_query annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=plan_query",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
save_to_shortlist — Save To Shortlist
Advertised by the server during the last successful anonymous check.

Use this when the user wants to keep a data center site on a 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.

save_to_shortlist input schema
{
  "type": "object",
  "required": [
    "shortlist_name",
    "site"
  ],
  "properties": {
    "site": {
      "description": "Site 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."
    },
    "notes": {
      "type": "string",
      "description": "Optional free-text note, e.g. \"strong fiber, acceptable water\""
    },
    "objectives": {
      "description": "OPTIONAL {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_name": {
      "type": "string",
      "description": "Name of the shortlist, e.g. \"Q3-2026-1GW-targets\" — created if new. REQUIRED."
    }
  }
}
save_to_shortlist output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
save_to_shortlist annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=save_to_shortlist",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
get_shortlist — Get Shortlist
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to see a saved data center site shortlist. 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.

get_shortlist input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The shortlist name to fetch"
    },
    "refresh": {
      "type": "boolean",
      "description": "true (default) = re-score every site against the CURRENT baseline + return drift deltas; false = return the saved snapshots only"
    }
  }
}
get_shortlist output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_shortlist annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_shortlist",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": true,
  "destructiveHint": false
}
set_shortlist_alert — Set Shortlist Alert
Advertised by the server during the last successful anonymous check.

Use this when the user wants a drift alert on a saved site 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.

set_shortlist_alert input schema
{
  "type": "object",
  "required": [
    "notify"
  ],
  "properties": {
    "notify": {
      "description": "Delivery: {\"webhook\":\"https://...\"} and/or {\"email\":\"you@co.com\"} — at least one required"
    },
    "delta_below": {
      "type": "number",
      "description": "Fire if any site's score_delta_since_saved drops below this — pass a NEGATIVE number, e.g. -8 (dropped 8+ points since saved)"
    },
    "shortlist_name": {
      "type": "string",
      "description": "The shortlist to monitor (created via save_to_shortlist)"
    },
    "percentile_below": {
      "type": "number",
      "description": "Fire if any site's current percentile objective_score drops below this (e.g. 70)"
    }
  }
}
set_shortlist_alert output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
set_shortlist_alert annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=set_shortlist_alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
suggest_reallocation — Suggest Reallocation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when a saved data center 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.

suggest_reallocation input schema
{
  "type": "object",
  "required": [
    "shortlist_name"
  ],
  "properties": {
    "shortlist_name": {
      "type": "string",
      "description": "The shortlist to re-allocate within (created via save_to_shortlist)"
    },
    "drifted_site_ref": {
      "type": "string",
      "description": "Optional site_ref of the drifted slot to replace; if omitted, the current lowest-scoring site is treated as the drifted one"
    }
  }
}
suggest_reallocation output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
suggest_reallocation annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=suggest_reallocation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": true,
  "destructiveHint": false
}
get_grid_data — Live Grid Data
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks for live electricity grid data (power demand, fuel mix) for one grid: the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE), TVA, BPA, 40+ US utility balancing authorities (e.g. AZPS, SOCO, DUK, FPL, or a city: PHOENIX, ATLANTA), Canada (IESO, AESO, HYDROQUEBEC), Great Britain (NGESO), any ENTSO-E bidding zone (EU_DE_LU, EU_FR, EU_NL ...), Taiwan (TAIPOWER), Japan (OCCTO), South Korea (KEPCO-KR), Brazil (ONS), Australia (AEMO) or Singapore (EMA). US ISOs and EIA regions return EIA hourly fuel mix, demand and the 24h curve; other grids return each feed's newest reading per metric, each with its own timestamp. For PJM it also returns installed_capacity_mw: EIA-860M installed generating capacity (net summer MW of operating generators for the report month in installed_capacity_mw_period). That is not PJM committed capacity, which is listed in licence_withheld with no value. Raw telemetry for one grid; do NOT use for power-availability, time-to-power or interconnection-queue analysis (use get_grid_intelligence), nor for retail/gas pricing (use get_energy_prices). To rank many grids at once use get_grid_scoreboard.

get_grid_data input schema
{
  "type": "object",
  "properties": {
    "iso": {
      "type": "string",
      "description": "Grid code (required): a US ISO (ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE), TVA, BPA, a utility BA or city (AZPS, PHOENIX), or a non-US grid (IESO, AESO, HYDROQUEBEC, NGESO, EU_DE_LU, TAIPOWER, OCCTO, KEPCO-KR, ONS, AEMO, EMA)"
    },
    "metric": {
      "type": "string",
      "description": "Optional metric focus, e.g. fuel_mix, demand, demand_curve"
    },
    "period": {
      "type": "string",
      "description": "Optional time window for the metric, e.g. 24h"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_grid_data output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_grid_data annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_grid_data&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_changes — Get Changes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what changed in data center markets, facilities or deals since a date. 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=<ISO-8601> 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.

get_changes input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "since": {
      "type": "string",
      "description": "Return changes since this ISO-8601 timestamp (YYYY-MM-DD or full datetime) or shorthand \"24h\"/\"7d\"; default 24h"
    }
  }
}
get_changes output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_changes annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_changes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_facility_risk_delta — Get Facility Risk Delta
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how a data center facility's (or its market's) power risk changed recently — "has this site gotten riskier lately?". 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.

get_facility_risk_delta input schema
{
  "type": "object",
  "properties": {
    "since": {
      "type": "string",
      "description": "Look-back window, e.g. \"7d\" or \"30d\" (default 7d)"
    },
    "market": {
      "type": "string",
      "description": "Alternatively, a market name or slug (e.g. \"northern-virginia\")"
    },
    "facility_id": {
      "type": "string",
      "description": "A DC Hub facility id or canonical slug to resolve the market context"
    }
  }
}
get_facility_risk_delta output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_facility_risk_delta annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_facility_risk_delta",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
save_site — Save Site
Advertised by the server during the last successful anonymous check.

Use this when the user wants to save a data-center site to track it. Needs a key (free, via claim_free_key); keyless returns auth_required. 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.

save_site input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90), e.g. 39.04"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180), e.g. -77.48"
    },
    "name": {
      "type": "string",
      "description": "Optional label for the saved site, e.g. \"Ashburn parcel\""
    },
    "notes": {
      "type": "string",
      "description": "Optional free-text notes to store with the saved site"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation for the site, e.g. VA"
    },
    "market": {
      "type": "string",
      "description": "Market slug (metro) the site belongs to, e.g. northern-virginia"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "target_mw": {
      "type": "number",
      "description": "Target power load for the planned build in megawatts (MW), e.g. 100"
    }
  }
}
save_site output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
save_site annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=save_site",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
list_saved_sites — List Saved Sites
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks to see their saved data center sites. Needs a key (free, via claim_free_key); keyless returns auth_required, not an empty list. 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.

list_saved_sites input schema
{
  "type": "object",
  "properties": {
    "since": {
      "type": "string",
      "description": "Delta window for per-site movement: \"24h\", \"7d\" (default) or an ISO-8601 timestamp — pass your cached generated_at from last session"
    }
  }
}
list_saved_sites output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
list_saved_sites annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=list_saved_sites",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": true,
  "destructiveHint": false
}
set_market_alert — Set Market Alert
Advertised by the server during the last successful anonymous check.

Use this when the user wants alerts on a data center market's DCPI power score: subscribes to movement alerts (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=<https URL>) needs a paid DC Hub plan. Lets an agent MONITOR markets, not just query them. Answers "tell me when this market moves", "ping me if Northern Virginia’s power score changes". Try: set_market_alert market=northern-virginia channel=webhook destination=https://hooks.example.com/dc. Do NOT use to read a market right now (use get_market_dcpi_rank); this SUBSCRIBES to future movement.

set_market_alert input schema
{
  "type": "object",
  "required": [
    "market",
    "channel"
  ],
  "properties": {
    "market": {
      "type": "string",
      "description": "Market slug (metro) to watch, e.g. northern-virginia — valid slugs come from rank_markets / get_market_dcpi_rank"
    },
    "channel": {
      "type": "string",
      "description": "Delivery channel: \"email\" (free, sent to your bound email) or \"webhook\" (paid plan)"
    },
    "destination": {
      "type": "string",
      "description": "For channel=\"webhook\", the https URL to POST alerts to (paid plan); ignored for email (forced to bound address)"
    }
  }
}
set_market_alert output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
set_market_alert annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=set_market_alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
subscribe_digest — Subscribe Digest
Advertised by the server during the last successful anonymous check.

Use this when the user asks for a weekly data center market email: subscribes them to a free digest of what changed in the markets and sites they queried (DCPI movers, new facilities, deals, news). 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.

subscribe_digest input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Your human's email address (required) — a one-click confirm link is sent; use only an address they explicitly gave"
    },
    "source": {
      "type": "string",
      "description": "Optional attribution tag for where the subscription came from, e.g. mcp_digest"
    }
  }
}
subscribe_digest output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
subscribe_digest annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=subscribe_digest",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
set_site_alert — Set Site Alert
Advertised by the server during the last successful anonymous check.

Use this when the user wants an email watch on a saved data center site (free with a key) — DC Hub emails you when that site’s DCPI score, grid capacity, or nearby facilities move, so you don’t have to keep re-checking. On the free tier the alert is delivered to your human’s bound email (call bind_email first; notify_email is forced to that address). A paid DC Hub plan can send to any address. The "monitor my shortlist for me" loop: call save_site first (it returns a saved_site_id), then set_site_alert on that id. Params: saved_site_id (required integer, from save_site or list_saved_sites), trigger_type ("dcpi_change" | "capacity_change" | "new_facility_nearby", default "dcpi_change"), threshold (number — the points/MW move that fires it, default 5), notify_email (required — the address the alert is sent to). Answers "let me know if anything changes at the site I saved". Try: set_site_alert saved_site_id=12 trigger_type=dcpi_change threshold=5 notify_email=you@firm.com. Returns {ok, alert_id, message}. Do NOT use to watch a whole MARKET (use set_market_alert) or to save a new site (use save_site); this arms a monitor on ONE already-saved site.

set_site_alert input schema
{
  "type": "object",
  "required": [
    "saved_site_id",
    "notify_email"
  ],
  "properties": {
    "threshold": {
      "type": "number",
      "description": "The points/MW move that fires the alert (default 5)"
    },
    "notify_email": {
      "type": "string",
      "description": "Email address the alert is sent to (required); on free tier forced to your human's bound email"
    },
    "trigger_type": {
      "type": "string",
      "description": "What movement fires the alert: \"dcpi_change\" (default), \"capacity_change\", or \"new_facility_nearby\""
    },
    "saved_site_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ],
      "description": "The saved_site_id returned by save_site or list_saved_sites (required)"
    }
  }
}
set_site_alert output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
set_site_alert annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=set_site_alert",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
export_dataset — Export Dataset
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

export_dataset input schema
{
  "type": "object",
  "properties": {
    "format": {
      "type": "string",
      "description": "Output file format: \"csv\" (default) or \"geojson\" (for GIS tools like QGIS)"
    }
  }
}
export_dataset output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
export_dataset annotations
{
  "access": "paid",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=export_dataset",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
find_sites — Find Sites
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user has no data center site yet and wants candidate search areas (site selection by substation voltage, gas and fiber distance); execute_plan covers a multi-part siting question. 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. 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.

find_sites input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude of a search centre, e.g. 39.04 — use with lon (+ radius_km) instead of state"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Longitude of a search centre, e.g. -77.48"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "state": {
      "type": "string",
      "description": "2-letter US state to search, e.g. OH — required unless you pass lat + lon"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius in km around lat/lon (default 80, clamped 5-400); ignored in state mode"
    },
    "cluster_km": {
      "type": "number",
      "description": "Collapse 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_km": {
      "type": "number",
      "description": "Drop candidates farther than this from the nearest gas pipeline. Applied ONLY if the gas layer answers — check constraint_coverage"
    },
    "max_fiber_km": {
      "type": "number",
      "description": "Drop candidates farther than this from the nearest fiber route (CHORD approximation — see fiber_distance_basis). Applied ONLY if the fiber layer answers"
    },
    "min_voltage_kv": {
      "type": "number",
      "description": "Only anchor on substations at or above this voltage in kV (default 115). 230+ for hyperscale, 500 for the largest campuses"
    },
    "exclude_moratorium": {
      "type": "boolean",
      "description": "true = drop candidates in a state with a published data-center moratorium. STATE grain, not jurisdiction grain"
    }
  }
}
find_sites output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
find_sites annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=find_sites",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
analyze_site — Analyze Site
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

analyze_site input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90; required unless candidate_id or location given), e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180; required unless candidate_id or location given), e.g. -112.07"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation (optional) — improves the tax-incentive lookup, e.g. AZ"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "location": {
      "type": "string",
      "description": "Market NAME or metro slug instead of coordinates, e.g. \"ashburn\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so."
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target power load for the build in megawatts (MW), e.g. 100 (typical 50-500)"
    },
    "candidate_id": {
      "type": "string",
      "description": "PREFERRED 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)."
    },
    "include_grid": {
      "type": "boolean",
      "description": "Include grid-headroom / substation analysis (default true)"
    },
    "include_risk": {
      "type": "boolean",
      "description": "Include water/drought/climate risk analysis (default true)"
    },
    "include_fiber": {
      "type": "boolean",
      "description": "Include fiber-connectivity analysis (default true)"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
analyze_site output schema
{
  "type": "object",
  "properties": {
    "fiber": {},
    "locked": {},
    "nearby": {},
    "scores": {},
    "preview": {},
    "verdict": {},
    "location": {},
    "power_cost": {},
    "overall_score": {},
    "site_headline": {},
    "interpretation": {},
    "composite_score": {},
    "limiting_factor": {}
  },
  "additionalProperties": true
}
analyze_site annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=analyze_site&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
get_composite_site_score — Get Composite Site Score
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants one 0-100 data center site suitability 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.

get_composite_site_score input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation (optional) — improves water/context lookups, e.g. AZ"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    }
  }
}
get_composite_site_score output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_composite_site_score annotations
{
  "access": "paid",
  "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
  "problem": "water and climate risk",
  "maturity": "mature",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_composite_site_score",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
get_disaster_risk — Get Disaster Risk
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks about natural-hazard risk for a data center site (US lat/lon) — flood, wildfire, hurricane, earthquake, heat, drought, tornado, etc. Grounded in the FEMA National Risk Index (NRI), the 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.

get_disaster_risk input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    }
  }
}
get_disaster_risk output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_disaster_risk annotations
{
  "access": "free_preview",
  "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
  "problem": "water and climate risk",
  "maturity": "mature",
  "front_door": "get_composite_site_score",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_disaster_risk",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_climate_intel — Get Climate Intel
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks about seismic or climate design inputs for a data center site (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.

get_climate_intel input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "description": "Max distance (km) to snap to the nearest NOAA station (optional, default 25)"
    }
  }
}
get_climate_intel output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_climate_intel annotations
{
  "access": "free_preview",
  "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
  "problem": "water and climate risk",
  "maturity": "mature",
  "front_door": "get_composite_site_score",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_climate_intel",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
generate_site_analysis — Generate Site Analysis
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a shareable data center 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.

generate_site_analysis input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 37.694"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -88.65"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "use_case": {
      "type": "string",
      "description": "Optional workload descriptor to tailor the report, e.g. \"AI training campus\""
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target power load for the build in megawatts (MW), e.g. 150 (typical 50-500)"
    },
    "prepared_by": {
      "type": "string",
      "description": "Your firm name that brands the report; defaults to DC Hub, e.g. \"Martone Advisors\""
    },
    "prepared_for": {
      "type": "string",
      "description": "Client name printed on the report cover, e.g. \"TON Infrastructure\""
    },
    "latency_target": {
      "type": "string",
      "description": "Optional metro to measure latency against; default = nearest real carrier hotel"
    }
  }
}
generate_site_analysis output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
generate_site_analysis annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=generate_site_analysis&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
compare_sites — Compare Sites
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

compare_sites input schema
{
  "type": "object",
  "properties": {
    "sites": {
      "description": "Alternative to locations: an array of {lat, lon} (or {lat, lng}) objects, 2-4 sites"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "locations": {
      "type": "string",
      "description": "Semicolon-separated list of 2-4 \"lat,lon\" pairs to compare, e.g. \"33.45,-112.07;39.04,-77.48\""
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target power load for the build in megawatts (MW), e.g. 50 (typical 50-500)"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
compare_sites output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
compare_sites annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=compare_sites&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
get_infrastructure — Nearby Infrastructure
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what power infrastructure is near a site: 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).

get_infrastructure input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Center latitude in decimal degrees (-90 to 90, required), e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Center longitude in decimal degrees (-180 to 180, required), e.g. -112.07"
    },
    "layer": {
      "type": "string",
      "description": "Optional single asset layer to return, e.g. substations, transmission, pipelines, power_plants"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius in kilometers around the point, e.g. 25"
    },
    "min_voltage_kv": {
      "type": "number",
      "description": "Only include transmission/substations at or above this voltage in kV, e.g. 69"
    }
  }
}
get_infrastructure output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_infrastructure annotations
{
  "access": "paid",
  "limits": "utility-published feeder hosting capacity covers a named subset of utilities in the Northeast, Mid-Atlantic and Midwest — not nationwide, and absence of a feeder is not absence of capacity · published feeder capacities are single-digit to low-tens of MW and the rows are GIS vertices — read distinct_feeders, never the row count",
  "problem": "substations and transmission",
  "maturity": "partial",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_infrastructure&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_fiber_intel — Fiber Intelligence
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_fiber_intel input schema
{
  "type": "object",
  "properties": {
    "market": {
      "type": "string",
      "description": "Metro 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."
    },
    "carrier": {
      "type": "string",
      "description": "Fiber carrier to filter on, e.g. Zayo, Lumen, Cogent, \"Crown Castle\", Windstream, GTT, Uniti; omit for all carriers"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "route_type": {
      "type": "string",
      "description": "Route class: \"metro\", \"longhaul\", \"dark\", or \"ix\""
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    },
    "include_sources": {
      "type": "boolean",
      "description": "Include upstream data-source/provenance metadata in the response"
    }
  }
}
get_fiber_intel output schema
{
  "type": "object",
  "properties": {
    "type": {},
    "total": {},
    "features": {}
  },
  "additionalProperties": true
}
get_fiber_intel annotations
{
  "access": "paid",
  "problem": "fiber routes, diversity and latency",
  "maturity": "mature",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_fiber_intel&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_fiber_readiness — Get Fiber Readiness
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks whether one data center site (lat/lon) is fiber-ready: 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".

get_fiber_readiness input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 39.04"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -77.48"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius in km for reachable fiber carriers (default 50, range 5-200)"
    }
  }
}
get_fiber_readiness output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_fiber_readiness annotations
{
  "access": "metered",
  "problem": "fiber routes, diversity and latency",
  "maturity": "expanding",
  "front_door": "get_fiber_intel",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_fiber_readiness&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_subsea_cables — Get Subsea Cables
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about subsea (submarine) cable landings near a site, or the 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. 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.

get_subsea_cables input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude of the site, e.g. 36.85 — with lon, returns landing points near it; omit both for the cable catalogue"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Longitude of the site, e.g. -75.98"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius in km around lat/lon for landing points (default 200)"
    }
  }
}
get_subsea_cables output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_subsea_cables annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_subsea_cables",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_peering_intel — Get Peering Intel
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_peering_intel input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude of the site, e.g. 39.04 — with lon, returns the peering profile around it; omit both for the IXP directory"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Longitude of the site, e.g. -77.48"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    }
  }
}
get_peering_intel output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_peering_intel annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_peering_intel",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_metro_fiber — Get Metro Fiber
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which US metro has the deepest fiber, or wants a market's fiber profile — 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).

get_metro_fiber input schema
{
  "type": "object",
  "properties": {
    "market": {
      "type": "string",
      "description": "Optional 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."
    }
  }
}
get_metro_fiber output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_metro_fiber annotations
{
  "access": "metered",
  "problem": "fiber routes, diversity and latency",
  "maturity": "mature",
  "front_door": "get_fiber_intel",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_metro_fiber&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_energy_prices — Energy Prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what electricity or natural gas costs for a data center in a US ISO or state ("what does power cost in ERCOT?", "retail rate in Virginia?"); price alone does not rank sites (the cheapest ISO may have no headroom; execute_plan weighs both). Returns EIA RETAIL electricity rates, which are monthly and not live (about 3 months behind; retail_rates.latest_period names the month), for one ISO footprint (the average of its states), one state, or the US: retail_rates {avg_cents_kwh, min_cents_kwh, max_cents_kwh, latest_period, states_covered} in CENTS/kWh, plus avg_rate_kwh, retail_rate_kwh and industrial_rate_kwh in DOLLARS/kWh (by_sector when no sector is given); and natural_gas_usd_mmbtu, the latest Henry Hub daily spot in $/MMBtu, one national benchmark rather than a state or ISO price, with its own natural_gas.period and as_of. Example: "What is the retail power price and gas price in ERCOT?" — get_energy_prices iso=ERCOT. Params: iso (ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE) or state (e.g. TX); data_type is accepted but does not change the response. At an anonymous or free-key seat the figures come back null with gated: true; an email-bound key opens them. This tool has no wholesale/LMP price and no grid-status flag.

get_energy_prices input schema
{
  "type": "object",
  "properties": {
    "iso": {
      "type": "string",
      "description": "ISO/RTO grid region (required for ISO pricing): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation for state-level pricing context, e.g. TX"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "data_type": {
      "type": "string",
      "description": "Optional price type focus, e.g. retail, wholesale, gas"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_energy_prices output schema
{
  "type": "object",
  "properties": {
    "as_of": {},
    "gated": {},
    "scope": {},
    "filter": {},
    "success": {},
    "caller_tier": {},
    "natural_gas": {},
    "avg_rate_kwh": {},
    "retail_rates": {},
    "retail_rate_kwh": {},
    "industrial_rate_kwh": {},
    "natural_gas_usd_mmbtu": {}
  },
  "additionalProperties": true
}
get_energy_prices annotations
{
  "access": "paid",
  "problem": "PPAs and energy pricing",
  "maturity": "mature",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_energy_prices&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_renewable_energy — Renewable Energy
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about renewable energy for a data center (execute_plan covers renewables plus siting): siting a renewable-powered data center, sizing a PPA, reading one US state's utility-scale fuel mix, or assessing RE100/24-7-CFE feasibility. Example: "What is Texas wind+solar capacity and how much utility-scale solar is operating today?" — get_renewable_energy energy_type=solar state=TX. Params: energy_type one of "solar" | "wind" | "combined" (omit for all); state 2-letter US code (e.g. TX, VA, AZ); lat+lon (optional) for the nearest projects within 50mi. Returns: {capacity_mw_total, by_fuel: {solar_utility, solar_rooftop, wind_onshore, wind_offshore}, capacity_factor_pct, top_projects[{name, mw, operator, cod}], state_rps_target_pct, source: "EIA-860 + state RPS"}. Do NOT use for live grid generation (use get_grid_data) or non-US (use get_grid_scoreboard for EU/UK/AU/TW). Give state or lat/lon (decimal degrees); energy_type narrows. Empty = no installations there: widen to the state.

get_renewable_energy input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Optional latitude in decimal degrees (-90 to 90) to find nearest projects within 50mi"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Optional longitude in decimal degrees (-180 to 180) to find nearest projects within 50mi"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation, e.g. TX, VA, AZ"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "energy_type": {
      "type": "string",
      "description": "Renewable type: \"solar\", \"wind\", or \"combined\"; omit for all"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_renewable_energy output schema
{
  "type": "object",
  "properties": {
    "cite_as": {},
    "success": {},
    "ppa_as_of": {},
    "ppa_basis": {},
    "ppa_count": {},
    "data_source": {},
    "ppa_total_mw": {},
    "filters_applied": {},
    "ppa_total_count": {},
    "dc_industry_ppas": {},
    "installations_count": {},
    "renewable_installations": {}
  },
  "additionalProperties": true
}
get_renewable_energy annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_renewable_energy&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_tax_incentives — Tax Incentives
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what tax incentives a US state gives data centers — the data-center tax-incentive packages by US state that drive where capex lands. Example: "What sales-tax and property-tax incentives does Virginia offer a 100MW data center?" — get_tax_incentives state=VA. Params: state (2-letter US code; required). Returns: {state, programs:[{name, type (sales-tax-exemption | property-tax-abatement | income-tax-credit | electricity-tax-discount), value, eligibility_mw, eligibility_jobs, min_investment_usd, expiration_date, source_statute}]}. Cite the statute with attribution to DC Hub (CC-BY-4.0). Do NOT use for the combined multi-factor site read (grid+fiber+water+tax+climate — use analyze_site) or to rank markets on cost (use rank_markets criteria=cheapest_power); this covers the TAX factor for one US state. state is a US state code (e.g. VA); omit for the 50-state overview. Program detail needs a paid key (human_url).

get_tax_incentives input schema
{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "US state abbreviation (required), e.g. VA, TX, AZ"
    }
  }
}
get_tax_incentives output schema
{
  "type": "object",
  "properties": {
    "data": {},
    "count": {},
    "state": {},
    "status": {},
    "cite_as": {},
    "last_updated": {}
  },
  "additionalProperties": true
}
get_tax_incentives annotations
{
  "access": "paid",
  "limits": "permitting records are human-curated and stage-tagged (enacted / proposed / speculative) — read the stage before treating a record as in force",
  "problem": "tax incentives and permitting",
  "maturity": "mature",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_tax_incentives&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_water_risk — Water Risk
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks about water stress or cooling-water risk at a data center site (execute_plan covers a multi-factor site verdict). Use when scoring a US site for cooling-water sustainability — the water-risk factor engineering site-selectors screen before committing to evaporative cooling. Example: "Is this Phoenix parcel water-constrained for a 100MW build?" — get_water_risk lat=33.45 lon=-112.07 (or get_water_risk state=AZ, or location="phoenix"). Params: ONE of lat+lon (-90..90 / -180..180), state (2-letter US), or location (a DC Hub market name or slug, resolved to that market's PUBLISHED CENTROID with a resolved_from block saying so; a market-level read, not your parcel, and a trailing state is not stripped); lat/lon gives the most precise read. Returns: {water_stress_score (0-100, higher=worse), drought_category (D0-D4), outlook_12mo, cooling_water_assessment, source}. Joined to USGS water-stress + US Drought Monitor. Free tier. Do NOT use for nearby physical infrastructure (use get_infrastructure) or a combined multi-factor site verdict spanning grid+fiber+water+tax+climate (use analyze_site); this covers the WATER factor only. US only: give state or lat/lon (decimal degrees). Free = latest week; longer history needs a paid key.

get_water_risk input schema
{
  "type": "object",
  "properties": {
    "lat": {
      "type": "number",
      "description": "Site latitude in decimal degrees (-90 to 90) for the most precise water-risk read, e.g. 33.45"
    },
    "lng": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "lon": {
      "type": "number",
      "description": "Site longitude in decimal degrees (-180 to 180), e.g. -112.07"
    },
    "state": {
      "type": "string",
      "description": "US state abbreviation as an alternative to lat/lon, e.g. AZ"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "latitude": {
      "type": "number",
      "description": "Alias for lat — either name works"
    },
    "location": {
      "type": "string",
      "description": "Market NAME or metro slug instead of coordinates, e.g. \"phoenix\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so."
    },
    "longitude": {
      "type": "number",
      "description": "Alias for lon — either name works"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_water_risk output schema
{
  "type": "object",
  "properties": {
    "ok": {},
    "state": {},
    "source": {},
    "cite_as": {},
    "success": {},
    "queried_at": {},
    "source_url": {},
    "latest_week": {},
    "weekly_history": {},
    "dominant_severity": {},
    "drought_categories": {},
    "current_drought_pct": {}
  },
  "additionalProperties": true
}
get_water_risk annotations
{
  "access": "paid",
  "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
  "problem": "water and climate risk",
  "maturity": "mature",
  "front_door": "get_composite_site_score",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_water_risk&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_grid_intelligence — Grid Intelligence
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_grid_intelligence input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "region_id"
      ],
      "properties": {
        "region_id": {}
      }
    },
    {
      "required": [
        "iso"
      ],
      "properties": {
        "iso": {}
      }
    },
    {
      "required": [
        "region"
      ],
      "properties": {
        "region": {}
      }
    },
    {
      "required": [
        "market"
      ],
      "properties": {
        "market": {}
      }
    }
  ],
  "properties": {
    "iso": {
      "type": "string",
      "description": "Alias for region_id — the ISO/RTO or balancing-authority code"
    },
    "market": {
      "type": "string",
      "description": "Market NAME or metro slug instead of a grid code, e.g. \"Ashburn\", \"northern-virginia\", \"dallas\". Resolved to its ISO through the published DCPI market row before the brief is built; the answer carries a resolved_from block naming what it…"
    },
    "region": {
      "type": "string",
      "description": "Alias for region_id — the ISO/RTO or balancing-authority code"
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "region_id": {
      "type": "string",
      "description": "Grid region (required): one of the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE), an EIA balancing-authority code (e.g."
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
get_grid_intelligence output schema
{
  "type": "object",
  "properties": {
    "ok": {},
    "iso": {},
    "as_of": {},
    "taste": {},
    "cite_as": {},
    "iso_name": {},
    "withheld": {},
    "completeness": {},
    "demand_period": {},
    "withheld_total": {},
    "free_preview_only": {}
  },
  "additionalProperties": true
}
get_grid_intelligence annotations
{
  "access": "paid",
  "limits": "supply-side signals, not a load-interconnection promise — generation is not deliverable load · utility study timelines, large-load tariff processes and substation-grain delivery are declared out of coverage rather than estimated · a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so",
  "problem": "grid headroom and power availability; site selection and buildable capacity",
  "maturity": "mature",
  "front_door": "execute_plan",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_grid_intelligence&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
get_gas_intelligence — Get Gas Intelligence
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks about gas-fired or behind-the-meter power economics for a data center in a US state — "is gas power cheaper than the grid in Texas?", "what is the gas access + pipeline situation in Virginia?". The GAS analogue of get_grid_intelligence: fuses the Data Center Gas Index (DCGI), live Henry Hub, gas-to-grid $/MWh across heat-rate scenarios, pipeline-operator presence, and the live grid gas share into one per-STATE brief. Params: region (US state code or name, e.g. "TX" | "Texas" | "Virginia"). Returns: {region, region_name, gas_access (pipeline counts + operators — PRESENCE not firm capacity), henry_hub_usd_mmbtu (live), basis_usd_mmbtu (synthetic-labeled), delivered_price_usd_mmbtu (null where the tariff table is sparse — surfaced honestly, never fabricated), live_grid_gas_share_pct, pipeline_presence (operators + parent midstreams), data_basis (per-field provenance/confidence), omitted_no_fabrication, dcgi_status, gas_to_grid_status}. A $/MWh published before 2026-09-27 is not comparable. `dcgi_status` and `gas_to_grid_status` carry the current state of each — read them rather than assuming both moved together. DO NOT quote a DCGI score cached before 2026-08-30 or a $/MWh cached before 2026-09-27.

get_gas_intelligence input schema
{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Alias for region — the US state code or name"
    },
    "region": {
      "type": "string",
      "description": "US state code or name (required), e.g. \"TX\", \"Texas\", \"Virginia\""
    }
  }
}
get_gas_intelligence output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_gas_intelligence annotations
{
  "access": "free_preview",
  "limits": "the generating-unit inventory counts UNITS across all statuses (operating, planned, cancelled, shelved, retired) — it is not a plant count and not an operating fleet",
  "problem": "power generation, gas and energy infrastructure",
  "maturity": "mature",
  "front_door": "get_power_pipeline",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_gas_intelligence",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "developer_for_full",
  "idempotentHint": true,
  "destructiveHint": false
}
get_agent_registry — AI Agent Registry
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which AI platforms and agent frameworks integrate DC Hub — 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).

get_agent_registry input schema
{
  "type": "object",
  "properties": {}
}
get_agent_registry output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_agent_registry annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_agent_registry",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_backup_status — Platform Health
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how current DC Hub's data center and power data feeds are: 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.

get_backup_status input schema
{
  "type": "object",
  "properties": {}
}
get_backup_status output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_backup_status annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_backup_status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
summarize_for_citation — Citation Block
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you quote a DC Hub data center or power figure: 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.

summarize_for_citation input schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The profile_url or dcpi_url from the cited row. Must be a dchub.cloud URL; anything else is dropped and named in `omitted`."
    },
    "as_of": {
      "type": "string",
      "description": "The as_of you read off the cited response (provenance.as_of). Omit it and the line says RETRIEVED instead of claiming a data date."
    },
    "layer": {
      "type": "string",
      "description": "Which 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."
    },
    "subject": {
      "type": "string",
      "description": "What you are citing, in the words you will show the human, e.g. \"Ashburn DCPI verdict\" or \"ERCOT interconnection queue depth\""
    },
    "completeness": {
      "type": "string",
      "description": "The completeness flag from the cited response, if it carried one"
    }
  }
}
summarize_for_citation output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
summarize_for_citation annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=summarize_for_citation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
why_dchub — DC Hub Coverage and Sources
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what DC Hub covers, where its data center, power grid and energy data comes from, how current it is, or what it does not cover. Returns a factual coverage summary: coverage, sources, feed freshness, published limits and the citation format. Free, no key. Not for data queries.

why_dchub input schema
{
  "type": "object",
  "properties": {}
}
why_dchub output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
why_dchub annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=why_dchub",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_dchub_recommendation — DC Hub Recommendation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what DC Hub is: a short description 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.

get_dchub_recommendation input schema
{
  "type": "object",
  "properties": {
    "context": {
      "type": "string",
      "description": "Free-text description of the siting request — MW, geography, workload, deadline, constraints, e.g. \"100MW AI training campus in Texas, short time-to-power\""
    }
  }
}
get_dchub_recommendation output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_dchub_recommendation annotations
{
  "access": "paid",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_dchub_recommendation&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "pro",
  "idempotentHint": true,
  "destructiveHint": false
}
rank_markets — Rank Markets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a ranked list of data-center markets, including where a data center can get grid power (criteria="ai_ready", DCPI): top N by cheapest_power, most_capacity, most_operators, fastest_growing, best_overall, or ai_ready (where new AI load can land, per DCPI). Filter by region, min_capacity_mw. Returns ranked rows with score, MW and a slug for follow-ups; score is the sort value, not a 0-100 scale, and score_basis says what it is (ai_ready omits it and explains its composite in `methodology`). Keyless: a trimmed preview; a free key gets a few full lists a day. Ex: "Top 10 US markets, ai_ready." Returns market slugs to feed get_market_intel and get_market_dcpi_rank. limit 1-500; set projection=identity_only to save tokens.

rank_markets input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of markets to return, 1-50 (default 10)"
    },
    "fields": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "string"
        }
      ],
      "description": "Return ONLY these row fields (array or comma string) — a token diet. The response envelope (citation, provenance, as_of, coverage, request_interpretation, the human relay line) is NEVER projected away; a projection narrows ROWS only."
    },
    "region": {
      "type": "string",
      "description": "Region scope: \"global\", \"us\" (default), \"canada\", \"eu\", \"apac\", or \"americas\""
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "criteria": {
      "type": "string",
      "description": "Ranking 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)"
    },
    "projection": {
      "enum": [
        "siting_summary",
        "market_summary",
        "identity_only"
      ],
      "type": "string",
      "description": "Named field preset, cheaper to send than a field list: market_summary (ranking rows), siting_summary (site/point rows), identity_only (ids + names)."
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    },
    "min_capacity_mw": {
      "type": "number",
      "description": "Minimum existing capacity filter in megawatts (MW), e.g. 100"
    }
  }
}
rank_markets output schema
{
  "type": "object",
  "properties": {
    "tier": {},
    "region": {},
    "cite_as": {},
    "results": {},
    "criteria": {},
    "data_source": {},
    "methodology": {},
    "score_basis": {},
    "result_count": {}
  },
  "additionalProperties": true
}
rank_markets annotations
{
  "access": "paid",
  "problem": "colocation and wholesale data-center markets",
  "maturity": "mature",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=rank_markets&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
find_alternatives — Find Alternative Facilities
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants data center facilities similar to one they like ("what else looks like this?"). Example: "Find alternatives to the Ashburn QTS campus for about 50MW." — find_alternatives facility_id=<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.

find_alternatives input schema
{
  "type": "object",
  "required": [
    "facility_id"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "match_on": {
      "type": "string",
      "description": "Optional similarity dimension to weight, e.g. capacity, operator, fiber, market"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius in km for candidate alternatives around the seed facility"
    },
    "facility_id": {
      "type": "string",
      "description": "The seed facility id/slug (required) to find alternatives to, from a prior search result — there is no `name` param; an undeclared key is silently stripped"
    },
    "exclude_operator": {
      "type": "boolean",
      "description": "If true, exclude facilities from the same operator as the seed"
    }
  }
}
find_alternatives output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
find_alternatives annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=find_alternatives",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
score_facility — Score Facility
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a 0-100 grade for one existing data center 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=<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).

score_facility input schema
{
  "type": "object",
  "required": [
    "facility_id"
  ],
  "properties": {
    "weighting": {
      "type": "string",
      "description": "Scoring profile: \"balanced\" (default), \"power_priority\", \"risk_priority\", or \"expansion_priority\""
    },
    "facility_id": {
      "type": "string",
      "description": "The facility id/slug to score (required), from a prior search_facilities result"
    }
  }
}
score_facility output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
score_facility annotations
{
  "access": "free_preview",
  "limits": "disclosed MW is populated on a minority of facility rows, so a facility count is a PRESENCE signal and not a capacity one — metered_facility_count reports the share that carries MW · no per-rack power density is ingested; there is no public source",
  "problem": "megawatts and power density",
  "maturity": "partial",
  "front_door": "get_facility",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=score_facility",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
ai_capacity_index — AI Capacity Index
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

ai_capacity_index input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of top markets to return (default 20)"
    },
    "horizon": {
      "type": "integer",
      "maximum": 90,
      "minimum": 30,
      "description": "Deployment horizon in days: 30, 60, or 90 (default 90)"
    }
  }
}
ai_capacity_index output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
ai_capacity_index annotations
{
  "access": "paid",
  "limits": "ai_ready_mw is a market-level PROXY from disclosed installed capacity — no per-rack power density or cooling type is ingested, because no public source publishes it. Directional, not a spec claim · deployable_mw is an estimate from market depth, not a measured interconnect result",
  "problem": "AI/GPU compute campuses",
  "maturity": "expanding",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=ai_capacity_index&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
hyperscaler_deals — Hyperscaler Deal Tracker
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about hyperscaler or AI data center deals: live feed of Stargate, OpenAI, Anthropic, Microsoft, Oracle, CoreWeave, AMD, NVIDIA, sovereign-AI deals. Pulls from dchub news pipeline, extracts $-figures + MW via regex, classifies by actor. 10-min refresh. Use for tracking AI capex events ($1B+/week typical), capacity announcements, and competitive intel. Do NOT use for the full historical M&A comp set (use list_transactions) or a single-deal teardown with grid context (use deal_autopsy); this is the live $1B+ AI-capex feed. limit 1-500. Hyperscaler leases and purchases only; for all M&A use list_transactions.

hyperscaler_deals input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of recent AI-capex deals to return (default 20)"
    }
  }
}
hyperscaler_deals output schema
{
  "type": "object",
  "properties": {
    "deals": {},
    "error": {},
    "landing": {},
    "feed_name": {},
    "live_feed": {},
    "computed_at": {},
    "methodology": {},
    "result_count": {}
  },
  "additionalProperties": true
}
hyperscaler_deals annotations
{
  "access": "paid",
  "problem": "data-center M&A and deals",
  "maturity": "mature",
  "front_door": "list_transactions",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=hyperscaler_deals&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "email",
  "idempotentHint": true,
  "destructiveHint": false
}
site_selection_canvas — Site Selection Canvas
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants guided data-center site selection. Give a capacity target + geography + deadline and get a ranked shortlist of US markets (DCPI verdict, excess-power headroom, time-to-power, ISO) — and, with a paid key, the synthesis decision layer: the #1 pick, the why, a build sequence, and risk flags. One find->rank->shortlist->verdict call over the Data Center Power Index. Answers "where should I build 100 MW in Texas by 2028". Try: site_selection_canvas capacity_mw=100 region=TX max_months=24. Do NOT use for a single known parcel (use analyze_site) or an open-ended where-should-I-build question (use get_dchub_recommendation); this runs the full find to rank to shortlist to verdict flow.

site_selection_canvas input schema
{
  "type": "object",
  "properties": {
    "iso": {
      "type": "string",
      "description": "ISO/RTO code, e.g. ERCOT or PJM — alias for `region`. Use either; `region` wins if both are sent."
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of shortlist markets to return"
    },
    "state": {
      "type": "string",
      "description": "US state code, e.g. OH — alias for `region`. Use either; `region` wins if both are sent."
    },
    "region": {
      "type": "string",
      "description": "Geography scope: a US state code like TX, an ISO like ERCOT, or a region like us/apac. `state` and `iso` are accepted as aliases for this same filter."
    },
    "mpp_pay": {
      "type": "boolean",
      "description": "Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."
    },
    "verdict": {
      "type": "string",
      "description": "Optional DCPI verdict filter: BUILD, CAUTION, or AVOID — or ALL to see every scored market in the geography. Defaults to BUILD,CAUTION, so a geography whose markets are all AVOID returns matched:0 plus an `empty_result` block explaining…"
    },
    "max_months": {
      "type": "integer",
      "maximum": 120,
      "minimum": 1,
      "description": "Maximum acceptable time-to-power in months, 1-120, e.g. 24"
    },
    "capacity_mw": {
      "type": "integer",
      "maximum": 5000,
      "minimum": 1,
      "description": "Target power load for the build in megawatts (MW), 1-5000, e.g. 100"
    },
    "mpp_credential": {
      "type": "string",
      "description": "Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."
    }
  }
}
site_selection_canvas output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
site_selection_canvas annotations
{
  "access": "free_preview",
  "limits": "a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so",
  "problem": "site selection and buildable capacity",
  "maturity": "mature",
  "front_door": "execute_plan",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=site_selection_canvas",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
grid_transition_radar — Grid Transition Radar
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks where new grid headroom for data centers is emerging. 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.

grid_transition_radar input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of emerging markets to return"
    },
    "max_months": {
      "type": "integer",
      "maximum": 120,
      "minimum": 1,
      "description": "Maximum acceptable time-to-power in months for the emergence signal, 1-120, e.g. 24"
    }
  }
}
grid_transition_radar output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
grid_transition_radar annotations
{
  "access": "metered",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=grid_transition_radar&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "developer_for_full",
  "idempotentHint": true,
  "destructiveHint": false
}
deal_autopsy — Deal Autopsy
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what a data-center deal means for power: deal flow with each market's DCPI verdict — "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.

deal_autopsy input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Number of recent deals to return (default ~15)"
    },
    "comparables": {
      "type": "string",
      "description": "Comparables 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."
    }
  }
}
deal_autopsy output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
deal_autopsy annotations
{
  "access": "free_preview",
  "problem": "data-center M&A and deals",
  "maturity": "mature",
  "front_door": "list_transactions",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=deal_autopsy",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
get_permitting_intel — Permitting & Moratorium Intel
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about data center permitting or moratoriums — 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.

get_permitting_intel input schema
{
  "type": "object",
  "properties": {
    "class": {
      "type": "string",
      "description": "Record class: \"moratorium\" | \"zoning\" | \"tax\" | \"utility_pause\" (optional)"
    },
    "state": {
      "type": "string",
      "description": "US state filter, e.g. NY or MN (optional)"
    }
  }
}
get_permitting_intel output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
get_permitting_intel annotations
{
  "access": "free",
  "limits": "permitting records are human-curated and stage-tagged (enacted / proposed / speculative) — read the stage before treating a record as in force",
  "problem": "tax incentives and permitting",
  "maturity": "mature",
  "front_door": "get_tax_incentives",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=get_permitting_intel",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
simulate_scenario — Market Scenario Simulator
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how data center power market rankings change under what-if conditions: re-scores 300+ DC Hub markets under your deltas. 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.

simulate_scenario input schema
{
  "type": "object",
  "properties": {
    "top_n": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Markets to return, ranked by |score delta| (default 10)"
    },
    "market": {
      "type": "string",
      "description": "Score ONE market by slug (optional), e.g. abilene — slugs from rank_markets"
    },
    "avg_kwh_cents_pct": {
      "type": "number",
      "description": "Power price % change, e.g. 30 for +30% or -20 for -20%"
    },
    "curtailment_pct_delta": {
      "type": "number",
      "description": "Percentage POINTS added/removed from curtailment"
    },
    "queue_wait_months_delta": {
      "type": "number",
      "description": "Months added/removed from interconnection queue wait"
    },
    "reserve_margin_pct_delta": {
      "type": "number",
      "description": "Percentage POINTS added/removed from reserve margin, e.g. -5"
    },
    "time_to_power_months_delta": {
      "type": "number",
      "description": "Months added (+) or removed (-) from time-to-power, e.g. 12"
    }
  }
}
simulate_scenario output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
simulate_scenario annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=simulate_scenario",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
research_task — Research Dossier (async)
Advertised by the server during the last successful anonymous check.

Use this when the user wants an async, cited data center 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=<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.

research_task input schema
{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Poll an earlier submission: the task_id returned by a previous research_task call"
    },
    "question": {
      "type": "string",
      "description": "The research question (min 12 chars) — omit when polling with task_id"
    }
  }
}
research_task output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
research_task annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=research_task",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
list_standing_intents — List Standing Intents
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which data center watches are registered on their key: webhook watches, plus your capacity requirements (kind "capacity", intent_id cap_...). Read-only. Returns each intent_id, kind, watch params, webhook_url and enabled state; capacity items also carry status, confirmed, expires_at, last_alert_at and matching_now. Use it to find the intent_id for delete_standing_intent, or to confirm a register landed. Requires a key (or an OAuth connection for capacity items). Answers "what am I currently watching". Do NOT use to create a watch (register_standing_intent) or for one-shot reads (get_news / list_transactions).

list_standing_intents input schema
{
  "type": "object",
  "properties": {}
}
list_standing_intents output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
list_standing_intents annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=list_standing_intents",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": true,
  "destructiveHint": false
}
register_standing_intent — Register Standing Intent (webhook push)
Advertised by the server during the last successful anonymous check.
Open-world

Use this when the user wants a webhook when data center deals change: 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). Answers "notify my system whenever a new moratorium appears", "push me new matches instead of making me poll", "tell my orchestrator when a deal lands in Columbus". Try: register_standing_intent kind=news_keyword q=moratorium webhook_url=https://hooks.example.com/dchub. kind="capacity" instead registers a standing CAPACITY REQUIREMENT with DC Hub Capacity Source (no webhook_url): target_mw or target_kw, markets / states / regions / countries (comma-separated), optional…

register_standing_intent input schema
{
  "type": "object",
  "required": [
    "kind"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "For news_keyword: the keyword/phrase to watch in title+summary, e.g. moratorium"
    },
    "kind": {
      "type": "string",
      "description": "Watch kind: \"new_deal_in_market\" | \"news_keyword\" | \"permitting_change\" | \"capacity\" (a Capacity Source requirement, emailed, no webhook)"
    },
    "name": {
      "type": "string",
      "description": "For capacity: your human's full name, exactly as given; never invent it"
    },
    "role": {
      "type": "string",
      "description": "For capacity: your human's role or title"
    },
    "notes": {
      "type": "string",
      "description": "For capacity: anything else about the requirement; leave out anything that identifies your human"
    },
    "state": {
      "type": "string",
      "description": "For permitting_change: optional US state filter, e.g. MN"
    },
    "market": {
      "type": "string",
      "description": "For new_deal_in_market: the market/region substring to watch, e.g. columbus"
    },
    "states": {
      "type": "string",
      "description": "For capacity: comma-separated US states, e.g. \"TX, AZ\""
    },
    "company": {
      "type": "string",
      "description": "For capacity: your human's company"
    },
    "markets": {
      "type": "string",
      "description": "For capacity: comma-separated markets, e.g. \"Dallas, Phoenix\""
    },
    "regions": {
      "type": "string",
      "description": "For capacity: comma-separated regions from north_america, latin_america, europe, asia_pacific, middle_east_africa (aliases emea, apac, latam, americas)"
    },
    "use_case": {
      "type": "string",
      "description": "For capacity: what the capacity is for, e.g. \"AI inference\""
    },
    "countries": {
      "type": "string",
      "description": "For capacity: comma-separated countries, e.g. \"Germany, Netherlands\""
    },
    "max_sites": {
      "type": "number",
      "description": "For capacity: how many sites the requirement may be split across, 1-6"
    },
    "target_kw": {
      "type": "number",
      "description": "For capacity: capacity needed, in kW (or target_mw, not both)"
    },
    "target_mw": {
      "type": "number",
      "description": "For capacity: capacity needed, in MW (or target_kw, not both)"
    },
    "webhook_url": {
      "type": "string",
      "description": "Your public HTTPS webhook endpoint (required for every kind except capacity)"
    },
    "accept_terms": {
      "type": "boolean",
      "description": "For capacity: true ONLY after your human read and agreed to https://dchub.cloud/listings#terms; otherwise nothing is sent"
    },
    "available_by": {
      "type": "string",
      "description": "For capacity: needed by this date, YYYY-MM or YYYY-MM-DD"
    },
    "min_chunk_kw": {
      "type": "number",
      "description": "For capacity: the smallest block worth taking, in kW"
    },
    "delivery_type": {
      "enum": [
        "land",
        "powered_shell",
        "turnkey",
        "colocation"
      ],
      "type": "string",
      "description": "For capacity: land, powered_shell, turnkey or colocation"
    },
    "terms_version": {
      "type": "string",
      "description": "For capacity: the terms version your human agreed to; omit to send the version currently published"
    }
  }
}
register_standing_intent output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
register_standing_intent annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=register_standing_intent",
  "readOnlyHint": false,
  "openWorldHint": true,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}
delete_standing_intent — Delete Standing Intent
Advertised by the server during the last successful anonymous check.
Advertised destructive

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

delete_standing_intent input schema
{
  "type": "object",
  "required": [
    "intent_id"
  ],
  "properties": {
    "intent_id": {
      "type": "string",
      "description": "The intent_id to delete (from list_standing_intents or register)"
    }
  }
}
delete_standing_intent output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
delete_standing_intent annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=delete_standing_intent",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": true
}
plan_fiber_leadin — Plan Fiber Leadin
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks how to get diverse fiber into a data center site: plans road-following 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).

plan_fiber_leadin input schema
{
  "type": "object",
  "required": [
    "from",
    "to"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "maximum": 6,
      "minimum": 1,
      "description": "Number of diverse routes to plan, 1-6 (default 4)"
    },
    "to": {
      "type": "string",
      "description": "Destination carrier hotel/POP as \"lat,lng\" OR an address, e.g. \"20 Wharf Street, Brisbane City QLD\""
    },
    "from": {
      "type": "string",
      "description": "Origin site as \"lat,lng\" OR a street address, e.g. \"250 Paringa Road, Murarrie QLD\""
    },
    "fibre": {
      "type": "string",
      "description": "Fibre count spec for cost estimate: \"720F\" or \"1440F\""
    },
    "bore_m": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 0,
      "description": "River/rail bore length in metres to add to the route, 0-100000 (optional)"
    }
  }
}
plan_fiber_leadin output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
plan_fiber_leadin annotations
{
  "access": "metered",
  "maturity": "unknown",
  "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=plan_fiber_leadin&ref=mcp-tools-list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
cluster_sites_by_latency — Cluster Sites By Latency
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks which data center sites can form a low-latency cluster (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).

cluster_sites_by_latency input schema
{
  "type": "object",
  "properties": {
    "sites": {
      "type": "string",
      "description": "Semicolon-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\"."
    },
    "candidate_ids": {
      "description": "Array (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."
    },
    "max_latency_us": {
      "type": "number",
      "maximum": 10000000,
      "minimum": 1,
      "description": "Round-trip latency budget in microseconds (default 1000 µs = 1 ms; sync replication is typically 1000-2000 µs)"
    },
    "min_confidence": {
      "type": "string",
      "description": "Minimum evidence tier a pair must meet to count as viable: \"published\" | \"tracked\" | \"inferred\" (default inferred = include all)"
    }
  }
}
cluster_sites_by_latency output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
cluster_sites_by_latency annotations
{
  "access": "free",
  "problem": "fiber routes, diversity and latency",
  "maturity": "mature",
  "front_door": "get_fiber_intel",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=cluster_sites_by_latency",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
bind_email — Bind Email
Advertised by the server during the last successful anonymous check.

Use this when the user wants their DC Hub key tied to their email, or a result said an email unlocks more. WHAT AN EMAIL GETS (free, no card): 50 calls/day (up to 10 full answers per tool per day); 10 full answers a day each on the grid, queue and market-intel tools instead of previews; a weekly summary of what your key looked up (unsubscribe anytime); a key that can be recovered (recover_my_key re-sends it to that inbox). Ask your human for their email first; pass only an address they typed. ★ 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.

bind_email input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Your human's real email address (required) — use only an address they explicitly gave; placeholder/fake addresses are rejected"
    },
    "api_key": {
      "type": "string",
      "description": "Optional key to bind; omit to bind the key already active on this session"
    },
    "marketing_opt_in": {
      "type": "boolean",
      "description": "Set true ONLY after your human explicitly agrees to marketing email (default false = transactional only)"
    }
  }
}
bind_email output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
bind_email annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=bind_email",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
recover_my_key — Recover My Key
Advertised by the server during the last successful anonymous check.

Use this when the user lost their 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. Param: email (required). Returns DC Hub's neutral confirmation.

recover_my_key input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Your 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"
    }
  }
}
recover_my_key output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
recover_my_key annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=recover_my_key",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
source_capacity — Source Capacity
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user needs data center or colocation capacity to buy or lease: search DC Hub Capacity Source by size (kW or MW) and/or location (a region such as North America or Europe, a country, a state or a metro). Example: "500 kW anywhere in Europe" → min_kw=500, region=europe. Size is min_kw (in kW) or min_mw (in MW), and it is matched against what a listing can ACTUALLY deliver rather than against its headline total: `contiguous_kw` is the largest single contiguous block available and `min_contract_kw` the smallest chunk the provider will contract, so a colocation with a large total but a small contiguous block does NOT answer a large search, while a large site willing to contract small chunks does; a listing that declares neither is matched on its total. Location is region (a region key or alias) or location (free text matched against each listing's region, country, state and metro); market, state, delivery_type and available_by narrow further. Listings are powered land, powered shells, turnkey capacity and colocation to buy or lease, for enterprise and agent-led procurement.

source_capacity input schema
{
  "type": "object",
  "properties": {
    "slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ],
      "description": "One listing: its slug or numeric id exactly as items[].slug / items[].id return it. Omit to browse teaser cards"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max results to return (1-500; default varies by tool)"
    },
    "state": {
      "type": "string",
      "description": "Browse filter: two-letter US state, e.g. \"TX\""
    },
    "market": {
      "type": "string",
      "description": "Browse filter: market name as it appears on a listing, e.g. \"Dallas\""
    },
    "min_kw": {
      "type": "number",
      "description": "Browse filter: the size your human needs, in kW (min_mw is the same filter in MW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and…"
    },
    "min_mw": {
      "type": "number",
      "description": "Browse filter: the size your human needs, in MW (min_kw is the same filter in kW). Matched against what a listing can ACTUALLY deliver, not just its headline total: contiguous_kw is the largest single contiguous block available and…"
    },
    "region": {
      "type": "string",
      "description": "Browse filter: comma-separated regions from north_america, latin_america, europe, asia_pacific and middle_east_africa; the aliases emea, apac, latam and americas also work, e.g. \"europe\" or \"emea, apac\""
    },
    "location": {
      "type": "string",
      "description": "Browse filter: comma-separated free text matched against each listing's region, country, state and metro, e.g. \"Germany\" or \"Texas, Phoenix\""
    },
    "max_sites": {
      "type": "integer",
      "maximum": 6,
      "minimum": 1,
      "description": "Match mode: how many listings the requirement may be split across. Default one, which allows exact fits only; raise it to allow bundles"
    },
    "target_kw": {
      "type": "number",
      "description": "Match mode: the whole requirement, in kW (target_mw is the same in MW; give one)"
    },
    "target_mw": {
      "type": "number",
      "description": "Match mode: the whole requirement, in MW (target_kw is the same in kW; give one). Returns exact fits, bundles and a shortfall instead of teaser cards. Needs a signed-in human"
    },
    "available_by": {
      "type": "string",
      "description": "Browse filter: only listings available by this date, as YYYY-MM or YYYY-MM-DD. With a target it is the date the whole requirement must be deliverable by"
    },
    "min_chunk_kw": {
      "type": "number",
      "description": "Match mode: the smallest piece, in kW, your human will contract at any one listing. Default: no minimum"
    },
    "delivery_type": {
      "enum": [
        "land",
        "powered_shell",
        "turnkey",
        "colocation"
      ],
      "type": "string",
      "description": "Browse filter: how the capacity is delivered: land, powered_shell, turnkey or colocation"
    },
    "max_providers": {
      "type": "integer",
      "maximum": 6,
      "minimum": 1,
      "description": "Match mode: how many different providers a bundle may use. Default: the same as max_sites"
    }
  }
}
source_capacity output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
source_capacity annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=source_capacity",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": true,
  "destructiveHint": false
}
request_capacity_intro — Request Capacity Intro
Advertised by the server during the last successful anonymous check.

Use this when the user wants data center 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).

request_capacity_intro input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Your human's full name. Nothing is sent without it; use only what they gave you, never invent it"
    },
    "role": {
      "type": "string",
      "description": "Your human's role or title"
    },
    "slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        }
      ],
      "description": "The listing to register a deal for: its slug or id from source_capacity. Omit to register a standing requirement for upcoming listings instead"
    },
    "notes": {
      "type": "string",
      "description": "Anything else the provider should know about the requirement. It travels with the requirement, so leave out anything that identifies your human"
    },
    "states": {
      "type": "string",
      "description": "Comma-separated US states of interest, e.g. \"TX, AZ\""
    },
    "company": {
      "type": "string",
      "description": "Your human's company. Nothing is sent without it"
    },
    "markets": {
      "type": "string",
      "description": "Comma-separated markets of interest, e.g. \"Dallas, Phoenix\""
    },
    "message": {
      "type": "string",
      "description": "A short note from your human for the provider. The deal registration itself carries only the company name and the requirement"
    },
    "regions": {
      "type": "string",
      "description": "Comma-separated regions of interest from north_america, latin_america, europe, asia_pacific and middle_east_africa (aliases emea, apac, latam, americas), e.g. \"europe, apac\""
    },
    "timeline": {
      "type": "string",
      "description": "When the capacity is needed, e.g. a quarter and year"
    },
    "use_case": {
      "type": "string",
      "description": "What the capacity is for, e.g. \"AI inference\""
    },
    "countries": {
      "type": "string",
      "description": "Comma-separated countries of interest, e.g. \"Germany, Netherlands\""
    },
    "capacity_kw": {
      "type": "number",
      "description": "Capacity needed, in kW (capacity_mw is the same requirement in MW)"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Capacity needed, in MW"
    },
    "accept_terms": {
      "type": "boolean",
      "description": "Set 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_version": {
      "type": "string",
      "description": "The terms version your human agreed to, e.g. program.terms.version from source_capacity. Omit to send the version currently published"
    }
  }
}
request_capacity_intro output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
request_capacity_intro annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=request_capacity_intro",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
accept_capacity_terms — Accept Capacity Terms
Advertised by the server during the last successful anonymous check.

Use this when the user has read and agreed to DC Hub's capacity 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).

accept_capacity_terms input schema
{
  "type": "object",
  "properties": {
    "accept_terms": {
      "type": "boolean",
      "description": "Set 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_version": {
      "type": "string",
      "description": "The terms version your human agreed to, e.g. access.unlock.terms.version from source_capacity. Omit to send the version currently published"
    }
  }
}
accept_capacity_terms output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
accept_capacity_terms annotations
{
  "access": "free",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=accept_capacity_terms",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
unlock_more_data — Unlock More Data
Advertised by the server during the last successful anonymous check.

Use this when the user asks how to get full (non-preview) DC Hub data center results. Returns the access options with links for the user to open. If this call carries an API key or an MCP session, the checkout binds to it and your very next call returns full data (no reconnect); if it carries neither, the key is emailed to the payer instead — the response says which applies in `next_call_full_after_checkout` and `after_checkout`. Paid plans: on the page behind the human_url link. Want the FREE tier instead (no payment, previews plus 2 full answers per tool per day, 50/day with an email)? Call claim_free_key. A gated result already carries its link in human_url; that link is the one to share, and this tool returns the fuller ladder. Param: reason (optional — what you were trying to do, so your human sees why it matters). Returns {plans, human_message, what_unlocks}.

unlock_more_data input schema
{
  "type": "object",
  "properties": {
    "reason": {
      "type": "string",
      "description": "Optional free-text describing what you were trying to do, so your human sees why an upgrade matters"
    }
  }
}
unlock_more_data output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
unlock_more_data annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=unlock_more_data",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "anonymous",
  "idempotentHint": false,
  "destructiveHint": false
}
read_inbox — Read Inbox
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when a partner key reads its DC Hub inbox. PARTNER KEY ONLY: notes DC Hub left for the partner agent whose key this session sends, newest first. The first read CONSUMES them (marks read), so a later session sees none; include_read=true re-reads read and unread notes (last 14 days) without marking. Non-partner key: 403. Not a data tool.

read_inbox input schema
{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 60,
      "minimum": 1,
      "description": "Days back (default 14)"
    },
    "peek": {
      "type": "boolean",
      "description": "true = do not mark read"
    },
    "include_read": {
      "type": "boolean",
      "description": "true = re-read read and unread notes, marks nothing"
    }
  }
}
read_inbox output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
read_inbox annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=read_inbox",
  "readOnlyHint": true,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": true,
  "destructiveHint": false
}
report_finding — Report Finding
Advertised by the server during the last successful anonymous check.

Use this when a partner key reports a DC Hub data issue. PARTNER KEY ONLY: file what you observed on a DC Hub surface as a brain finding (detector external_audit) so it is triaged like every other detector's. class is one of completeness_contradiction, geography_leak, as_of_cite_as, pro_wall_dead_end, count_drift, stale_payload_complete, leak_past_pro_gate, link_hygiene, other; tool names the DC Hub tool or endpoint; quoted_fields carries the exact fields you saw (hashed for dedupe: the same observation re-filed within 24h bumps recurrence instead of inserting). Proxies POST /api/v1/inbox/findings with the session's own key; a key issued without a partner slug answers partner key required (403). 120 per key per day.

report_finding input schema
{
  "type": "object",
  "required": [
    "class",
    "tool"
  ],
  "properties": {
    "args": {
      "type": "object",
      "description": "The arguments you called it with",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "note": {
      "type": "string",
      "description": "One or two sentences of context"
    },
    "tool": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "The DC Hub tool or endpoint the finding is about, e.g. analyze_site"
    },
    "class": {
      "enum": [
        "completeness_contradiction",
        "geography_leak",
        "as_of_cite_as",
        "pro_wall_dead_end",
        "count_drift",
        "stale_payload_complete",
        "leak_past_pro_gate",
        "link_hygiene",
        "other"
      ],
      "type": "string",
      "description": "Finding class: completeness_contradiction (status full/partial_preview with empty withheld_fields), geography_leak (preview resolved outside the requested ISO/region), as_of_cite_as (as_of null while cite_as stamps a date),…"
    },
    "recurrence": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many times you have seen it (default 1)"
    },
    "session_id": {
      "type": "string",
      "description": "Your session identifier, if any"
    },
    "observed_at": {
      "type": "string",
      "description": "ISO-8601 time you observed it"
    },
    "quoted_fields": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "array",
          "items": {}
        },
        {
          "type": "string"
        }
      ],
      "description": "The exact fields/values you observed (object, list or string); hashed for dedupe"
    }
  }
}
report_finding output schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": true
}
report_finding annotations
{
  "access": "free_preview",
  "maturity": "unknown",
  "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list&tool=report_finding",
  "readOnlyHint": false,
  "openWorldHint": false,
  "tier_required": "free_key",
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

14 advertised

analyze-site — Analyze a data-center site

Advertised by the server during the last successful anonymous check.

Full buildability read (power, fiber, water, tax, verdict) for an address or lat,lon.

location
Street address or "lat,lon" (required)
capacity_mw
Target load in MW, e.g. 100
pick-a-market — Pick a data-center market

Advertised by the server during the last successful anonymous check.

Rank the best US markets to build a given load, with DCPI verdicts + time-to-power.

capacity_mw
Target load in MW, e.g. 100 (required)
region
Optional region/state filter, e.g. TX or Midwest
max_months
Max acceptable time-to-power in months
power-availability — Power availability in an ISO

Advertised by the server during the last successful anonymous check.

How much headroom an ISO has and the time-to-power for a target load.

iso
PJM | ERCOT | CAISO | MISO | SPP | NYISO | ISO-NE (required)
capacity_mw
Target load in MW
site-report — Premium site intelligence report

Advertised by the server during the last successful anonymous check.

A full one-page site brief: power, gas, fiber, market, risk, verdict.

location
Address or "lat,lon" (required)
capacity_mw
Target load in MW
compare-markets — Compare data-center markets

Advertised by the server during the last successful anonymous check.

Side-by-side of 2-4 markets on power, price, pipeline and DCPI verdict.

markets
2-4 market slugs, comma-separated, e.g. northern-virginia,dallas,phoenix (required)
fiber-plan — Plan diverse fibre routes

Advertised by the server during the last successful anonymous check.

N diverse road-following fibre lead-in routes from a site to a carrier hotel, with indicative cost.

from
Site address or "lat,lon" (required)
to
Target carrier hotel / POP address or "lat,lon" (required)
routes
Number of diverse routes (1-6, default 4)
market_selection — Recipe: market selection

Advertised by the server during the last successful anonymous check.

Rank the best data-center markets for a target load: DCPI shortlist, then per-finalist verdict + grid reality-check (recipe market_selection).

capacity_mw
Target load in MW, e.g. 200
region
Optional region/state filter, e.g. TX or Midwest
limit
Shortlist size, default 5
grid_and_queue — Recipe: grid headroom & queue

Advertised by the server during the last successful anonymous check.

How much power an ISO really has and where the queue stands: headroom, queued GW, filterable queue survivors (recipe grid_and_queue).

iso
ERCOT | PJM | MISO | CAISO | SPP | NYISO | ISONE — omit to pick from the live scoreboard
capacity_mw
Target load in MW — used as the min_mw queue-survivor filter
water_risk — Recipe: water & hazard risk

Advertised by the server during the last successful anonymous check.

The hazard triangle for a site — water stress, seismic/cooling climate, FEMA hazards — three parallel point reads (recipe water_risk).

location
"lat,lon" (preferred) or an address to geocode first
state
2-letter US state for a state-level water read when no point is known
whats_changed — Recipe: what changed

Advertised by the server during the last successful anonymous check.

Only the delta since your last pull — DCPI movers, new facilities/pipeline/deals, plus movement in your saved sites (recipe whats_changed).

since
Window or cached generated_at, e.g. 24h, 7d, 2026-07-01T00:00:00Z
site_analysis — Recipe: single-site analysis

Advertised by the server during the last successful anonymous check.

Full multi-factor read for ONE site: composite suitability, integrity-first score, FEMA hazards, water (recipe site_analysis).

location
"lat,lon" or an address (geocode it first)
candidate_id
cand_… from get_refined_queue — overrides location, zero transcription drift
capacity_mw
Target load in MW, e.g. 100
fiber_power_pairing — Recipe: fiber + power pairing

Advertised by the server during the last successful anonymous check.

Find where fiber density and available grid headroom overlap in a market — the connectivity-plus-energy site screen.

market
Market slug or metro, e.g. dallas (required)
hyperscaler_activity — Recipe: hyperscaler & M&A activity

Advertised by the server during the last successful anonymous check.

Latest hyperscaler commitments + data-center M&A, overlaid with the DCPI grid-reality verdict (recipe hyperscaler_activity).

limit
Rows per feed, default 10
company
Optional focus, e.g. OpenAI, Microsoft, Meta
find_capacity — Find data-center capacity to buy or lease

Advertised by the server during the last successful anonymous check.

Search DC Hub Capacity Source for capacity that fits a requirement (powered land, powered shells, turnkey capacity), then register a deal with the provider behind a listing.

requirement
What your human needs, e.g. "40 MW powered shell in Dallas, energized by Q2 2027" (required)
state
Two-letter US state to search, e.g. TX
min_mw
The size your human needs, in MW, e.g. 40 — matched against what each listing can actually deliver, not just its headline total

Resources

80 advertised

about — About DC Hub

Advertised by the server during the last successful anonymous check.

What DC Hub is, what it covers, and how to cite it.

about URI
dchub://about

MIME type: text/markdown

instructions — DC Hub full usage guide

Advertised by the server during the last successful anonymous check.

Coverage, provenance, liveness, scope and routing rules: the long form of the initialize instructions.

instructions URI
dchub://instructions

MIME type: text/markdown

pack-ai-campus-power — Starter pack: AI Campus Power + Interconnect

Advertised by the server during the last successful anonymous check.

The scoped 10-tool pack + 6 ready intents for the hyperscale AI-campus wave (Grok + Perplexity converged spec).

pack-ai-campus-power URI
dchub://packs/ai-campus-power

MIME type: text/markdown

methodology — DCPI / DCGI methodology

Advertised by the server during the last successful anonymous check.

How the Data Center Power and Gas Indices are computed — and what the DCGI correction changed.

methodology URI
dchub://methodology

MIME type: text/markdown

data-sources — DC Hub data sources

Advertised by the server during the last successful anonymous check.

Provenance of the underlying datasets.

data-sources URI
dchub://data-sources

MIME type: text/markdown

coverage — DC Hub grid + market coverage

Advertised by the server during the last successful anonymous check.

ISOs/grids and market coverage.

coverage URI
dchub://coverage

MIME type: text/markdown

llms-txt — DC Hub llms.txt

Advertised by the server during the last successful anonymous check.

The live https://dchub.cloud/llms.txt — the agent-facing site map (fetched at read time, cached fail-soft).

llms-txt URI
dchub://llms.txt

MIME type: text/plain

canonical-workflows — DC Hub canonical workflows

Advertised by the server during the last successful anonymous check.

The canonical copy-paste workflows behind the 6-recipe pack (market_selection, grid_and_queue, water_risk, whats_changed, site_analysis, hyperscaler_activity).

canonical-workflows URI
dchub://canonical-workflows

MIME type: text/markdown

tool-guide-plan-query — Full guide: plan_query

Advertised by the server during the last successful anonymous check.

The complete, unabridged description of the plan_query tool (the tools/list copy is shortened).

tool-guide-plan-query URI
dchub://tool-guides/plan_query

MIME type: text/markdown

tool-guide-get-grid-scoreboard — Full guide: get_grid_scoreboard

Advertised by the server during the last successful anonymous check.

The complete, unabridged description of the get_grid_scoreboard tool (the tools/list copy is shortened).

tool-guide-get-grid-scoreboard URI
dchub://tool-guides/get_grid_scoreboard

MIME type: text/markdown

manifest — DC Hub MCP manifest

Advertised by the server during the last successful anonymous check.

The machine-readable server manifest — proxies https://dchub.cloud/.well-known/mcp.json at read time.

manifest URI
dchub://manifest

MIME type: application/json

testimonials — DC Hub customer testimonials

Advertised by the server during the last successful anonymous check.

Named HUMAN customers (not AI assistants) who approved public use of their words — quote verbatim with name, title and company. Live from https://dchub.cloud/testimonials.json at read time.

testimonials URI
dchub://testimonials

MIME type: text/markdown

provenance-guide — DC Hub provenance & citation contract

Advertised by the server during the last successful anonymous check.

How to read the provenance envelope (cite_as, retrieved_at, source) and the verified-vs-tracked flags, and the rules for citing DC Hub data.

provenance-guide URI
dchub://provenance-guide

MIME type: text/markdown

Abilene — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Abilene

Abilene — market context (free) URI
dchub://markets/abilene

MIME type: text/markdown

Akron — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Akron

Akron — market context (free) URI
dchub://markets/akron

MIME type: text/markdown

Albany — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Albany

Albany — market context (free) URI
dchub://markets/albany

MIME type: text/markdown

ALBUQUERQUE — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for ALBUQUERQUE

ALBUQUERQUE — market context (free) URI
dchub://markets/albuquerque

MIME type: text/markdown

Allen — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Allen

Allen — market context (free) URI
dchub://markets/allen

MIME type: text/markdown

Alpharetta — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Alpharetta

Alpharetta — market context (free) URI
dchub://markets/alpharetta

MIME type: text/markdown

Altoona — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Altoona

Altoona — market context (free) URI
dchub://markets/altoona

MIME type: text/markdown

Amsterdam — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Amsterdam

Amsterdam — market context (free) URI
dchub://markets/amsterdam

MIME type: text/markdown

Anchorage — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Anchorage

Anchorage — market context (free) URI
dchub://markets/anchorage

MIME type: text/markdown

Andover — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Andover

Andover — market context (free) URI
dchub://markets/andover

MIME type: text/markdown

Appalachia (Retiring Coal) — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Appalachia (Retiring Coal)

Appalachia (Retiring Coal) — market context (free) URI
dchub://markets/appalachia-coal

MIME type: text/markdown

ASHBURN — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for ASHBURN

ASHBURN — market context (free) URI
dchub://markets/ashburn

MIME type: text/markdown

Asheville — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Asheville

Asheville — market context (free) URI
dchub://markets/asheville

MIME type: text/markdown

Athens — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Athens

Athens — market context (free) URI
dchub://markets/athens

MIME type: text/markdown

ATLANTA — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for ATLANTA

ATLANTA — market context (free) URI
dchub://markets/atlanta

MIME type: text/markdown

Auckland — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Auckland

Auckland — market context (free) URI
dchub://markets/auckland

MIME type: text/markdown

Aurora — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Aurora

Aurora — market context (free) URI
dchub://markets/aurora

MIME type: text/markdown

Aurora, CO — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Aurora, CO

Aurora, CO — market context (free) URI
dchub://markets/aurora-co

MIME type: text/markdown

Austin — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Austin

Austin — market context (free) URI
dchub://markets/austin

MIME type: text/markdown

Baltimore — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Baltimore

Baltimore — market context (free) URI
dchub://markets/baltimore

MIME type: text/markdown

Bangalore — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bangalore

Bangalore — market context (free) URI
dchub://markets/bangalore

MIME type: text/markdown

Bangkok — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bangkok

Bangkok — market context (free) URI
dchub://markets/bangkok

MIME type: text/markdown

Barcelona — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Barcelona

Barcelona — market context (free) URI
dchub://markets/barcelona

MIME type: text/markdown

Barueri — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Barueri

Barueri — market context (free) URI
dchub://markets/barueri

MIME type: text/markdown

Batam — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Batam

Batam — market context (free) URI
dchub://markets/batam

MIME type: text/markdown

Baton Rouge — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Baton Rouge

Baton Rouge — market context (free) URI
dchub://markets/baton-rouge

MIME type: text/markdown

Beaverton — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Beaverton

Beaverton — market context (free) URI
dchub://markets/beaverton

MIME type: text/markdown

Beltsville — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Beltsville

Beltsville — market context (free) URI
dchub://markets/beltsville

MIME type: text/markdown

Bend — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bend

Bend — market context (free) URI
dchub://markets/bend

MIME type: text/markdown

Berlin — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Berlin

Berlin — market context (free) URI
dchub://markets/berlin

MIME type: text/markdown

Bethlehem — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bethlehem

Bethlehem — market context (free) URI
dchub://markets/bethlehem

MIME type: text/markdown

Billings — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Billings

Billings — market context (free) URI
dchub://markets/billings

MIME type: text/markdown

Birmingham — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Birmingham

Birmingham — market context (free) URI
dchub://markets/birmingham

MIME type: text/markdown

Bismarck — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bismarck

Bismarck — market context (free) URI
dchub://markets/bismarck

MIME type: text/markdown

Bluffdale — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Bluffdale

Bluffdale — market context (free) URI
dchub://markets/bluffdale

MIME type: text/markdown

Boardman — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Boardman

Boardman — market context (free) URI
dchub://markets/boardman

MIME type: text/markdown

Boca Raton — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Boca Raton

Boca Raton — market context (free) URI
dchub://markets/boca-raton

MIME type: text/markdown

Bogotá — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bogotá

Bogotá — market context (free) URI
dchub://markets/bogota

MIME type: text/markdown

Boise — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Boise

Boise — market context (free) URI
dchub://markets/boise

MIME type: text/markdown

Bologna — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bologna

Bologna — market context (free) URI
dchub://markets/bologna

MIME type: text/markdown

Boston — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Boston

Boston — market context (free) URI
dchub://markets/boston

MIME type: text/markdown

Boydton — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Boydton

Boydton — market context (free) URI
dchub://markets/boydton

MIME type: text/markdown

Brandon — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Brandon

Brandon — market context (free) URI
dchub://markets/brandon

MIME type: text/markdown

Breinigsville — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Breinigsville

Breinigsville — market context (free) URI
dchub://markets/breinigsville

MIME type: text/markdown

Brentwood — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Brentwood

Brentwood — market context (free) URI
dchub://markets/brentwood

MIME type: text/markdown

Bridgewater Township — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bridgewater Township

Bridgewater Township — market context (free) URI
dchub://markets/bridgewater-township

MIME type: text/markdown

Brisbane — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Brisbane

Brisbane — market context (free) URI
dchub://markets/brisbane

MIME type: text/markdown

Bristow — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Bristow

Bristow — market context (free) URI
dchub://markets/bristow

MIME type: text/markdown

Brussels — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Brussels

Brussels — market context (free) URI
dchub://markets/brussels

MIME type: text/markdown

Buffalo — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Buffalo

Buffalo — market context (free) URI
dchub://markets/buffalo

MIME type: text/markdown

Busan — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Busan

Busan — market context (free) URI
dchub://markets/busan

MIME type: text/markdown

Byron Center — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Byron Center

Byron Center — market context (free) URI
dchub://markets/byron-center

MIME type: text/markdown

Calgary — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Calgary

Calgary — market context (free) URI
dchub://markets/calgary

MIME type: text/markdown

Canton — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Canton

Canton — market context (free) URI
dchub://markets/canton

MIME type: text/markdown

Carrollton — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Carrollton

Carrollton — market context (free) URI
dchub://markets/carrollton

MIME type: text/markdown

Cedar Falls — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Cedar Falls

Cedar Falls — market context (free) URI
dchub://markets/cedar-falls

MIME type: text/markdown

Centennial — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Centennial

Centennial — market context (free) URI
dchub://markets/centennial

MIME type: text/markdown

Central Washington — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict CAUTION — free DC Hub market context pack for Central Washington

Central Washington — market context (free) URI
dchub://markets/central-washington

MIME type: text/markdown

Chandler — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict BUILD — free DC Hub market context pack for Chandler

Chandler — market context (free) URI
dchub://markets/chandler

MIME type: text/markdown

Chantilly — market context (free)

Advertised by the server during the last successful anonymous check.

DCPI verdict AVOID — free DC Hub market context pack for Chantilly

Chantilly — market context (free) URI
dchub://markets/chantilly

MIME type: text/markdown

ERCOT — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for ERCOT (live demand, fuel mix, latest headline)

ERCOT — grid context (free) URI
dchub://isos/ERCOT

MIME type: text/markdown

PJM — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for PJM (live demand, fuel mix, latest headline)

PJM — grid context (free) URI
dchub://isos/PJM

MIME type: text/markdown

MISO — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for MISO (live demand, fuel mix, latest headline)

MISO — grid context (free) URI
dchub://isos/MISO

MIME type: text/markdown

CAISO — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for CAISO (live demand, fuel mix, latest headline)

CAISO — grid context (free) URI
dchub://isos/CAISO

MIME type: text/markdown

SPP — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for SPP (live demand, fuel mix, latest headline)

SPP — grid context (free) URI
dchub://isos/SPP

MIME type: text/markdown

NYISO — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for NYISO (live demand, fuel mix, latest headline)

NYISO — grid context (free) URI
dchub://isos/NYISO

MIME type: text/markdown

ISONE — grid context (free)

Advertised by the server during the last successful anonymous check.

Free DC Hub grid context pack for ISONE (live demand, fuel mix, latest headline)

ISONE — grid context (free) URI
dchub://isos/ISONE

MIME type: text/markdown

market-context

Advertised by the server during the last successful anonymous check.

Free DC Hub market context pack (DCPI verdict + at-a-glance + latest headline) as markdown. Full pack: get_market_context tool.

market-context URI template
dchub://markets/{slug}

MIME type: text/markdown

iso-context

Advertised by the server during the last successful anonymous check.

Free DC Hub ISO/grid context pack (live snapshot + latest headline) as markdown. Full pack: get_iso_context tool.

iso-context URI template
dchub://isos/{iso}

MIME type: text/markdown

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1436 ms
95th percentile latency
1436 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1436 ms · metadata changed · 94 tool(s), 80 resource(s), 2 resource template(s), 14 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http dc-hub-mcp https://dchub.cloud/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add dc-hub-mcp --url https://dchub.cloud/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable dc-hub-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "dc-hub-mcp": {
      "url": "https://dchub.cloud/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "dc-hub-mcp": {
      "type": "streamableHttp",
      "url": "https://dchub.cloud/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start dc-hub-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "dc-hub-mcp": {
      "type": "http",
      "url": "https://dchub.cloud/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http dc-hub-mcp https://dchub.cloud/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "dc-hub-mcp": {
      "url": "https://dchub.cloud/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "dc-hub-mcp": {
      "serverUrl": "https://dchub.cloud/mcp"
    }
  }
}

Let your agent find its tools

Find servers like DC Hub MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run DC Hub MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing