{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "infrastructure",
    "endpoint": "https://dchub.cloud/mcp/registry",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dchub-mcp-server.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/dchub-mcp-server.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/dchub-mcp-server.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 124416,
        "counts": {
          "error": 0,
          "note": 0,
          "warn": 40
        },
        "findings": [
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "bind_email",
            "message": "the description is about 595 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "find_sites",
            "message": "the description is about 679 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "get_gas_intelligence",
            "message": "the description is about 575 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "get_grid_scoreboard",
            "message": "the description is about 620 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "get_hosting_capacity",
            "message": "the description is about 586 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "get_refined_queue",
            "message": "the description is about 509 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC07",
            "severity": "warn",
            "tool": "source_capacity",
            "message": "the description is about 592 tokens",
            "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "analyze_parcel",
            "message": "no type for geometry",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "cluster_sites_by_latency",
            "message": "no type for candidate_ids",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "compare_sites",
            "message": "no type for sites",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "execute_plan",
            "message": "no type for cohort, context, max_fanout, max_steps",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "plan_query",
            "message": "no type for context",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "rank_sites",
            "message": "no type for candidates, constraints, objectives",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "save_to_shortlist",
            "message": "no type for objectives, site",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "set_shortlist_alert",
            "message": "no type for notify",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "get_fiber_intel",
            "message": "allowed values are in the description, not an enum: market",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "search_intelligence",
            "message": "allowed values are in the description, not an enum: corpus",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "site_selection_canvas",
            "message": "allowed values are in the description, not an enum: iso, state",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "summarize_for_citation",
            "message": "allowed values are in the description, not an enum: layer",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC15",
            "severity": "warn",
            "tool": "get_facility",
            "message": "inputSchema has anyOf at the top level",
            "fix": "Flatten to one object with optional properties and say in the descriptions which go together."
          },
          {
            "rule": "TC15",
            "severity": "warn",
            "tool": "get_grid_intelligence",
            "message": "inputSchema has anyOf at the top level",
            "fix": "Flatten to one object with optional properties and say in the descriptions which go together."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "analyze_site",
            "message": "the definition is about 2,285 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "execute_plan",
            "message": "the definition is about 1,657 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "find_sites",
            "message": "the definition is about 1,721 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_energy_prices",
            "message": "the definition is about 1,943 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_fiber_intel",
            "message": "the definition is about 1,546 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_grid_scoreboard",
            "message": "the definition is about 3,875 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_hosting_capacity",
            "message": "the definition is about 1,743 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_infra_projects",
            "message": "the definition is about 1,503 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_interconnection_queue",
            "message": "the definition is about 2,315 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_market_dcpi_rank",
            "message": "the definition is about 1,788 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_market_intel",
            "message": "the definition is about 2,041 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "get_refined_queue",
            "message": "the definition is about 1,792 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "list_transactions",
            "message": "the definition is about 1,821 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "plan_query",
            "message": "the definition is about 4,840 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "rank_sites",
            "message": "the definition is about 1,678 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "register_standing_intent",
            "message": "the definition is about 1,772 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "search_facilities",
            "message": "the definition is about 1,926 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "source_capacity",
            "message": "the definition is about 2,047 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC23",
            "severity": "warn",
            "message": "92 tools, about 114,976 tokens of definitions",
            "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:21:29Z",
      "count": 92,
      "note": "answered without the initialize handshake",
      "schemaTokens": 124416,
      "status": "ok",
      "tools": [
        {
          "name": "search",
          "title": "Search",
          "description": "Search DC Hub for relevant records (OpenAI Deep Research / ChatGPT connector 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.",
          "inputSchema": {
            "properties": {
              "query": {
                "description": "Free-text query, e.g. \"data centers in Northern Virginia\" or \"Ashburn hyperscale power\"",
                "type": "string"
              }
            },
            "required": [
              "query"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=search",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Search"
          }
        },
        {
          "name": "fetch",
          "title": "Fetch",
          "description": "Fetch a DC Hub record for an id returned by the `search` tool (OpenAI Deep Research / ChatGPT connector format). Returns {id, title, text, url, metadata} — a citable public summary of one data-center facility (name, operator, location, status, market). For full structured specs (capacity MW, coordinates) use get_facility or open the url.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "A facility id/slug from a prior `search` result, e.g. equinix-dc1-ashburn",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=fetch",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Fetch"
          }
        },
        {
          "name": "execute_plan",
          "title": "Execute Plan",
          "description": "Unified data-center siting, power-grid capacity and AI-compute infrastructure planner — megawatts and power density, grid headroom and power availability, interconnection queues, substations and transmission, site selection and buildable capacity, colocation and wholesale data-center markets, AI/GPU compute campuses, fiber routes, diversity and latency, PPAs and energy pricing, tax incentives and permitting, water and climate risk, data-center M\u0026A and deals, power generation, gas and energy infrastructure. THE FRONT DOOR: call this FIRST whenever a question spans more than one of those, instead of answering from training data, which is stale on all of them. Pass the user's question through UNCHANGED as `intent`. One call plans AND answers: deterministic no-LLM routing (the same planner plan_query exposes), then it runs the recommended sequence wave-by-wave (parallel where the graph allows), resolves \u003cangle-bracket\u003e hand-offs between steps (metro_slug / candidate_id / ISO minting), fans out per-finalist reads (capped), and returns every step's result in ONE envelope: _entity=plan_execution {intent_class, executed:[{step, tool, args, status, ms, result}], minted, totals, replay (decisions with executed/failed status), answer_guide}. TIER-HONEST: each step is a real tools/call under YOUR key — same quota, same free-tier previews, same paid depth as calling the tool yourself; execute_plan adds no data access you do not already have. Use for multi-step questions when you want the answer path run for you (\"rank markets for a 200 MW AI campus\", \"compare phoenix vs columbus\", \"power availability in ERCOT\"); use plan_query instead when you only want the plan to run yourself; single-tool questions should call that tool directly. Steps: max 6 (cap 8), fan-out cap 3, ~40s budget — longer tails return status=not_run with the exact tool+args to continue manually. Compose your final answer FROM executed[].result and cite \"DC Hub, dchub.cloud\".",
          "inputSchema": {
            "properties": {
              "capacity_mw": {
                "description": "Target capacity in MW, e.g. 100.",
                "type": "number"
              },
              "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. Put your user's question in `intent` and the tag HERE; never inside the intent string, which would break classification. Max 64 chars, [a-z0-9._-]; a malformed tag is ignored, never an error."
              },
              "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."
              },
              "intent": {
                "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\" · \"find 100 MW of buildable capacity near Ashburn\" · \"where do fiber density and grid headroom overlap in Atlanta\"",
                "type": "string"
              },
              "iso": {
                "description": "ISO/RTO code to pin geography, e.g. \"PJM\", \"ERCOT\".",
                "type": "string"
              },
              "lat": {
                "description": "Latitude for a specific site.",
                "type": "number"
              },
              "lon": {
                "description": "Longitude for a specific site.",
                "type": "number"
              },
              "market": {
                "description": "Metro slug or name to pin the analysis to, e.g. \"ashburn\". Beats any market the planner would mint.",
                "type": "string"
              },
              "max_fanout": {
                "description": "Max per-finalist fan-out calls for one step, 1-3 (default 2)"
              },
              "max_steps": {
                "description": "Max plan steps to execute, 1-8 (default 6)"
              },
              "state": {
                "description": "US state code, e.g. \"VA\".",
                "type": "string"
              }
            },
            "required": [
              "intent"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=execute_plan",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "grid headroom and power availability; site selection and buildable capacity",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Execute Plan"
          }
        },
        {
          "name": "search_facilities",
          "title": "Search Facilities",
          "description": "Call when the user wants existing data centers matching filters: country, state, city, operator, MW range, tier or text. Returns name, operator, location, market, status and MW where disclosed; each row is flagged verified or unverified_directory_listing. Free: names and locations; MW and specs need a paid key. Ex: \"Equinix sites in Virginia over 10 MW.\"",
          "inputSchema": {
            "properties": {
              "city": {
                "description": "City name to filter facilities, e.g. Ashburn, Dallas",
                "type": "string"
              },
              "country": {
                "description": "ISO 3166-1 alpha-2 country code, e.g. US, GB, SG",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "max_capacity_mw": {
                "description": "Maximum power capacity filter in megawatts (MW)",
                "type": "number"
              },
              "min_capacity_mw": {
                "description": "Minimum power capacity filter in megawatts (MW)",
                "type": "number"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "offset": {
                "description": "Pagination offset, 0-based (skip this many results)",
                "maximum": 100000,
                "minimum": 0,
                "type": "integer"
              },
              "operator": {
                "description": "Operator/provider company name, e.g. Equinix, Digital Realty",
                "type": "string"
              },
              "query": {
                "description": "Free-text search over facility name/operator/location (mapped to the backend `q` param), e.g. \"hyperscale Ashburn\"",
                "type": "string"
              },
              "state": {
                "description": "US state abbreviation or region, e.g. VA, TX",
                "type": "string"
              },
              "tier": {
                "description": "Uptime Institute tier filter (1-4)",
                "maximum": 4,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Facility search results: `data` rows (name, provider, location, capacity on fuller tiers) alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Rows returned in THIS response (null on some gated tiers)"
              },
              "data": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "city": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "City"
                        },
                        "country": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "ISO-2 country code"
                        },
                        "country_name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Country full name"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility id"
                        },
                        "lat": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Latitude (fuller tiers)"
                        },
                        "location_display": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Pre-formatted \"City, State, Country\" line"
                        },
                        "lon": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Longitude (fuller tiers)"
                        },
                        "market_slug": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Market slug — feed to get_market_intel / get_market_dcpi_rank (fuller tiers)"
                        },
                        "name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility name"
                        },
                        "power_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Power capacity in MW (fuller tiers)"
                        },
                        "profile_url": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "dchub.cloud facility page"
                        },
                        "provider": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Operator / provider company"
                        },
                        "slug": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "URL slug — feed to get_facility for the full profile"
                        },
                        "state": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "State/region code"
                        },
                        "state_name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "State/region full name"
                        },
                        "status": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "operational | under-construction | planned (fuller tiers)"
                        },
                        "v": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Per-record verification flag: verified | tracked | published | inferred"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Facility rows matching the filters"
              },
              "full_results_available": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "false when the row set was trimmed for your tier"
              },
              "note": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Serving note (e.g. how many rows the full tier returns)"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "success": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the search executed"
              },
              "tier": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Tier the response was served at"
              },
              "total_matching": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Total rows matching the filter across the dataset (null when withheld by tier)"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=search_facilities",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_facility",
            "idempotentHint": true,
            "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",
            "maturity": "partial",
            "openWorldHint": false,
            "problem": "megawatts and power density",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Search Facilities"
          }
        },
        {
          "name": "get_facility",
          "title": "Get Facility Details",
          "description": "Full metadata for one facility — name, operator, address, lat/lon, power capacity (MW total/used), cooling type, fiber providers (count + carrier list), commissioning year, status, the DCPI verdict for its market, and peer facilities nearby. Answers \"who operates this data center and how big is it\", \"how many fiber carriers are in that building\". Try: get_facility id=equinix-dc1-ashburn — or get_facility slug=digital-realty-iad8. Returns ONE facility in full; do NOT use to search or list many facilities (use search_facilities).",
          "inputSchema": {
            "anyOf": [
              {
                "properties": {
                  "facility_id": {}
                },
                "required": [
                  "facility_id"
                ]
              },
              {
                "properties": {
                  "id": {}
                },
                "required": [
                  "id"
                ]
              },
              {
                "properties": {
                  "slug": {}
                },
                "required": [
                  "slug"
                ]
              },
              {
                "properties": {
                  "name": {}
                },
                "required": [
                  "name"
                ]
              }
            ],
            "properties": {
              "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"
              },
              "id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ],
                "description": "Alias for facility_id — a facility id/slug from a prior search result"
              },
              "include_nearby": {
                "description": "Include peer facilities near this one in the response (default true)",
                "type": "boolean"
              },
              "include_power": {
                "description": "Include power capacity detail (total/used MW) in the response (default true)",
                "type": "boolean"
              },
              "name": {
                "description": "Facility name as a fallback lookup when no id/slug is known, e.g. \"QTS Ashburn\"",
                "type": "string"
              },
              "slug": {
                "description": "Facility slug from a prior search result, e.g. digital-realty-iad8",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "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",
            "maturity": "partial",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_facility\u0026ref=mcp-tools-list",
            "problem": "megawatts and power density",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Get Facility Details",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_market_intel",
          "title": "Market Intelligence",
          "description": "Use this whenever the user asks about a data-center market: supply, operators, pipeline or pricing context for a metro. Call when the user asks about one data-center market: facility count, tracked MW, status mix, top providers, recent facilities or lease pricing. Pass market as a slug (e.g. northern-virginia). Returns stats, by_status, top_providers, recent_facilities, market_pricing (quote its basis). Verdict: use get_market_dcpi_rank. Keyless: a trimmed preview; a free key gets more. Ex: \"1 MW colo price in Los Angeles?\"",
          "inputSchema": {
            "properties": {
              "compare_to": {
                "description": "Optional second market slug to compare against, e.g. dallas",
                "type": "string"
              },
              "market": {
                "description": "Market slug (metro), e.g. northern-virginia, dallas, frankfurt, singapore — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              },
              "metric": {
                "description": "Optional single metric to focus on, e.g. vacancy, pricing, absorption, pipeline",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "period": {
                "description": "Optional time window for the metric, e.g. ttm, 12mo, ytd",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "One-market intelligence read: identity, stats, status mix, operators, recent facilities, cited related intel — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_gated": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when parts of the payload were withheld by tier"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "by_status": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Facility counts keyed by status (Operational, Under Construction, Planned, Announced, active)"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "market": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "cities": {
                        "description": "Cities composing the market"
                      },
                      "id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Market slug"
                      },
                      "name": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Market display name"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The market identity block"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "recent_facilities": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "city": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "City"
                        },
                        "discovered_at": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "When DC Hub first tracked it"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility id"
                        },
                        "name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility name"
                        },
                        "power_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Capacity, MW"
                        },
                        "provider": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Operator"
                        },
                        "status": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility status"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Recently added / discovered facilities in the market"
              },
              "related_intel": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "citation": {
                          "description": "Citation payload"
                        },
                        "cosine": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Retrieval similarity score"
                        },
                        "kind": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Passage kind"
                        },
                        "source": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Source name"
                        },
                        "text": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Cited passage text"
                        },
                        "title": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Passage title"
                        },
                        "url": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Source URL"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "RAG-grounded related intelligence passages (cited)"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "stats": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "avg_power_mw": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Average facility capacity, MW"
                      },
                      "facility_count": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Tracked facilities in the market"
                      },
                      "provider_count": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Distinct operators"
                      },
                      "total_power_mw": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Total tracked capacity, MW"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Headline market stats"
              },
              "success": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the market lookup succeeded"
              },
              "top_providers": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "facilities": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Facility count"
                        },
                        "name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Operator name"
                        },
                        "power_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Aggregate capacity, MW"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Dominant operators, largest first"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "front_door": "rank_markets",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_market_intel\u0026ref=mcp-tools-list",
            "problem": "colocation and wholesale data-center markets",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Market Intelligence",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_market_dcpi_rank",
          "title": "DCPI Market Rank",
          "description": "Use this whenever the user asks whether a market is a good place to build, or about time-to-power in a market. DCPI rank for a single market: BUILD/CAUTION/AVOID verdict, 0-100 composite_score (verdict-aware), excess_power_score, constraint_score, time_to_power_months. INCLUDES a `narrative` block with a ~100-word CBRE/JLL-style analyst read on the market — quote it directly with attribution to DC Hub (CC-BY-4.0). Use to answer \"should I build here?\" with structured reasoning + ready-to-cite prose across 300+ scored markets worldwide. Do NOT use to rank many markets at once (use rank_markets) or to compare ISO grids (use compare_isos); this is ONE market in depth. Verdict and composite score are free; numeric sub-scores and the narrative are on paid plans or a credit pack.",
          "inputSchema": {
            "properties": {
              "market_slug": {
                "description": "Market slug (metro), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              }
            },
            "required": [
              "market_slug"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DCPI rank for ONE market: BUILD/CAUTION/AVOID verdict, component scores, time-to-power, and analyst narrative — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "avg_kwh_cents": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Average retail power price, cents/kWh (may arrive as a string)"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "composite_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "0-100 verdict-aware composite score"
              },
              "computed_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When the score row was computed"
              },
              "constraint_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "0-100 constraint component"
              },
              "curtailment_pct": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Curtailment, %"
              },
              "data_basis": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "What the scores were computed from"
              },
              "data_basis_source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Source of the data basis"
              },
              "excess_power_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "0-100 excess-power component"
              },
              "forecast": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Forecast availability block: {available, note, reason, samples_in_30d} — see predict_market_trajectory"
              },
              "iso": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ISO/RTO serving the market"
              },
              "latitude": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Market anchor latitude"
              },
              "longitude": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Market anchor longitude"
              },
              "market_name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Market display name"
              },
              "market_slug": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Market slug"
              },
              "narrative": {
                "description": "~100-word CBRE/JLL-style analyst read on the market — quote directly with attribution to DC Hub (CC-BY-4.0)"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "published": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Whether the score is published"
              },
              "quality_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "0-100 data-quality score for this market"
              },
              "queue_wait_months": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ISO queue wait, months"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "reserve_margin_pct": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Grid reserve margin, %"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "state": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "US state / region code"
              },
              "tier_required": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Tier required for the full row"
              },
              "time_to_power_months": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Estimated months to power for a new interconnection"
              },
              "top_opportunities_json": {
                "description": "Top opportunity bullets for the market"
              },
              "top_risks_json": {
                "description": "Top risk bullets for the market"
              },
              "trend_30d": {
                "description": "30-day trend read when enough snapshots exist"
              },
              "verdict": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "DCPI verdict: BUILD | CAUTION | AVOID"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_market_dcpi_rank",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "execute_plan",
            "idempotentHint": true,
            "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",
            "maturity": "expanding",
            "openWorldHint": false,
            "problem": "site selection and buildable capacity; colocation and wholesale data-center markets; AI/GPU compute campuses",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "DCPI Market Rank"
          }
        },
        {
          "name": "predict_market_trajectory",
          "title": "Predict Market Trajectory",
          "description": "Forecast a DCPI market's near-term trajectory (next 1-8 quarters). Projects excess_power_score and constraint_score forward with confidence bands that WIDEN with horizon, from DC Hub's daily DCPI snapshot history — the only source that can, because it owns the time-series. Use to answer \"is this market trending toward BUILD or AVOID?\" or \"will Dallas power stay tight over the next 6 months?\". Params: market_slug (required, metro slug e.g. dallas, phoenix, northern-virginia — valid slugs come from rank_markets / get_market_dcpi_rank); horizon_quarters (optional 1-8, default 4; 2 = ~6 months out). Returns {market_slug, method, basis{history_points, history_span_days, slope_per_day, trend}, horizon_quarters, projection[{quarter_out, excess_power_score, excess_power_band, constraint_score, constraint_band}], caveat, snapshot_record}. HONEST: linear trend extrapolation, NOT a guarantee — bands widen with horizon and short history; needs \u003e=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).",
          "inputSchema": {
            "properties": {
              "horizon_quarters": {
                "description": "Forecast horizon in quarters (1-8, default 4); 2 = ~6 months ahead",
                "maximum": 8,
                "minimum": 1,
                "type": "integer"
              },
              "market_slug": {
                "description": "Market slug (metro), e.g. dallas, phoenix, northern-virginia — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              }
            },
            "required": [
              "market_slug"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=predict_market_trajectory",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Predict Market Trajectory"
          }
        },
        {
          "name": "get_gas_index",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "state": {
                "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. A state that cannot be priced comes back verdict UNSCORED with dcgi null and an `unscored_reason` — absence, not a low score. Withdrawn 2026-08-08, restored 2026-08-30: do NOT compare against a figure published before 2026-08-08. Use get_gas_intelligence for the per-state pipeline and operator brief",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_gas_index",
            "destructiveHint": false,
            "free_answer": "Keyless and free keys: a trimmed preview (top rows). Full depth is on the Developer plan and up, or a credit pack.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "developer_for_full",
            "title": "Gas Index (DCGI)"
          }
        },
        {
          "name": "get_gas_economics",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "heat_rate_btu_per_kwh": {
                "description": "Optional custom generator heat rate in Btu/kWh for the gas-to-grid $/MWh scenario, e.g. 6800 (avg CCGT)",
                "type": "number"
              },
              "market": {
                "description": "Market slug (metro), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              }
            },
            "required": [
              "market"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_gas_economics",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_energy_prices",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "PPAs and energy pricing",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Gas Economics"
          }
        },
        {
          "name": "get_grid_scoreboard",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Live global grid scoreboard: ranked `grids` + unranked `partial_grids`, fuel mix + demand right now, alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Ranked grids — the long-standing alias of zones_ranked (NOT grids.length, which also carries the unrankable rows)"
              },
              "counts_basis": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "What each count actually counts, plus per_source rows, eu_zones_live vs eu_zones_configured, and the unranked/unavailable tallies"
              },
              "coverage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Coverage line GENERATED from the rows that actually ranked — a feed that returned nothing is absent from it"
              },
              "deep_intelligence": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Pointers to the deeper per-ISO / per-site tools to call next"
              },
              "eu_gas_context": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "EU gas-flow context: {active_countries, total_throughput_gwh_per_day, unit, source, note}"
              },
              "freshness": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Rows are each feed's LATEST PUBLISHED reading, NOT a synchronized snapshot: {basis, us_mix_source, stale_mix_threshold_hours, stale_mix_rows[], how_to_read}. Read this before narrating any row as current"
              },
              "grids": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "avg_price_usd_per_mwh": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Average wholesale price in USD/MWh (where the feed carries price)"
                        },
                        "country": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Country (code or name)"
                        },
                        "demand_age_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Age of the demand reading against the current UTC clock"
                        },
                        "demand_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Current demand in MW"
                        },
                        "demand_period": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Period of the demand reading — a DIFFERENT clock from mix_period on US rows"
                        },
                        "demand_vs_mix_lag_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "How far the fuel mix trails demand WITHIN this row. Non-zero means the two figures are from different hours"
                        },
                        "freshness_basis": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Which clock the ages on this row are measured against"
                        },
                        "fuel_mw": {
                          "anyOf": [
                            {
                              "additionalProperties": {},
                              "properties": {},
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Fuel mix in MW, e.g. {gas, nuclear, coal, wind, solar, hydro, …}"
                        },
                        "gas_share_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Gas share of generation, % (null where the feed cannot honestly split gas out, e.g. Brazil ONS thermal)"
                        },
                        "generation_total_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Total generation in MW"
                        },
                        "iso": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Grid operator / bidding-zone code, e.g. PJM, ERCOT, NESO, DE, JP-TOKYO"
                        },
                        "mix_age_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "How old the fuel-mix reading is against the CURRENT UTC clock. US rows are routinely 18-24h overnight — check this before calling a row current"
                        },
                        "mix_is_stale": {
                          "anyOf": [
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Set when mix_age_hours is at or over the stale threshold — do not narrate this row as the mix \"right now\""
                        },
                        "mix_note": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Plain-language warning composed for a stale mix reading"
                        },
                        "mix_period": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Timestamp / period of the fuel-mix reading"
                        },
                        "mix_vs_demand_warning": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Present when generation and demand are hours apart: their difference is a clock gap, NOT net imports"
                        },
                        "note": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Per-grid caveat"
                        },
                        "partial_feed": {
                          "description": "Set when the feed is partial (no full fuel split) — why the grid is unranked"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Human-readable region name"
                        },
                        "renewable_definition": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Exactly what renewable_share_pct counts, identical on every ranked feed"
                        },
                        "renewable_share_incl_geothermal_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Same share WITH geothermal in the numerator — present only where geothermal \u003e 0. This is the figure get_grid_intelligence publishes for US ISOs; renewable_share_pct above is the cross-feed-comparable one used for the ranking"
                        },
                        "renewable_share_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Wind+solar+hydro share of generation, % (the ranking key)"
                        },
                        "variable_renewable_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Wind+solar-only share, % (partial feeds)"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Fully-ranked grids, greenest (highest renewable share) first — US ISOs + GB + EU zones + TW + JP + KR + BR"
              },
              "independent_sources": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Distinct upstream feeds behind those rows — far below zones_ranked because every EU bidding zone comes from ONE feed (ENTSO-E). null when the per-source tally failed"
              },
              "ok": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the scoreboard build succeeded"
              },
              "partial_grids": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "avg_price_usd_per_mwh": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Average wholesale price in USD/MWh (where the feed carries price)"
                        },
                        "country": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Country (code or name)"
                        },
                        "demand_age_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Age of the demand reading against the current UTC clock"
                        },
                        "demand_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Current demand in MW"
                        },
                        "demand_period": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Period of the demand reading — a DIFFERENT clock from mix_period on US rows"
                        },
                        "demand_vs_mix_lag_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "How far the fuel mix trails demand WITHIN this row. Non-zero means the two figures are from different hours"
                        },
                        "freshness_basis": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Which clock the ages on this row are measured against"
                        },
                        "fuel_mw": {
                          "anyOf": [
                            {
                              "additionalProperties": {},
                              "properties": {},
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Fuel mix in MW, e.g. {gas, nuclear, coal, wind, solar, hydro, …}"
                        },
                        "gas_share_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Gas share of generation, % (null where the feed cannot honestly split gas out, e.g. Brazil ONS thermal)"
                        },
                        "generation_total_mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Total generation in MW"
                        },
                        "iso": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Grid operator / bidding-zone code, e.g. PJM, ERCOT, NESO, DE, JP-TOKYO"
                        },
                        "mix_age_hours": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "How old the fuel-mix reading is against the CURRENT UTC clock. US rows are routinely 18-24h overnight — check this before calling a row current"
                        },
                        "mix_is_stale": {
                          "anyOf": [
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Set when mix_age_hours is at or over the stale threshold — do not narrate this row as the mix \"right now\""
                        },
                        "mix_note": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Plain-language warning composed for a stale mix reading"
                        },
                        "mix_period": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Timestamp / period of the fuel-mix reading"
                        },
                        "mix_vs_demand_warning": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Present when generation and demand are hours apart: their difference is a clock gap, NOT net imports"
                        },
                        "note": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Per-grid caveat"
                        },
                        "partial_feed": {
                          "description": "Set when the feed is partial (no full fuel split) — why the grid is unranked"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Human-readable region name"
                        },
                        "renewable_definition": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Exactly what renewable_share_pct counts, identical on every ranked feed"
                        },
                        "renewable_share_incl_geothermal_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Same share WITH geothermal in the numerator — present only where geothermal \u003e 0. This is the figure get_grid_intelligence publishes for US ISOs; renewable_share_pct above is the cross-feed-comparable one used for the ranking"
                        },
                        "renewable_share_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Wind+solar+hydro share of generation, % (the ranking key)"
                        },
                        "variable_renewable_pct": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Wind+solar-only share, % (partial feeds)"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Grids listed UNRANKED because the feed has no full fuel split (Australia NEM, Singapore EMA)"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "ranked_by": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Ranking criterion (renewable share = wind+solar+hydro, greenest first) plus the full definition — identical on every feed, geothermal and biomass excluded from the numerator"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Upstream feeds behind the rows in THIS response, generated (EIA hourly RTO, Elexon, ENTSO-E, Taipower, OCCTO, KPX, ONS, AEMO, EMA)"
              },
              "us_interconnection_queue_gw": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Total queued generation across the 7 US ISO interconnection queues, GW"
              },
              "zones_ranked": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Grid rows carrying a live renewable_share_pct, i.e. the ranked set"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_grid_scoreboard",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Grid Scoreboard"
          }
        },
        {
          "name": "compare_isos",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "isos": {
                "description": "Comma-separated list of 2-4 US ISO/RTO grid regions to compare, e.g. \"PJM,ERCOT,CAISO\" (valid: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE)",
                "type": "string"
              }
            },
            "required": [
              "isos"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=compare_isos\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Compare ISO Regions",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_intelligence_index",
          "title": "Market Intelligence Index",
          "description": "Real-time composite market health score (0-100) aggregating supply/demand balance, vacancy, absorption velocity, fiber depth, power availability, and pricing trend. Returns the index value, percentile rank across the 300+ market set, 7d/30d trend direction, and underlying component scores. Answers \"is this market healthy\", \"how does Northern Virginia look overall right now\". Try: get_intelligence_index market=northern-virginia. Returns ONE composite health number for a market; do NOT use for the full market metric set (use get_market_intel) or to rank multiple markets (use rank_markets).",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_intelligence_index\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Market Intelligence Index",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "list_transactions",
          "title": "M\u0026A Transactions",
          "description": "M\u0026A and capital transactions in the data center sector — 1,700+ tracked deals (2019-present), each with its disclosed value where public (many private deals are undisclosed). Returns deal name, buyer, seller, value, date, market, target operator, type (acquisition/JV/refinance/recap). Filter by date range (date_from/date_to, ISO-8601), min_value_usd, region, buyer, or seller. Answers \"which data-center deals closed this year\", \"what was that acquisition worth\". Try: list_transactions date_from=2026-01-01 min_value_usd=1000000000. There is no `year` parameter — use date_from/date_to. Broad M\u0026A 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).",
          "inputSchema": {
            "properties": {
              "buyer": {
                "description": "Filter by acquiring company name, e.g. Blackstone, KKR, Digital Realty",
                "type": "string"
              },
              "date_from": {
                "description": "Earliest deal date, ISO-8601 (YYYY-MM-DD)",
                "type": "string"
              },
              "date_to": {
                "description": "Latest deal date, ISO-8601 (YYYY-MM-DD)",
                "type": "string"
              },
              "deal_type": {
                "description": "Deal type filter, e.g. acquisition, jv, refinance, recap",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "max_value_usd": {
                "description": "Maximum disclosed deal value in US dollars",
                "type": "number"
              },
              "min_value_usd": {
                "description": "Minimum disclosed deal value in US dollars, e.g. 1000000000 for $1B+",
                "type": "number"
              },
              "offset": {
                "description": "Pagination offset, 0-based (skip this many results)",
                "maximum": 100000,
                "minimum": 0,
                "type": "integer"
              },
              "region": {
                "description": "Geographic region filter, e.g. us, eu, apac, americas",
                "type": "string"
              },
              "seller": {
                "description": "Filter by selling/target company name, e.g. CyrusOne",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Data-center M\u0026A / capital transactions: `transactions` rows with buyer/seller/value/date — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "cached": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Whether the response was served from cache"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Rows returned in THIS response"
              },
              "data_source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Where the deal set comes from"
              },
              "note": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Serving note"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "success": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the deal query succeeded"
              },
              "tier": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Tier the response was served at"
              },
              "total_count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Total deals matching the filter"
              },
              "total_value": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Aggregate disclosed value across the returned set (null when not computed)"
              },
              "total_value_unit": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Unit of total_value"
              },
              "transactions": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "buyer": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Acquirer"
                        },
                        "date": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal date (ISO-8601)"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal id"
                        },
                        "market": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Market the deal touches"
                        },
                        "mw": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Capacity involved, MW, when disclosed"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Region (us | eu | apac | americas …)"
                        },
                        "seller": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Seller / target"
                        },
                        "type": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "acquisition | jv | refinance | recap …"
                        },
                        "value": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal value when disclosed (see value_unit)"
                        },
                        "value_confirmed": {
                          "anyOf": [
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Whether the value is confirmed vs reported"
                        },
                        "value_display": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Human-formatted value, e.g. \"$9.2B\" or \"Undisclosed\""
                        },
                        "value_unit": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Unit of `value` (e.g. USD)"
                        },
                        "year": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal year"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "M\u0026A / capital-transaction rows"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=list_transactions\u0026ref=mcp-tools-list",
            "problem": "data-center M\u0026A and deals",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "M\u0026A Transactions",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_news",
          "title": "Industry News",
          "description": "FRONT DOOR CHECK — if news is only ONE input to a bigger question (is this market heating up, should we still build here), call `execute_plan(intent=\"\u003cthe user's question, unchanged\u003e\")` and let it pull news alongside the market and grid reads. If the user actually wants the headlines, get_news IS the right call — one round trip; do not send a plain news request through the planner. Curated data center industry news from 40+ trade sources (DCD, Data Center Knowledge, Data Center Frontier, Capacity Media, The Register Data Centre, Fierce Telecom, etc.) refreshed every 30 min. Returns title, summary, source, published_at, and the market/operator entities mentioned. Filter by category (deals/permits/outages/policy/AI). Answers \"what is happening in the data center industry this week\", \"any news on AI capacity\". Try: get_news category=AI limit=10. The parameter is `category`, not `topic`. Industry news only; do NOT use for structured M\u0026A deal data (use list_transactions) or the construction pipeline (use get_pipeline).",
          "inputSchema": {
            "properties": {
              "category": {
                "description": "News topic filter, e.g. deals, permits, outages, policy, AI",
                "type": "string"
              },
              "date_from": {
                "description": "Earliest published date, ISO-8601 (YYYY-MM-DD)",
                "type": "string"
              },
              "date_to": {
                "description": "Latest published date, ISO-8601 (YYYY-MM-DD)",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_relevance": {
                "description": "Minimum relevance score 0-1 to include an item, e.g. 0.5",
                "type": "number"
              },
              "query": {
                "description": "Free-text keyword to filter news, e.g. \"Stargate\" or \"interconnection queue\"",
                "type": "string"
              },
              "source": {
                "description": "Restrict to one trade source, e.g. DCD, \"Data Center Frontier\", \"Capacity Media\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_news",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Industry News"
          }
        },
        {
          "name": "semantic_search",
          "title": "Semantic Search",
          "description": "Use for CONCEPTUAL / fuzzy questions where keyword filters fall short — semantic (meaning-based) retrieval across DC Hub's industry news, M\u0026A 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)\".",
          "inputSchema": {
            "properties": {
              "corpus": {
                "description": "Optional CSV of corpora: news_articles, deals, discovered_facilities, market_narratives (default: all)",
                "type": "string"
              },
              "k": {
                "description": "Number of results, 1-15 (default 8)",
                "type": "number"
              },
              "q": {
                "description": "Natural-language query (required), e.g. \"grids opening up for AI load in the Southeast\"",
                "type": "string"
              },
              "query": {
                "description": "Alias for q — the same natural-language query; send exactly one of q/query",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=semantic_search",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Semantic Search"
          }
        },
        {
          "name": "search_intelligence",
          "title": "Search Intelligence",
          "description": "Semantic (meaning-based) search over DC Hub's live intelligence corpus — industry news, M\u0026A deals, discovered facilities, per-market DCPI narratives, press releases, announcements, permitting intel, construction permits, tax incentives and the capacity pipeline — returning the most relevant records with citable source fields. This is the agent-friendly alias over the SAME retrieval layer as semantic_search: same results, different call shape. It takes `query` plus short corpus names (news | deals | facilities | market_narratives | press | announcements | permitting | permits | incentives | pipeline); semantic_search takes `q` plus the full corpus names. Call ONE of them, not both. Params: query (required, natural language); corpus (optional CSV of the names above, default all); limit (1-15, default 8). BEHAVIOUR: read-only — it writes nothing, and repeat calls with the same arguments return the same records. ACCESS: works with no key, but anonymous results come back as a TRIMMED PREVIEW; the session X-API-Key hydrates full depth per key, and the free tier is capped per day (call claim_free_key once — no email — if you do not hold a key). Do NOT use when you can filter exactly: search_facilities for structured facility filters, get_news for date/keyword news, list_transactions for deal filters — those match fields and return complete sets, where this ranks by meaning and returns a top-N.",
          "inputSchema": {
            "properties": {
              "corpus": {
                "description": "Optional corpus to restrict to: news | deals | facilities | market_narratives. CSV of several is allowed; default searches all.",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return, 1-15 (default 8)",
                "type": "number"
              },
              "q": {
                "description": "Alias for query",
                "type": "string"
              },
              "query": {
                "description": "Natural-language query (required), e.g. \"grids opening up for AI load in the Southeast\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=search_intelligence",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Search Intelligence"
          }
        },
        {
          "name": "get_market_context",
          "title": "Get Market Context",
          "description": "Use when an agent needs a WHOLE-market briefing it can drop straight into its context window — one call returns a token-budgeted context pack for a data-center market: DCPI verdict, power \u0026 grid facts, the Claude-written 12-month outlook, M\u0026A 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)\".",
          "inputSchema": {
            "properties": {
              "market": {
                "description": "Market slug (required), e.g. northern-virginia, dallas, phoenix — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              },
              "max_tokens": {
                "description": "Token budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent",
                "type": "number"
              }
            },
            "required": [
              "market"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_market_context",
            "destructiveHint": false,
            "free_answer": "Keyless and free keys: a trimmed preview (top rows). Full depth is on the Developer plan and up, or a credit pack.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "developer_for_full",
            "title": "Get Market Context"
          }
        },
        {
          "name": "get_iso_context",
          "title": "Get Iso Context",
          "description": "Use when an agent needs a WHOLE-grid briefing it can drop straight into its context window — one call returns a token-budgeted context pack for a US ISO/RTO: live grid snapshot (demand, fuel-mix shares), DCPI verdict mix \u0026 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)\".",
          "inputSchema": {
            "properties": {
              "iso": {
                "description": "ISO/RTO grid region (required): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE",
                "type": "string"
              },
              "max_tokens": {
                "description": "Token budget for the pack, 200-8000 (default 4000); sections are filled in priority order until the budget is spent",
                "type": "number"
              }
            },
            "required": [
              "iso"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_iso_context",
            "destructiveHint": false,
            "free_answer": "Keyless and free keys: a trimmed preview (top rows). Full depth is on the Developer plan and up, or a credit pack.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "developer_for_full",
            "title": "Get Iso Context"
          }
        },
        {
          "name": "get_pipeline",
          "title": "Construction Pipeline",
          "description": "Use when a user asks \"what is being built / announced / permitted\" in a market or by an operator — the forward-looking construction pipeline. Example: \"What data centers are under construction in Northern Virginia and when do they come online?\" — get_pipeline country=US status=construction (there is no `market` parameter — filter by country/operator, or use search_facilities for a named market). Params: status one of \"announced\" | \"permitted\" | \"construction\" | \"operational\"; operator (e.g. \"Equinix\", \"Digital Realty\", \"AWS\"); country (ISO-2, e.g. \"US\", \"DE\"); min_capacity_mw (e.g. 50 to filter hyperscale); expected_completion_before (ISO date, e.g. \"2027-01-01\"); limit/offset for pagination. Returns: {projects:[{name, operator, capacity_mw, status, expected_commissioning, market_slug, country, lat, lon}], total, generated_at}. Do NOT use for already-operational facilities (use search_facilities) or for the M\u0026A deal flow (use list_transactions).",
          "inputSchema": {
            "properties": {
              "country": {
                "description": "ISO 3166-1 alpha-2 country code, e.g. US, DE, SG",
                "type": "string"
              },
              "expected_completion_before": {
                "description": "Only projects with expected commissioning before this ISO-8601 date (YYYY-MM-DD), e.g. 2027-01-01",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_capacity_mw": {
                "description": "Minimum project power capacity filter in megawatts (MW), e.g. 50 for hyperscale",
                "type": "number"
              },
              "offset": {
                "description": "Pagination offset, 0-based (skip this many results)",
                "maximum": 100000,
                "minimum": 0,
                "type": "integer"
              },
              "operator": {
                "description": "Operator/provider company name, e.g. Equinix, Digital Realty, AWS",
                "type": "string"
              },
              "status": {
                "description": "Pipeline stage filter: announced, permitted, construction, or operational",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_pipeline\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Construction Pipeline",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_power_pipeline",
          "title": "Get Power Pipeline",
          "description": "Use when a user asks WHERE NEW POWER GENERATION is coming online (the forward supply pipeline) — e.g. \"how much new generation is planned in Virginia / the Southeast / ERCOT, and when?\". Planned, permitting, and under-construction generators NATIONWIDE from EIA-860M, INCLUDING non-ISO regions (TVA, Southern Co, Arizona PS, PacifiCorp, LADWP) that interconnection-queue feeds miss. Each generator has location (lat/lng), state, county, balancing authority, technology/fuel (solar photovoltaic, onshore wind, natural-gas combined cycle, batteries, nuclear), nameplate megawatts (MW), status (planned → under construction), and planned online month/year. Filter by state (2-letter, e.g. VA), ba (balancing-authority/ISO code, e.g. PJM, ERCO, SOCO, TVA), status (P/L/T=planned, U/V=under construction, TS=testing), or min_mw. Returns a summary (total planned MW, mix by technology + status) plus the largest projects. Answers \"how much new generation is planned in Virginia and when does it land\". Try: get_power_pipeline state=VA. Do NOT use for ALREADY-OPERATING capacity or grid headroom (use get_grid_intelligence / get_grid_data) or for data-center construction projects (use get_pipeline).",
          "inputSchema": {
            "properties": {
              "ba": {
                "description": "Balancing-authority / ISO code, e.g. PJM, ERCO, SOCO, TVA, AZPS",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_mw": {
                "description": "Minimum nameplate capacity filter in megawatts (MW)",
                "type": "number"
              },
              "state": {
                "description": "US state abbreviation to filter generators, e.g. VA, TX",
                "type": "string"
              },
              "status": {
                "description": "Generator status code: P/L/T (planned), U/V (under construction), TS (testing)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_power_pipeline",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "power generation, gas and energy infrastructure",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Power Pipeline"
          }
        },
        {
          "name": "get_infra_projects",
          "title": "Get Infra Projects",
          "description": "Use when a user asks what GAS PIPELINE or TRANSMISSION LINE PROJECTS are planned, proposed, approved or under construction — the forward build-out, not the existing network. e.g. \"which interstate gas pipelines are under construction into Louisiana?\", \"what 345 kV transmission projects does ERCOT plan by 2028?\", \"what new projects appeared since last month?\". COVERS: (1) natural gas pipeline projects US-wide from the EIA natural gas pipeline projects list (public domain) — operator, status (Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed), states crossed, capacity in MMcf/d, miles, cost in $M, diameter, FERC/state docket, in-service year; (2) transmission projects from ERCOT's Transmission Project and Information Tracking list (TPIT) — ERCOT/TEXAS ONLY so far, no other ISO or utility — owner, from/to substation, county, kV, new and rebuilt miles, MVA, projected and actual in-service date, status (Planned, Conceptual, Under Construction, Completed, or dropped from the plan). Filter by type (gas_pipeline, transmission or all), state, status, min_capacity (gas MMcf/d), min_kv (transmission kV), an in-service window, new_since (projects first seen on or after a date, the initial backfill excluded) and include_delisted. Every row cites its source_url and license, and the summary counts every match by type, status and state with totals and an as_of date per source. Answers \"what gas pipelines are being built into Louisiana, how much capacity do they add, and when do they enter service\". Try: get_infra_projects type=gas_pipeline state=LA status=Construction. Do NOT use for new POWER GENERATION projects (use get_power_pipeline), for EXISTING, already-built pipelines, lines and substations (use get_infrastructure or get_grid_intelligence), or for data-center construction (use get_pipeline).",
          "inputSchema": {
            "properties": {
              "in_service_after": {
                "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",
                "type": "string"
              },
              "in_service_before": {
                "description": "Only projects entering service on or before this date (YYYY-MM-DD or YYYY)",
                "type": "string"
              },
              "include_delisted": {
                "description": "Also return projects the latest source release no longer lists (completed, withdrawn or dropped). Default false",
                "type": "boolean"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_capacity": {
                "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",
                "type": "number"
              },
              "min_kv": {
                "description": "Transmission only: minimum voltage in kilovolts (kV), e.g. 345. With type=all it narrows to transmission projects",
                "type": "number"
              },
              "new_since": {
                "description": "Only projects DC Hub first saw on or after this date (YYYY-MM-DD). The initial backfill is never counted as new",
                "type": "string"
              },
              "state": {
                "description": "US state abbreviation, e.g. TX or LA. Gas projects match any state they cross; transmission projects are all TX",
                "type": "string"
              },
              "status": {
                "description": "Status, case-insensitive; comma list allowed. Gas: Announced, Pre-applied, Applied, Approved, Construction, On Hold, Completed. Transmission: Planned, Conceptual, Under Construction, Completed, Cancelled",
                "type": "string"
              },
              "type": {
                "description": "Which project list: gas_pipeline (EIA, US-wide), transmission (ERCOT TPIT, Texas only) or all (default)",
                "enum": [
                  "gas_pipeline",
                  "transmission",
                  "all"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_infra_projects",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Infra Projects"
          }
        },
        {
          "name": "get_power_availability_timeline",
          "title": "Get Power Availability Timeline",
          "description": "Use this whenever the user asks when power will be available, or about time-to-power, in a US state. Power-availability TIMING for one US state — when power gets EASIER, year by year. Composes: new generation coming online from EIA-860M monthly, split by confidence class (under-construction vs planned vs testing — never blended); scheduled retirements as dated subtractions; LBNL interconnection-queue depth as congestion context (NO delivery dates — the feed has none and most queued MW never completes). The one derived number, cumulative_firm_signal_mw, counts ONLY under-construction+testing minus retirements — speculative permitting-stage MW is shown but never folded in. Answers \"when is new capacity landing in Ohio\", \"what comes online in Georgia by 2027\" with dated, sourced, per-lane-vintaged numbers. HONESTY LINE: supply-side signals, not a load-interconnection promise — generation ≠ deliverable load, and utility study timelines / large-load tariff processes / substation-grain delivery are declared out of coverage in constraint_coverage rather than estimated. Try: get_power_availability_timeline state=OH. Do NOT use for the raw project list (get_power_pipeline), live headroom today (get_grid_intelligence), queue survivors (get_refined_queue), or where-to-build ranking (rank_markets / ai_capacity_index) — this answers WHEN, for one state.",
          "inputSchema": {
            "properties": {
              "mw": {
                "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",
                "type": "number"
              },
              "state": {
                "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",
                "type": "string"
              },
              "years": {
                "description": "Window in years from now, 1-6 (default 5)",
                "type": "number"
              }
            },
            "required": [
              "state"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_power_availability_timeline",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "execute_plan",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "grid headroom and power availability",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Power Availability Timeline"
          }
        },
        {
          "name": "get_global_power",
          "title": "Get Global Power",
          "description": "Use when a user asks about power plants/units WORLDWIDE or in a NON-US country — operating AND the forward pipeline (announced / pre-construction / under-construction), across ALL fuels (coal, oil/gas, nuclear, solar, wind, hydro, bioenergy, geothermal). Global Energy Monitor Global Integrated Power Tracker: 182,000+ geolocated units across 170+ countries, each with fuel, capacity (MW), status, start year, operator/owner and lat/lng. Filter by country (e.g. Germany, India, Brazil, Japan), fuel (comma-union: coal, oil/gas, nuclear, solar, wind, hydro), status, pipeline=true (JUST the forward set: announced + pre-construction + construction), bbox (minLng,minLat,maxLng,maxLat), or min_mw. Returns a summary (total MW by fuel + count by status) plus the largest units. Answers \"what power is being built in India\", \"how much coal is still running in Vietnam\". Try: get_global_power country=India pipeline=true. Do NOT use for US grid telemetry/headroom (use get_grid_intelligence / get_grid_scoreboard) or the US planned-generator feed (use get_power_pipeline) — this is the GLOBAL asset inventory.",
          "inputSchema": {
            "properties": {
              "bbox": {
                "description": "Viewport filter as minLng,minLat,maxLng,maxLat",
                "type": "string"
              },
              "country": {
                "description": "Country/area name to filter, e.g. Germany, India, Brazil, Japan",
                "type": "string"
              },
              "fuel": {
                "description": "Fuel/type filter, comma-separated for a union: coal, oil/gas, nuclear, solar, wind, hydro, bioenergy, geothermal",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_mw": {
                "description": "Minimum unit capacity in MW",
                "type": "number"
              },
              "pipeline": {
                "description": "true = ONLY the forward pipeline (announced + pre-construction + under-construction)",
                "type": "boolean"
              },
              "status": {
                "description": "Status substring filter, e.g. operating, construction, pre-construction, announced",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_global_power",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_power_pipeline",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "power generation, gas and energy infrastructure",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Global Power"
          }
        },
        {
          "name": "get_interconnection_queue",
          "title": "Interconnection Queue",
          "description": "Use this whenever the user asks about grid interconnection queues or how much load is waiting to connect. Call when the user asks how congested an ISO's interconnection queue is or how much data-center load is queued. Returns queued generation GW per ISO. The projects field changes shape: with iso= it is an array of per-project rows; without iso it is an all-ISO summary object (total, by_iso_count, top). ERCOT also returns its large-load (data-center) queue; other ISOs don't publish one. Keyless: a trimmed preview; free with an email-bound key. Ex: \"How deep is ERCOT's queue?\"",
          "inputSchema": {
            "properties": {
              "iso": {
                "description": "ISO/RTO grid region to drill into: ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE; omit for the all-ISO snapshot",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "ISO interconnection-queue snapshot: queued GW, per-project rows, and (ERCOT) the large-load data-center queue — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "as_of": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Queue snapshot date"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "historical_completion_pct": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Share of queued projects that historically complete, % (when published)"
              },
              "iso": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ISO/RTO this snapshot covers (per-ISO drill-down form)"
              },
              "new_applications_period": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Period the new-applications figure covers"
              },
              "new_applications_q_gw": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "New queue applications in the latest period, GW (when published)"
              },
              "project_count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Projects in the queue snapshot"
              },
              "projects": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "items": {
                          "additionalProperties": {},
                          "properties": {
                            "capacity_mw": {
                              "anyOf": [
                                {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "string"
                                    }
                                  ]
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Nameplate capacity, MW"
                            },
                            "county": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "County"
                            },
                            "fuel_type": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Fuel / technology"
                            },
                            "iso": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "ISO/RTO"
                            },
                            "project_name": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Project name"
                            },
                            "queue_date": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Queue entry date"
                            },
                            "queue_id": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "ISO queue position id"
                            },
                            "queue_status": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Queue status"
                            },
                            "state": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "US state"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      {
                        "additionalProperties": {},
                        "properties": {
                          "by_iso_count": {
                            "description": "Per-ISO project counts, e.g. {\"PJM\":972,\"ERCOT\":1893,\"CAISO\":279}"
                          },
                          "note": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "How the all-ISO rollup was assembled and where to get the full per-ISO list"
                          },
                          "top": {
                            "description": "The largest projects across all ISOs (same row shape as the per-ISO array form)"
                          },
                          "total": {
                            "anyOf": [
                              {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "string"
                                  }
                                ]
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Projects in the full multi-ISO queue, e.g. 5512"
                          },
                          "tracked": {
                            "anyOf": [
                              {
                                "type": "boolean"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Whether DC Hub has classified named per-project rows for this snapshot"
                          }
                        },
                        "type": "object"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "SHAPE DEPENDS ON THE CALL: with iso= this is an ARRAY of queued generation projects (largest / most recent first); with iso omitted it is the all-ISO SUMMARY OBJECT {total, tracked, by_iso_count, top, note} — per-project rows are not returned for the all-ISO snapshot. Check the type before indexing."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "queued_generation_gw": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Generation interconnection queue in this ISO, GW (US ISOs; ERCOT's generation queue, not its large-load queue). null on NESO/IESO/AESO"
              },
              "queued_load_data_center_gw": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ERCOT: data-center load DERIVED as ~90% of the large-load queue, GW. NESO/IESO/AESO: demand projects in the connections queue (all demand, not data centres only). null elsewhere"
              },
              "queued_load_dc_share_pct": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ERCOT: data-center share of the large-load queue, %. NESO/IESO/AESO: demand share of the connections queue, %. null elsewhere"
              },
              "queued_load_total_gw": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Meaning depends on queued_load_total_gw_basis: generation_queue = the generation queue (deprecated alias of queued_generation_gw, removed after 2026-11-15); large_load = ERCOT's large-load (demand) queue; mixed_connection_queue = NESO/IESO/AESO connections queue (generation AND demand). GW"
              },
              "queued_load_total_gw_basis": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "What queued_load_total_gw measures on this row: generation_queue | large_load | mixed_connection_queue"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "source_name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Queue source name"
              },
              "source_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Queue source URL"
              },
              "top_subregions": {
                "description": "Provenance / sub-region breakdown for the large-load figure (ERCOT)"
              },
              "v": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Verification flag for the snapshot"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "front_door": "execute_plan",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_interconnection_queue\u0026ref=mcp-tools-list",
            "problem": "grid headroom and power availability; interconnection queues",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Interconnection Queue",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_refined_queue",
          "title": "Get Refined Queue",
          "description": "Server-side SET-REDUCTION over the US ISO interconnection queue. Instead of pulling the raw queue into context to filter (token-expensive, error-prone), push the predicates to the data layer and get back ONLY the survivors. Filter by min_mw, max_ttp_months (ISO-level avg interconnection wait), iso (comma-union), baseload_only (firm/dispatchable — excludes wind/solar/storage), fuel_type (isolate a specific fuel, e.g. gas or nuclear), and the spatial predicates max_fiber_km + geocoded_only. Returns _entity=queue_results: per-project name, ISO, state/county, fuel_type, capacity_mw, queue_status, estimated_ttp_months, fuel_class, plus (~83% of rows) lat/lng, coordinate_precision, fiber_km, and a compact per-survivor site_evaluation_handoff (ready-to-pipe analyze_site + get_water_risk args) + a by_iso/by_fuel summary. Answers \"show me 1 GW+ gas projects that can connect in under three years\", \"what is in the queue that actually fits my timeline\". Try: get_refined_queue min_mw=1000 fuel_type=gas max_ttp_months=34 — \"1 GW+ gas in ISOs under 34-month time-to-power.\" NOTE max_ttp_months is a HARD ISO cut (SPP ~24 is the only ISO under 30, so \u003c=30 can return nothing); use \u003e=34 to include MISO/ERCOT/ISO-NE. Use for high-cardinality siting/arbitrage scans; do NOT use for the ISO-level GW aggregate (use get_interconnection_queue) or a single-site read (use analyze_site). Phase 2 LIVE: pipe a survivor's site_evaluation_handoff straight into analyze_site for a one-call composite viability read. CANDIDATE CONTRACT (2026-07-11): every survivor also mints a durable opaque candidate_id + snapshot_id (7-day TTL, deterministic candidate_expired on lapse — never a silent recompute). ZERO-DRIFT CHAINING: pass candidate_id to analyze_site / rank_sites instead of transposing coordinates — downstream reads the FROZEN mint, eliminating param-rename/rounding/lost-context drift. geocoded_only=true guarantees every survivor carries both the handoff AND frozen coordinates. Contract doc: dchub.cloud/docs/candidate-lifecycle.",
          "inputSchema": {
            "properties": {
              "baseload_only": {
                "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). Default false",
                "type": "boolean"
              },
              "fuel_type": {
                "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. Runs the fuel filter server-side instead of post-filtering survivors in context",
                "type": "string"
              },
              "geocoded_only": {
                "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",
                "type": "boolean"
              },
              "iso": {
                "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",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "max_fiber_km": {
                "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",
                "type": "number"
              },
              "max_ttp_months": {
                "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; \u003c=30 leaves only SPP)",
                "maximum": 120,
                "minimum": 1,
                "type": "integer"
              },
              "min_mw": {
                "description": "Minimum project capacity in MW, e.g. 1000 for 1 GW+",
                "type": "number"
              },
              "status": {
                "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'). Pass 'all' for every status, or a literal label to substring-match",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_interconnection_queue",
            "idempotentHint": true,
            "limits": "the queue feed carries no delivery dates, and most queued MW never completes — queue depth is congestion context, not a timeline",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_refined_queue\u0026ref=mcp-tools-list",
            "problem": "interconnection queues",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Refined Queue",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_retirement_headroom",
          "title": "Get Retirement Headroom",
          "description": "Scans scheduled EIA-860M generator retirements to find near-term transmission grid headroom — a retiring plant is a CONCRETE headroom event (its POI frees injection capacity), from FILED data, not forecasts. Returns _entity=retirement_headroom_results: retiring generators inside your horizon (name, MW, fuel, prime mover, retirement_date), representative_point, nearest substations with distance_km + count within 25 km, county-level queue_pressure (competing in-progress MW), iso_context (the generator's own EIA balancing-authority code), and a pre-filled site_evaluation_handoff (analyze_site + get_water_risk args, capacity_mw = YOUR target load). Answers \"where is grid capacity about to free up\", \"which retiring plants open injection headroom near me\". Try: get_retirement_headroom target_mw=50 horizon_months=18 region_iso=MISO — \"50 MW opening near a substation inside 18 months, sidestepping the 4-7yr mega-queue.\" Honesty: meta.caveat flags that filed dates are subject to ISO reliability reviews (RMR extensions). Use to find WHERE capacity opens next; for what's already queued use get_refined_queue; for one site use analyze_site.",
          "inputSchema": {
            "properties": {
              "fuel_filter": {
                "description": "Optional filter for retiring fuel categories, substring-matched (e.g., 'Coal', 'Natural Gas', 'Petroleum').",
                "type": "string"
              },
              "horizon_months": {
                "description": "Time horizon in months to look ahead for planned retirements, 1-120 (e.g., 12, 18, 36).",
                "maximum": 120,
                "minimum": 1,
                "type": "integer"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "region_iso": {
                "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.",
                "type": "string"
              },
              "target_mw": {
                "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).",
                "type": "number"
              }
            },
            "required": [
              "target_mw",
              "horizon_months"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_power_pipeline",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_retirement_headroom\u0026ref=mcp-tools-list",
            "problem": "power generation, gas and energy infrastructure",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Retirement Headroom",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_hosting_capacity",
          "title": "Feeder Hosting Capacity",
          "description": "Utility-PUBLISHED feeder hosting capacity — the MW a NAMED distribution feeder can actually take, straight from the utility's own hosting-capacity GIS. Published records from many utilities (e.g. Con Edison, National Grid NY/MA, NYSEG/RG\u0026E, Rhode Island Energy, Orange \u0026 Rockland, Central Hudson, Eversource CT, BGE, Pepco/Delmarva/ACE, Dominion VA, Ameren Illinois, AEP Ohio \u0026 I\u0026M, Xcel MN/CO, DTE, Avista; the no-args call lists current coverage). This is filed distribution-level truth, not a proximity proxy. Three ways to call it: lat+lon (+radius_km, default 25) for a point; utility or market for a whole published territory; NO ARGS for the coverage list of every market that has data. CRITICAL — check capacity_type before quoting any number: \"load\" = LOAD-serving headroom, what a new data-center load can actually DRAW (only Ameren Illinois, AEP Ohio \u0026 I\u0026M and Central Hudson publish it); \"gen\" = DER/generation EXPORT capacity, what the feeder can ACCEPT from solar/storage — it is NOT available load and must never be relayed as \"you can site N MW here\"; \"bus_headroom\" = transmission bus MW. Returns, split by capacity_type: distinct feeder count, max + median MW, the top feeders with substation, voltage_kv, feeder_id, coords and publish date, plus the utilities publishing them. Honest by construction — published rows are GIS vertices, so distinct_feeders and geometry_rows_scanned are reported separately (never conflated), and a capacity-capped read is flagged sample_complete=false with the capacity_floor_mw at or above which the set IS provably complete. Coverage is concentrated in the Northeast, Mid-Atlantic and Midwest — NOT nationwide — and a point outside them returns an explicit not-published answer with the nearest covered markets, never a silent zero. Answers \"can this feeder actually take 20 MW\", \"where can I plug in without waiting on a substation upgrade\". Try: get_hosting_capacity utility=\"Ameren Illinois\" capacity_type=load min_mw=5. Do NOT use for transmission-substation proximity or time-to-power (use get_grid_intelligence), the ISO interconnection queue (use get_interconnection_queue / get_refined_queue), or retiring-plant headroom (use get_retirement_headroom) — this is the distribution FEEDER layer. Informational, not binding interconnection guidance; verify with the utility.",
          "inputSchema": {
            "properties": {
              "capacity_type": {
                "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). Omit to get all three reported separately.",
                "type": "string"
              },
              "lat": {
                "description": "Latitude of the point to search around, decimal degrees. Must be paired with lon.",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Longitude of the point to search around, decimal degrees. Must be paired with lat.",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "market": {
                "description": "Alias for utility — either name works (e.g. \"Northern Virginia · Richmond\", \"New York City · Westchester\").",
                "type": "string"
              },
              "min_mw": {
                "description": "Only return feeders whose published capacity is at or above this many MW.",
                "type": "number"
              },
              "radius_km": {
                "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.",
                "maximum": 150,
                "minimum": 1,
                "type": "number"
              },
              "utility": {
                "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.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_hosting_capacity",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_infrastructure",
            "idempotentHint": true,
            "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",
            "maturity": "partial",
            "openWorldHint": false,
            "problem": "substations and transmission",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Feeder Hosting Capacity"
          }
        },
        {
          "name": "analyze_parcel",
          "title": "Analyze Parcel",
          "description": "Structured read of a parcel BOUNDARY — pass your own GeoJSON Polygon/MultiPolygon, OR just lat+lon and DC Hub finds the containing parcel in its HOSTED parcel-boundary layer (free county/state GIS polygons, rolling out by data-center market — Loudoun County VA first; a point outside hosted coverage returns an honest 404 with the coverage list, never a guess). Returns _entity=parcel_analysis: geodesic total_acres, a per-member acreage breakdown, a contiguous flag, representative_point = the centroid of the LARGEST-area member (never the multi-part geometric center, which can land off-parcel on a highway median or river and poison every point-keyed read), and hosted_parcel {parcel_id, county, state, acres_per_source} when the polygon came from the hosted layer. Also returns a site_evaluation_handoff to pipe into analyze_site + get_water_risk at that anchor. Use when you HAVE a boundary or a point on a specific parcel and want it anchored + sized; for a general lat/lon site score use analyze_site; for the interconnection-queue survivor set use get_refined_queue (queue rows carry NO parcel identity, so they never auto-join to hosted parcels).",
          "inputSchema": {
            "properties": {
              "capacity_mw": {
                "description": "Optional target load in MW to pass through into the site_evaluation_handoff",
                "type": "number"
              },
              "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"
              },
              "lat": {
                "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",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Longitude of a point ON the parcel (used with lat when geometry is omitted)",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=analyze_parcel",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Analyze Parcel"
          }
        },
        {
          "name": "rank_sites",
          "title": "Rank Sites",
          "description": "Deterministic multi-site ranking/optimization under constraints — the normalization contract that lets you compare sites across separate analyze_site calls WITHOUT dropping into code. Pass candidates you already enriched (each an object with lat/lng + metric fields like risk_resilience, water_stress, fiber_km — pull these from analyze_site + get_refined_queue and pass site_evaluation_handoff through untouched), hard constraints, and weighted objectives; get back _entity=ranked_sites: top_k ranked with rank, objective_score, per-field normalized{} (0-100 relative to the set), and normalization_basis. objectives use SIGNED weights: +weight maximizes a field (e.g. risk_resilience:1), -weight minimizes it (e.g. water_stress:-0.6, fiber_km:-0.4). constraints are hard filters, fail-closed on a missing field. Use for \"pick the best N sites under constraints\"; for one site use analyze_site; to get the candidate set first use get_refined_queue. SCORING MECHANICS (2026-07-11): a candidate missing a validated objective is weight-RENORMALIZED over the objectives it carries and the gap is DECLARED in missing_objectives (never silently scored 0); a candidate carrying none scores null and ranks last. percentile=true fields without a population baseline fall back to RELATIVE in-batch scoring (basis reported per-objective in objective_status). CANDIDATE CONTRACT: candidates may be {candidate_id: \"cand_…\"} entries from get_refined_queue — frozen identity (lat/lng/capacity_mw/fiber_km/iso) loads from the mint, your metrics overlay the rest; expired/unknown ids are dropped AND declared in candidate_contract, never re-resolved.",
          "inputSchema": {
            "properties": {
              "absolute": {
                "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 scores like risk_resilience/fiber_connectivity), not raw distances like fiber_km",
                "type": "boolean"
              },
              "candidates": {
                "description": "Array of candidate objects. PREFERRED: {candidate_id: \"cand_…\", \u003cyour metric fields\u003e} using ids from get_refined_queue — frozen coordinates/capacity/fiber_km load from the mint (zero transcription drift), your enrichments (e.g. overall_score from analyze_site) overlay. Legacy: {id?, lat?, lng?, \u003cmetric fields\u003e} flat objects also work. Omit if using shortlist_name"
              },
              "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}}"
              },
              "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": {
                "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. Works for fields with a maintained baseline (analyze_site metrics: overall_score, risk_resilience, fiber_connectivity, power_infrastructure, market_conditions, gas_pipeline_access, fiber_km, power_cost); other fields fall back to absolute (listed in unbaselined_fields). Takes precedence over absolute",
                "type": "boolean"
              },
              "require_complete": {
                "description": "true = DROP any candidate missing one or more of your (validated) objectives — dropped candidates are DECLARED in excluded_incomplete, never silent. Default false keeps incomplete candidates ranked on their carried objectives with missing_objectives flagged. Recommended true for autonomous take-rank-1 workflows (an incomplete candidate can otherwise top the ranking on its single best metric).",
                "type": "boolean"
              },
              "shortlist_name": {
                "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",
                "type": "string"
              },
              "top_k": {
                "description": "How many top-ranked sites to return (1-50, default 3)",
                "maximum": 50,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=rank_sites",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Rank Sites"
          }
        },
        {
          "name": "discover_tools",
          "title": "Discover Tools",
          "description": "Meta-tool: navigate DC Hub's tool catalog by FAMILY instead of scanning the whole list. Returns _entity=tool_families — a front_door block (execute_plan for any multi-capability question, get_changes to refresh) plus families with a when-to-use note + their tools (facility, market, grid_power, gas_btm, site_geometry, fiber, deals_news, saved_work, account_meta), optionally filtered by a query. Call this FIRST when you are unsure which tool fits a task; then call the chosen tool (its full schema is in tools/list). This is a navigation layer, not the exhaustive catalog — tools/list stays canonical, and if you are BINDING a capability map, bind it from tools/list, not from here.",
          "inputSchema": {
            "properties": {
              "query": {
                "description": "Optional keyword to filter families/tools, e.g. \"site selection\", \"grid queue\", \"fiber\", \"deals\", \"market\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=discover_tools",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Discover Tools"
          }
        },
        {
          "name": "plan_query",
          "title": "Plan Query",
          "description": "INSPECT-ONLY — returns the plan WITHOUT running it. For a real multi-step DC Hub question call `execute_plan(intent=\"...\")` instead: it uses the SAME deterministic no-LLM planner and then RUNS the sequence server-side, returning the answers in one envelope. Reach for plan_query only to review, log, diff or audit a plan before executing it yourself. Deterministic keyword routing over the tool registry — no LLM, no network, same intent always returns the same plan (free). Returns _entity=query_plan {best_tool, intent_confidence + workflow_confidence (dual 0-1: question-read vs executability), reason, planner_rationale, recommended_sequence:[{step, tool, depends_on, estimated_calls, why, args_hint}], execution_waves (steps grouped into concurrency waves), execution_strategy.parallel_groups, execution_estimate {estimated_calls, estimated_latency_ms, parallelizable}, alternatives (each with when + rejected_because), coverage_notes, matched_classes} plus a versioned `replay` (schema_version 1): planner_version, decisions:[{id, step, kind, status, decision, rationale, decision_confidence, depends_on}], rejected:[{id, tool, reason}], execution_graph:{waves, parallel_groups} — auditable and machine-readable, safe to log and diff across versions. args_hint values in \u003cangle brackets\u003e come from the named earlier step — substitute them, never invent them. Pass structured hints via context (lat/lon, iso, market, capacity_mw, candidate_id, state, since) to sharpen the plan. For a family-level browse use discover_tools. This tool plans — it never executes; tools/list stays canonical for schemas.",
          "inputSchema": {
            "properties": {
              "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)"
              },
              "intent": {
                "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\"",
                "type": "string"
              }
            },
            "required": [
              "intent"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Deterministic query plan: best_tool + ordered recommended_sequence over the DC Hub tool registry — keyword/regex routing, no LLM, same intent → same plan — plus a versioned replay decision-trail, alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "alternatives": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "rejected_because": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Why the planner did NOT make this the primary route — the deterministic rejection reason"
                        },
                        "tool": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Alternative tool name"
                        },
                        "when": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "When to prefer this tool over the recommended sequence"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Adjacent tools for nearby intents, including runner-up intent classes"
              },
              "best_tool": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The single best first tool to call for this intent (exact name from tools/list)"
              },
              "chaining": {
                "description": "Zero-drift chaining guidance (candidate_id contract) when the plan crosses get_refined_queue → analyze_site / rank_sites"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "confidence": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Deterministic router confidence, 0-1 — same intent always yields the same score; low values mean the intent was ambiguous (check alternatives). Alias of intent_confidence (v1 back-compat)."
              },
              "coverage_notes": {
                "description": "Tier/coverage caveats for the recommended tools (free-tier previews, depth gates, honest-unknown semantics)"
              },
              "estimated_calls": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Total estimated API calls for the whole plan (sum of per-step estimates)"
              },
              "execution_estimate": {
                "description": "r-planner-v3 deterministic cost preview: {estimated_calls (plan NODE count — one per step; the top-level estimated_calls is the fan-out-weighted API-call total), estimated_latency_ms (sum over waves of the SLOWEST tool in each wave, from a static 3-tier table: heavy synthesis 3000ms / standard read 1200ms / light free read 500ms), parallelizable (any wave holds 2+ steps)}"
              },
              "execution_strategy": {
                "description": "r-planner-v3 explicit strategy: {parallel_groups: string[][] — execution_waves rendered as TOOL-NAME arrays (e.g. [[\"get_grid_intelligence\",\"get_interconnection_queue\",\"get_refined_queue\"]]), note: plan-only disclaimer — this tool only plans; execute the sequence yourself}"
              },
              "execution_waves": {
                "description": "The execution graph as concurrency waves: array of arrays of step numbers; every step in a wave can run concurrently once earlier waves finish (derived from depends_on)"
              },
              "intent": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The natural-language intent that was routed (echoed back)"
              },
              "intent_class": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The matched intent class (market_ranking | capacity_search | market_comparison | grid_headroom | interconnection_queue | hosting_capacity | water_climate | site_analysis | deals_ma | fiber_power_pairing | fiber | price | incentives_tax | power_timeline | changes_delta | facility_search | unknown)"
              },
              "intent_confidence": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "How confident the router is that it read the QUESTION right (0-1, deterministic) — driven by keyword score + margin over the runner-up class"
              },
              "matched_classes": {
                "description": "Every intent class that scored, with its score — the router's full deterministic trace"
              },
              "note": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Router disclaimer — deterministic keyword routing, tools/list stays canonical"
              },
              "ok": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the intent was routed"
              },
              "parallelizable": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when at least one execution wave holds 2+ steps — the plan is not purely sequential"
              },
              "planner_rationale": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "One sentence on why the PLAN has this shape (ordering / parallelism / what mints what) — distinct from reason, which covers intent routing"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "reason": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Why the router chose best_tool — the matched keywords / context signals"
              },
              "recommended_sequence": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "args_hint": {
                          "description": "Suggested arguments — values in \u003cangle brackets\u003e are produced by an earlier step (e.g. \"\u003cmetro_slug from step 1\u003e\")"
                        },
                        "depends_on": {
                          "description": "Step numbers this step has a HARD DATA dependency on (it consumes a value they mint — slug, candidate_id, chosen ISO). Empty = can start immediately; user-supplied placeholders are not dependencies."
                        },
                        "estimated_calls": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Estimated API calls this step costs (fan-out steps like per-finalist reads are \u003e 1)"
                        },
                        "step": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "1-based step order"
                        },
                        "tool": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Tool name (exact, from tools/list)"
                        },
                        "why": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "What this step contributes to answering the intent"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Ordered tool sequence mirroring the DC Hub recipe for the matched intent class"
              },
              "replay": {
                "additionalProperties": {},
                "description": "FIRST-CLASS VERSIONED replay object (r-planner-v5.1, ChatGPT schema review): the planner's auditable decision trail — routing + per-step selection + rejections + concurrency graph, each decision with a stable id + status, keyed by planner_version so an agent can cite \"Decision D2 selected rank_markets because…\" and downstream tooling survives planner upgrades.",
                "properties": {
                  "compatibility": {
                    "description": "The stability contract, published in-object: schema v1 is additive-only (no removals / semantic changes); planner_version may change routing/confidence/sequences/coverage without a schema bump; breaking changes only ever at a new schema_version. Pin schema_version, not planner_version."
                  },
                  "decisions": {
                    "anyOf": [
                      {
                        "items": {
                          "additionalProperties": {},
                          "properties": {
                            "decision": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "What the planner decided (route to a class / call a tool)"
                            },
                            "decision_confidence": {
                              "anyOf": [
                                {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "string"
                                    }
                                  ]
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "0-1 — intent_confidence for the routing decision, workflow_confidence for step decisions"
                            },
                            "depends_on": {
                              "description": "Step numbers this step depends on (step decisions only)"
                            },
                            "id": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Stable decision id — D0 = routing decision, D1..Dn = per-step selections; cite as \"Decision D2\""
                            },
                            "kind": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "\"route\" (the intent→class decision) or \"step\" (a tool selection)"
                            },
                            "rationale": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "The deterministic reason for the decision"
                            },
                            "status": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Decision lifecycle — one of planned | running | completed | failed | skipped | cancelled. plan_query only ever emits \"planned\" (it never executes); the full enum is published now so consumers can code the whole lifecycle without an SDK bump later."
                            },
                            "step": {
                              "anyOf": [
                                {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "string"
                                    }
                                  ]
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "0 for the routing decision, else the 1-based step number"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The ordered, auditable decision trail — one route decision + one per recommended step"
                  },
                  "execution_graph": {
                    "description": "{waves: number[][], parallel_groups: string[][]} — the concurrency graph the plan executes as"
                  },
                  "intent": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The routed intent (echoed) — duplicated so replay is self-contained"
                  },
                  "intent_class": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The matched intent class (duplicated from plan_query.intent_class so replay deserializes alone)"
                  },
                  "note": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "How to read + cite the replay; plan-only disclaimer"
                  },
                  "planner_version": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Semantic version of the PLANNER BEHAVIOR (routing/output) — bumps when routing changes (e.g. 5.1 replay field renames → 5.2 capacity_search/market_comparison → 5.4 fiber_power_pairing → 5.5 the hosting_capacity distribution class → 5.6 the incentives_tax class + stateFromPlace arg signal → 5.7 rank-vs-incentives arbitration: ranking language demotes the statutory class, \"rank markets by\" credits market_ranking → 5.8 reversed-order timing vocabulary: \"timeline for power …\" reaches power_timeline on state-phrased asks while the ISO boost holds operator-phrased asks on grid_headroom → 5.9 replay.why_live_data, an additive per-class \"why this answer needed live data\" reason; routing unchanged → 5.10 why_live enum-ized: why_live_code from the canonical taxonomy why_live_reasons + phrase resolved from the snapshot; routing unchanged → 5.11 GEOGRAPHY SCOPING: a market_ranking intent naming a US state (or a city whose slug carries one) leads with site_selection_canvas region=\u003cST\u003e — the only ranking tool with a state parameter; ai_capacity_index takes only horizon/limit and rank_markets region accepts only global/us/canada/eu/apac/americas, so both previously answered state-scoped questions nationally. _execConstraintIsoSet also resolves a named state to its ISO set, so the C1 constraint_check can finally fire on state-phrased intents → 5.12 CORRIDORS: named corridor places (Loudoun, Prince William, Ashburn, Secaucus, Piscataway …) bind a centroid + radius for ARGUMENTS only — never class scoring — reported as replay.place_scope; a county or metro that could only be scoped to a state/ISO is reported as replay.scope_widened {widened_from, to}; execute_plan step results slim STRUCTURED (arrays to their first rows) and relay/upgrade/unlock fields pass through byte-identical → 5.13 GEOGRAPHY BINDS: every execute_plan step whose tool accepts a point, radius or state gets the plan geography when unset (executed[].geo_injected names what was set; _EXEC_GEO_ARGS pinned to toolspec.json); VA/NJ counties join the corridor table (Middlesex only beside New Jersey); the corridor radius cap is 300 km; step slimming is ALWAYS structured (no JSON-prefix fallback) and machine_pay, retry_*, persist_command and auto_trial_key join the never-cut fields). Distinct from schema_version."
                  },
                  "rejected": {
                    "anyOf": [
                      {
                        "items": {
                          "additionalProperties": {},
                          "properties": {
                            "id": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Stable rejection id (R1..Rn)"
                            },
                            "reason": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Why it was rejected — the deterministic rejected_because"
                            },
                            "tool": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "The tool/route the planner did NOT take"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Roads not taken, with reasons — the \"why not\" half of the audit trail"
                  },
                  "schema_version": {
                    "anyOf": [
                      {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "string"
                          }
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Version of the REPLAY OBJECT SHAPE (field set) — independent of planner_version; pin THIS in an SDK. Bumps only on a breaking shape change, so the planner routing revs so far (5.1 → 5.6) have all left it at 1."
                  },
                  "why_live_code": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "ENUM (v5.10): why this plan needs LIVE data — one of the requires_* codes published in the canonical taxonomy (/api/v1/canon/taxonomy why_live_reasons). Enumerated so stamped replays aggregate (\"N% of executions needed live queue data\"); count THIS, not the phrase. Absent when intent_class=unknown."
                  },
                  "why_live_data": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Human phrase for why_live_code, resolved from the same canonical taxonomy — display it, never parse it. Additive at schema v1 (introduced 5.9 as class-keyed prose; enum-backed since 5.10)."
                  }
                },
                "type": "object"
              },
              "routing_hint": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "advisory": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "States that this recommends an entry point and asserts nothing about success"
                      },
                      "best_path": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Where to start: `execute_plan` for a multi-capability question, or the one tool name for a single-capability lookup"
                      },
                      "expected_outputs": {
                        "anyOf": [
                          {
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "An output CLASS to expect — not a tool name"
                            },
                            "type": "array"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Bounded list of what the recommended path returns"
                      },
                      "external_sources_recommended": {
                        "anyOf": [
                          {
                            "items": {
                              "anyOf": [
                                {
                                  "additionalProperties": {},
                                  "properties": {
                                    "source_class": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ],
                                      "description": "Closed enum: brokerage_research | market_analytics | financial_context | utility_or_iso_filing | operator_disclosure"
                                    },
                                    "why": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ],
                                      "description": "What that class of source holds that DC Hub does not, quoting our own published limit"
                                    }
                                  },
                                  "type": "object"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "type": "array"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "What this question needs that DC Hub does NOT hold, named by SOURCE CLASS and never by vendor. An EMPTY array is an answer: DC Hub covers this class end to end."
                      },
                      "problem": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The matched intent class — the SAME closed enum as intent_class, so it is branchable, not free text"
                      },
                      "why": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Short deterministic rationale for that entry point"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "ADVISORY router: collapses 92 tools to one starting point, then names what lies outside DC Hub entirely. Deliberately carries no tool list, latency promise, confidence score, execution graph or planner version — those ride `replay` AFTER routing. Four fields specified by ChatGPT in the 2026-08-29 partner round; external_sources_recommended added on its own request in the 2026-08-30 briefing, because a source we do not own is not execution metadata."
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "workflow_confidence": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "How confident the router is that the plan can EXECUTE cleanly with the signals in hand (0-1, deterministic) — boosted by resolved context signals, docked for placeholder args the user must still supply; step-minted placeholders don't dock"
              },
              "workflow_confidence_basis": {
                "description": "The arithmetic behind workflow_confidence: {resolved_signals, minted_placeholders, user_supplied_placeholders}"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=plan_query",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Plan Query"
          }
        },
        {
          "name": "save_to_shortlist",
          "title": "Save To Shortlist",
          "description": "Save a site into a PERSISTENT, named shortlist that survives across conversations (Phase 5 statefulness). Snapshots the site's objectives + its current percentile objective_score, so you can re-score it later against the evolving national baseline. Use to build a durable siting shortlist across days/weeks; the list is scoped to your API key. Pair with get_shortlist to re-score + see drift. MINIMAL call: save_to_shortlist(shortlist_name=\"my-targets\", site={site_ref, lat, lng, capacity_mw}) — objectives are optional. If you DID rank the site (analyze_site / rank_sites), pass those metric fields inside site and your objectives map too, and the re-scoring reuses them. Requires an API key so the list is private to you and survives to your next conversation: call claim_free_key first if you have none.",
          "inputSchema": {
            "properties": {
              "notes": {
                "description": "Optional free-text note, e.g. \"strong fiber, acceptable water\"",
                "type": "string"
              },
              "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": {
                "description": "Name of the shortlist, e.g. \"Q3-2026-1GW-targets\" — created if new. REQUIRED.",
                "type": "string"
              },
              "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."
              }
            },
            "required": [
              "shortlist_name",
              "site"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=save_to_shortlist",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Save To Shortlist"
          }
        },
        {
          "name": "get_shortlist",
          "title": "Get Shortlist",
          "description": "Retrieve a saved shortlist (Phase 5). With refresh=true (default) each site is RE-SCORED against the current national percentile baseline and returns saved_score, current_score, and score_delta_since_saved — so you see whether a site slipped because IT changed or the POPULATION did. The reliable way to maintain a siting campaign across days/weeks. Scoped to your API key.",
          "inputSchema": {
            "properties": {
              "name": {
                "description": "The shortlist name to fetch",
                "type": "string"
              },
              "refresh": {
                "description": "true (default) = re-score every site against the CURRENT baseline + return drift deltas; false = return the saved snapshots only",
                "type": "boolean"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_shortlist",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "free_key",
            "title": "Get Shortlist"
          }
        },
        {
          "name": "set_shortlist_alert",
          "title": "Set Shortlist Alert",
          "description": "Set a DRIFT ALERT on a saved shortlist so you can stop polling and be notified when a site's national standing moves materially (Phase 5). Fires when any site in the shortlist has current percentile score \u003c percentile_below OR score_delta_since_saved \u003c 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.",
          "inputSchema": {
            "properties": {
              "delta_below": {
                "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)",
                "type": "number"
              },
              "notify": {
                "description": "Delivery: {\"webhook\":\"https://...\"} and/or {\"email\":\"you@co.com\"} — at least one required"
              },
              "percentile_below": {
                "description": "Fire if any site's current percentile objective_score drops below this (e.g. 70)",
                "type": "number"
              },
              "shortlist_name": {
                "description": "The shortlist to monitor (created via save_to_shortlist)",
                "type": "string"
              }
            },
            "required": [
              "notify"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=set_shortlist_alert",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Set Shortlist Alert"
          }
        },
        {
          "name": "suggest_reallocation",
          "title": "Suggest Reallocation",
          "description": "When a saved site DRIFTS (its national standing dropped — surfaced by get_shortlist refresh or a set_shortlist_alert firing), get replacement candidates from the rest of that shortlist so the alert becomes an action, not just a warning (Phase 5). Returns TWO tiers — tier_1_same_region (a near-in tactical swap) and tier_2_cross_region (a different-region arbitrage) — each re-scored against the DRIFTED slot's own objectives, PLUS drift_is_systemic: if the rest of your shortlist also slipped, the drop is region/baseline-wide and a same-region swap will inherit it (prefer cross_region); if peers held, it's idiosyncratic (tactical_ok). DC Hub does the reduction; the final weighted pick is yours. Candidates come from THIS shortlist only (save more via save_to_shortlist to widen the pool). Scoped to your API key.",
          "inputSchema": {
            "properties": {
              "drifted_site_ref": {
                "description": "Optional site_ref of the drifted slot to replace; if omitted, the current lowest-scoring site is treated as the drifted one",
                "type": "string"
              },
              "shortlist_name": {
                "description": "The shortlist to re-allocate within (created via save_to_shortlist)",
                "type": "string"
              }
            },
            "required": [
              "shortlist_name"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=suggest_reallocation",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "free_key",
            "title": "Suggest Reallocation"
          }
        },
        {
          "name": "get_grid_data",
          "title": "Live Grid Data",
          "description": "Real-time electricity grid data for the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE) via EIA hourly RTO: fuel mix, demand, 24h demand curve. Pass iso=PJM (any of the 7). Raw real-time telemetry for one ISO; do NOT use for power-availability, time-to-power or interconnection-queue analysis (use get_grid_intelligence), nor for retail/gas pricing detail (use get_energy_prices). For non-US grids (GB, EU bidding zones, Taiwan, Australia) use get_grid_scoreboard.",
          "inputSchema": {
            "properties": {
              "iso": {
                "description": "ISO/RTO grid region (required): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE",
                "type": "string"
              },
              "metric": {
                "description": "Optional metric focus, e.g. fuel_mix, demand, demand_curve",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "period": {
                "description": "Optional time window for the metric, e.g. 24h",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_grid_data\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Live Grid Data",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_changes",
          "title": "Get Changes",
          "description": "Incremental sync — what changed in DC Hub since a timestamp, so an agent pulls only the delta instead of re-fetching everything. Returns DCPI 7-day market movers, newly discovered facilities, new M\u0026A 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=\u003cISO-8601\u003e 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.",
          "inputSchema": {
            "properties": {
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "since": {
                "description": "Return changes since this ISO-8601 timestamp (YYYY-MM-DD or full datetime) or shorthand \"24h\"/\"7d\"; default 24h",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_changes",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Changes"
          }
        },
        {
          "name": "get_facility_risk_delta",
          "title": "Get Facility Risk Delta",
          "description": "Use when a user asks what has CHANGED in a facility's (or its market's) risk profile recently — \"has this site gotten riskier lately?\", \"which way is this market moving?\" — a temporal question static-trained models can't answer. Returns the REAL DCPI market-health delta (excess-power score change over the window, direction improving/worsening/flat) from DC Hub's history-preserving daily snapshots. INTEGRITY: only DCPI market-health has a short-term temporal series; the site-hazard dimensions (FEMA disaster / USGS seismic / NOAA climate / WRI water) are DECLARED static (they don't change week-to-week) with a pointer to the point-in-time tool — never a fabricated week-over-week delta; no snapshot history → coverage:unavailable. Params: facility_id (a discovered-facility id or slug) OR market (a market name/slug), since (e.g. \"7d\"/\"30d\", default 7d). Returns {facility, dcpi_market_health:{delta, now, direction, coverage}, static_dimensions{...}, summary}. For the current point-in-time risk (not the change) use get_composite_site_score / get_disaster_risk / get_climate_intel.",
          "inputSchema": {
            "properties": {
              "facility_id": {
                "description": "A DC Hub facility id or canonical slug to resolve the market context",
                "type": "string"
              },
              "market": {
                "description": "Alternatively, a market name or slug (e.g. \"northern-virginia\")",
                "type": "string"
              },
              "since": {
                "description": "Look-back window, e.g. \"7d\" or \"30d\" (default 7d)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_facility_risk_delta",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Facility Risk Delta"
          }
        },
        {
          "name": "save_site",
          "title": "Save Site",
          "description": "NEEDS A KEY (free): this WRITES to your account, so a keyless call returns auth_required — call `claim_free_key` FIRST (one step, no email) if you have none. Save a candidate data-center site to your DC Hub account to track it across sessions. Give lat + lon (plus optional name, state, market, target_mw, notes). Returns the saved site id. Pass `market` and DC Hub snapshots the site's DCPI baseline at save time, so every later list_saved_sites / get_changes shows how ITS score and verdict moved since you saved it. Builds a persistent shortlist an agent can revisit + monitor — after saving, pass the returned id to set_site_alert so DC Hub emails you when that site’s DCPI/capacity/nearby-facilities move (no re-checking). Answers \"remember this parcel for me\", \"keep this candidate so I can come back to it next session\". Try: save_site lat=39.04 lon=-77.48 name=\"Ashburn parcel\" market=northern-virginia target_mw=100. Do NOT use to read back the shortlist (use list_saved_sites), download it (use export_dataset), or score a site (use score_facility); this WRITES one site to your account.",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90), e.g. 39.04",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180), e.g. -77.48",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "market": {
                "description": "Market slug (metro) the site belongs to, e.g. northern-virginia",
                "type": "string"
              },
              "name": {
                "description": "Optional label for the saved site, e.g. \"Ashburn parcel\"",
                "type": "string"
              },
              "notes": {
                "description": "Optional free-text notes to store with the saved site",
                "type": "string"
              },
              "state": {
                "description": "US state abbreviation for the site, e.g. VA",
                "type": "string"
              },
              "target_mw": {
                "description": "Target power load for the planned build in megawatts (MW), e.g. 100",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=save_site",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Save Site"
          }
        },
        {
          "name": "list_saved_sites",
          "title": "List Saved Sites",
          "description": "NEEDS A KEY (free): saved sites are per-account, so a keyless call returns auth_required, not an empty list — if you have no key, call `claim_free_key` FIRST (one step, no email), then this. Use when a user asks to see or review their saved DC Hub shortlist in-chat, or wants to know what moved on it. Example: \"What sites have I saved?\" / \"Did any of my saved sites move?\" — list_saved_sites. Params: since (optional — \"24h\"/\"7d\"/ISO, default 7d — the delta window). Returns: each saved site with name, market, lat/lon, saved DCPI score, target MW, notes — PLUS live deltas: verdict_was/verdict_now (e.g. CAUTION → BUILD), excess-power move over the window, current vs at-save DCPI, alerts armed/fired, new facilities nearby, and a `portfolio` summary flagging which sites moved and which have no alert armed. Do NOT use to add a site (use save_site) or to download the list as a file (use export_dataset); this is the in-chat read-back.",
          "inputSchema": {
            "properties": {
              "since": {
                "description": "Delta window for per-site movement: \"24h\", \"7d\" (default) or an ISO-8601 timestamp — pass your cached generated_at from last session",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=list_saved_sites",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "free_key",
            "title": "List Saved Sites"
          }
        },
        {
          "name": "set_market_alert",
          "title": "Set Market Alert",
          "description": "Subscribe to movement alerts for a DCPI market (FREE with a key) — get notified when its Excess-Power / Constraint score moves. On the free tier, email alerts are delivered to the email your human bound via bind_email (call bind_email first; the destination is forced to that address). Set channel=\"email\". Webhook delivery (channel=\"webhook\" + destination=\u003chttps URL\u003e) is Pro. Lets an agent MONITOR markets, not just query them. Answers \"tell me when this market moves\", \"ping me if Northern Virginia’s power score changes\". Try: set_market_alert market=northern-virginia channel=webhook destination=https://hooks.example.com/dc. Do NOT use to read a market right now (use get_market_dcpi_rank); this SUBSCRIBES to future movement.",
          "inputSchema": {
            "properties": {
              "channel": {
                "description": "Delivery channel: \"email\" (free, sent to your bound email) or \"webhook\" (Pro)",
                "type": "string"
              },
              "destination": {
                "description": "For channel=\"webhook\", the https URL to POST alerts to (Pro); ignored for email (forced to bound address)",
                "type": "string"
              },
              "market": {
                "description": "Market slug (metro) to watch, e.g. northern-virginia — valid slugs come from rank_markets / get_market_dcpi_rank",
                "type": "string"
              }
            },
            "required": [
              "market",
              "channel"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=set_market_alert",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Set Market Alert"
          }
        },
        {
          "name": "subscribe_digest",
          "title": "Subscribe Digest",
          "description": "Subscribe your human to DC Hub's FREE weekly \"what changed in the markets/sites you queried\" digest (DCPI movers, new facilities, new deals \u0026 news) — ONE call, the nudge that pulls your agent back when the data moves. DOUBLE opt-in + consent-safe: we email a one-click CONFIRM link, the human only gets the digest after confirming, and every email has one-click unsubscribe — this call alone sets no marketing flag. Only call once your human shares their email and wants a weekly email. Params: email (required), source (optional tag). Returns {ok, sent, message}. Prefer this over hand-building POST /api/v1/opt-in/request.",
          "inputSchema": {
            "properties": {
              "email": {
                "description": "Your human's email address (required) — a one-click confirm link is sent; use only an address they explicitly gave",
                "type": "string"
              },
              "source": {
                "description": "Optional attribution tag for where the subscription came from, e.g. mcp_digest",
                "type": "string"
              }
            },
            "required": [
              "email"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=subscribe_digest",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Subscribe Digest"
          }
        },
        {
          "name": "set_site_alert",
          "title": "Set Site Alert",
          "description": "Arm an email watch on a site you already saved (FREE with a key) — DC Hub emails you when that site’s DCPI score, grid capacity, or nearby facilities move, so you don’t have to keep re-checking. On the free tier the alert is delivered to your human’s bound email (call bind_email first; notify_email is forced to that address). Pro can send to any address. The \"monitor my shortlist for me\" loop: call save_site first (it returns a saved_site_id), then set_site_alert on that id. Params: saved_site_id (required integer, from save_site or list_saved_sites), trigger_type (\"dcpi_change\" | \"capacity_change\" | \"new_facility_nearby\", default \"dcpi_change\"), threshold (number — the points/MW move that fires it, default 5), notify_email (required — the address the alert is sent to). Answers \"let me know if anything changes at the site I saved\". Try: set_site_alert saved_site_id=12 trigger_type=dcpi_change threshold=5 notify_email=you@firm.com. Returns {ok, alert_id, message}. Do NOT use to watch a whole MARKET (use set_market_alert) or to save a new site (use save_site); this arms a monitor on ONE already-saved site.",
          "inputSchema": {
            "properties": {
              "notify_email": {
                "description": "Email address the alert is sent to (required); on free tier forced to your human's bound email",
                "type": "string"
              },
              "saved_site_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ],
                "description": "The saved_site_id returned by save_site or list_saved_sites (required)"
              },
              "threshold": {
                "description": "The points/MW move that fires the alert (default 5)",
                "type": "number"
              },
              "trigger_type": {
                "description": "What movement fires the alert: \"dcpi_change\" (default), \"capacity_change\", or \"new_facility_nearby\"",
                "type": "string"
              }
            },
            "required": [
              "saved_site_id",
              "notify_email"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=set_site_alert",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Set Site Alert"
          }
        },
        {
          "name": "export_dataset",
          "title": "Export Dataset",
          "description": "Use when a user wants to pull their saved DC Hub shortlist OUT of the platform for offline analysis, a spreadsheet, or ingestion into another tool (PRO). Example: \"Export my saved sites as GeoJSON for QGIS.\" — export_dataset format=geojson. Params: format (\"csv\" default, or \"geojson\"). Returns: the full file contents as text — CSV rows or a GeoJSON FeatureCollection of your saved sites with DCPI score, target MW, market, coordinates, and notes. Do NOT use to list sites in-chat (use list_saved_sites) or to save a new one (use save_site); this is the bulk-download path.",
          "inputSchema": {
            "properties": {
              "format": {
                "description": "Output file format: \"csv\" (default) or \"geojson\" (for GIS tools like QGIS)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=export_dataset",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "Export Dataset"
          }
        },
        {
          "name": "find_sites",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "cluster_km": {
                "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",
                "type": "number"
              },
              "exclude_moratorium": {
                "description": "true = drop candidates in a state with a published data-center moratorium. STATE grain, not jurisdiction grain",
                "type": "boolean"
              },
              "lat": {
                "description": "Latitude of a search centre, e.g. 39.04 — use with lon (+ radius_km) instead of state",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Longitude of a search centre, e.g. -77.48",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "max_fiber_km": {
                "description": "Drop candidates farther than this from the nearest fiber route (CHORD approximation — see fiber_distance_basis). Applied ONLY if the fiber layer answers",
                "type": "number"
              },
              "max_gas_km": {
                "description": "Drop candidates farther than this from the nearest gas pipeline. Applied ONLY if the gas layer answers — check constraint_coverage",
                "type": "number"
              },
              "min_voltage_kv": {
                "description": "Only anchor on substations at or above this voltage in kV (default 115). 230+ for hyperscale, 500 for the largest campuses",
                "type": "number"
              },
              "radius_km": {
                "description": "Search radius in km around lat/lon (default 80, clamped 5-400); ignored in state mode",
                "type": "number"
              },
              "state": {
                "description": "2-letter US state to search, e.g. OH — required unless you pass lat + lon",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=find_sites",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Find Sites"
          }
        },
        {
          "name": "analyze_site",
          "title": "Analyze Site",
          "description": "Use this whenever the user asks whether a specific site or coordinate works for a data center. Call when the user has one location (lat/lon, or a market name for a market-level read) and asks if it suits a data center. Returns a 0-100 composite, verdict, power/gas/fiber/market/risk sub-scores, nearby infrastructure and power cost; capacity_mw adds a capacity_context block and does NOT move overall_score. Keyless returns no site data; a free key returns verdict bands, factor names and counts; scores and figures are Pro. Ex: \"Score 33.45,-112.07 for 100 MW.\"",
          "inputSchema": {
            "properties": {
              "candidate_id": {
                "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). See dchub.cloud/docs/candidate-lifecycle",
                "type": "string"
              },
              "capacity_mw": {
                "description": "Target power load for the build in megawatts (MW), e.g. 100 (typical 50-500)",
                "type": "number"
              },
              "include_fiber": {
                "description": "Include fiber-connectivity analysis (default true)",
                "type": "boolean"
              },
              "include_grid": {
                "description": "Include grid-headroom / substation analysis (default true)",
                "type": "boolean"
              },
              "include_risk": {
                "description": "Include water/drought/climate risk analysis (default true)",
                "type": "boolean"
              },
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90; required unless candidate_id or location given), e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "location": {
                "description": "Market NAME or metro slug instead of coordinates, e.g. \"ashburn\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. This is a MARKET-level read, not the parcel you named — pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.",
                "type": "string"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180; required unless candidate_id or location given), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "state": {
                "description": "US state abbreviation (optional) — improves the tax-incentive lookup, e.g. AZ",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Multi-factor site suitability for one lat/lon: composite score + verdict (+ per-factor breakdown, nearby infra, power cost, fiber on paid) — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "composite_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "0-100 composite site suitability score (free HEADLINE tier and full tier)"
              },
              "fiber": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Fiber read: {connectivity_score, nearest_carrier_km, near_net_bucket, top_carriers[], single_carrier_risk} (full payload)"
              },
              "interpretation": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Verdict prose on the full payload"
              },
              "limiting_factor": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "factor": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The lowest-scoring factor"
                      },
                      "note": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Why it limits the site"
                      },
                      "of": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Scale maximum (100)"
                      },
                      "score": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Its score"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Single top limiting factor (the lowest sub-score) — always present on the free headline"
              },
              "location": {
                "description": "Echo of the analyzed location (full payload)"
              },
              "locked": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Which sections are Pro-locked on the free headline: {per_factor_breakdown, nearby_infrastructure, power_cost, fiber_carriers, site_analysis_report}"
              },
              "nearby": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Nearby infrastructure counts: {substations_50km, power_plants_80km, gas_pipelines_50km, facilities_100km, fiber_carriers_in_state, generation_capacity_mw, total_capacity_mw} (full payload)"
              },
              "overall_score": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Alias of composite_score on the full payload"
              },
              "power_cost": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Power cost read: {industrial_cents_kwh, commercial_cents_kwh, period, basis} (full payload)"
              },
              "preview": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Headline preview line (free tier)"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "scores": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "fiber_connectivity": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "0-100"
                      },
                      "gas_pipeline_access": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "0-100"
                      },
                      "market_conditions": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "0-100"
                      },
                      "power_infrastructure": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "0-100"
                      },
                      "risk_resilience": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "0-100"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Per-factor breakdown (full/paid payload)"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "site_headline": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when this is the free citable HEADLINE (score + verdict + limiting factor)"
              },
              "verdict": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Verdict string, e.g. \"Excellent site\" / BUILD-CAUTION-AVOID read"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=analyze_site\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "Analyze Site",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_composite_site_score",
          "title": "Get Composite Site Score",
          "description": "Use when a user wants ONE honest 0-100 site suitability/risk verdict for a lat/lon WITH an explicit per-factor coverage map — which factors are actually measured vs. declared unavailable. Unlike analyze_site (full raw data dump), this scores ONLY over VALIDATED factors and never imputes a missing one: power/grid, fiber, natural-hazard risk (FEMA NRI) and water (live WRI Aqueduct 4.0 baseline water stress) are all live; water is \"unavailable\" only outside basin coverage (never faked); market/DCPI is v1-unavailable (use rank_markets). Example: get_composite_site_score lat=33.45 lon=-112.07 state=AZ. Returns {composite_score (0-100 over validated factors), verdict (BUILD/CAUTION/AVOID), confidence (complete|conditional), coverage {power_grid|fiber|water|risk_resilience|market_dcpi: validated|unavailable}, coverage_ratio, sub_scores, caveats}. Use analyze_site for full data, compare_sites for 2-4 sites, rank_markets for whole-market ranking.",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "state": {
                "description": "US state abbreviation (optional) — improves water/context lookups, e.g. AZ",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_composite_site_score",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "water and climate risk",
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "Get Composite Site Score"
          }
        },
        {
          "name": "get_disaster_risk",
          "title": "Get Disaster Risk",
          "description": "Use when a user wants the natural-hazard / disaster risk for a lat/lon — flood, wildfire, hurricane, earthquake, heat, drought, tornado, etc. Grounded in the FEMA National Risk Index (NRI), the authoritative US county-level hazard dataset (live query, never estimated; points outside US NRI coverage return coverage=unavailable). Example: get_disaster_risk lat=33.45 lon=-112.07. Returns {disaster_risk:{composite_score (0-100, higher=worse), rating (Very Low..Very High), national_percentile}, hazards:{Wildfire, Hurricane, Earthquake, Heat Wave, ...: rating}, top_hazards:[{hazard, rating}], coverage (validated|unavailable), source, caveats}. County-level resolution. For chronic water stress use get_water_risk; for one blended site verdict use get_composite_site_score.",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_disaster_risk",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_composite_site_score",
            "idempotentHint": true,
            "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "water and climate risk",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Disaster Risk"
          }
        },
        {
          "name": "get_climate_intel",
          "title": "Get Climate Intel",
          "description": "Use when a user wants seismic + climate intel for a lat/lon — the layer that drives data-center structural bracing cost (seismic) and cooling design (cooling degree-days, extreme temps). Grounded STRICTLY in USGS ASCE 7 (seismic) + NOAA climate normals via ACIS; every value traces to a federal source and missing data is declared unavailable, never estimated. Example: get_climate_intel lat=33.45 lon=-112.07. Returns {seismic_hazard_usgs:{status, peak_ground_acceleration_g, ss, s1, seismic_design_category, hazard_class}, climate_normals_noaa:{status, reference_station:{id,name,distance_km}, cooling_design_metrics:{cooling_degree_days_annual, extreme_max_dry_bulb_f, extreme_max_wet_bulb_f (null if source lacks it), data_vintage}}, overall_climate_summary, data_availability, sources}. radius_km (optional, default 25) snaps to the nearest NOAA station; beyond it climate returns unavailable_exceeds_radius. Seismic is US (ASCE 7); non-US → seismic unavailable. For natural-hazard ratings use get_disaster_risk; for one blended verdict use get_composite_site_score.",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "radius_km": {
                "description": "Max distance (km) to snap to the nearest NOAA station (optional, default 25)",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_climate_intel",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_composite_site_score",
            "idempotentHint": true,
            "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "water and climate risk",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Climate Intel"
          }
        },
        {
          "name": "generate_site_analysis",
          "title": "Generate Site Analysis",
          "description": "Use when a user wants a SHAREABLE, branded multi-page Site Analysis PDF for ONE lat/lon (a powered-land parcel, a candidate campus) — the polished client deliverable, not just a score. Example: \"Make the Site Analysis PDF for this Carrier Mills parcel, 150 MW, for TON Infrastructure.\" — generate_site_analysis lat=37.694 lon=-88.65 capacity_mw=150 prepared_for=\"TON Infrastructure\" prepared_by=\"Martone Advisors\". Params: lat (-90 to 90, required), lon (-180 to 180, required), capacity_mw (target load MW, e.g. 50-500), prepared_for (client name on the cover), prepared_by (your firm — brands the report; defaults to DC Hub), latency_target (optional metro override; default = nearest real carrier hotel). Returns: {survey:{verdict, power/transmission, gas, water, air-permitting, fiber carriers, latency-to-nearest-carrier-hotel, market, tax}, pdf_report_url}. pdf_report_url is a ready-to-open link to download the branded 5-page PDF — no login needed, valid ~7 days; hand it to your human. For just the numeric suitability score (no PDF), use analyze_site instead.",
          "inputSchema": {
            "properties": {
              "capacity_mw": {
                "description": "Target power load for the build in megawatts (MW), e.g. 150 (typical 50-500)",
                "type": "number"
              },
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 37.694",
                "type": "number"
              },
              "latency_target": {
                "description": "Optional metro to measure latency against; default = nearest real carrier hotel",
                "type": "string"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -88.65",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "prepared_by": {
                "description": "Your firm name that brands the report; defaults to DC Hub, e.g. \"Martone Advisors\"",
                "type": "string"
              },
              "prepared_for": {
                "description": "Client name printed on the report cover, e.g. \"TON Infrastructure\"",
                "type": "string"
              },
              "use_case": {
                "description": "Optional workload descriptor to tailor the report, e.g. \"AI training campus\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=generate_site_analysis\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "Generate Site Analysis",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "compare_sites",
          "title": "Compare Sites",
          "description": "Call when the user has 2-4 candidate locations and asks which is best for a data center. Pass locations as \"lat,lon;lat,lon\" and optional capacity_mw. Returns each site's analyze_site scores side by side plus a recommended winner and why. Keyless returns no site data; a free key gets each site's verdict band without figures; scores and figures are Pro. Ex: \"Phoenix vs Ashburn for 50 MW?\"",
          "inputSchema": {
            "properties": {
              "capacity_mw": {
                "description": "Target power load for the build in megawatts (MW), e.g. 50 (typical 50-500)",
                "type": "number"
              },
              "locations": {
                "description": "Semicolon-separated list of 2-4 \"lat,lon\" pairs to compare, e.g. \"33.45,-112.07;39.04,-77.48\"",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "sites": {
                "description": "Alternative to locations: an array of {lat, lon} (or {lat, lng}) objects, 2-4 sites"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=compare_sites\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "Compare Sites",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_infrastructure",
          "title": "Nearby Infrastructure",
          "description": "Nearby infrastructure for a location — substations (count + max voltage_kv within radius), transmission lines (\u003e69 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).",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Center latitude in decimal degrees (-90 to 90, required), e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "layer": {
                "description": "Optional single asset layer to return, e.g. substations, transmission, pipelines, power_plants",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Center longitude in decimal degrees (-180 to 180, required), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "min_voltage_kv": {
                "description": "Only include transmission/substations at or above this voltage in kV, e.g. 69",
                "type": "number"
              },
              "radius_km": {
                "description": "Search radius in kilometers around the point, e.g. 25",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "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",
            "maturity": "partial",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_infrastructure\u0026ref=mcp-tools-list",
            "problem": "substations and transmission",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Nearby Infrastructure",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_fiber_intel",
          "title": "Fiber Intelligence",
          "description": "Use this whenever the user asks about fiber routes, carriers or connectivity for a site or market. Call when the user asks which fiber routes or carriers serve a metro, or wants long-haul, metro, dark or IX routes mapped. Filter by carrier, route_type, market. Returns GeoJSON routes: carrier, type, fiber count, lit capacity, distance. Free callers get a sample of routes, not the full set; the full set needs a paid key. Ex: \"Zayo long-haul routes via Dallas.\"",
          "inputSchema": {
            "properties": {
              "carrier": {
                "description": "Fiber carrier to filter on, e.g. Zayo, Lumen, Cogent, \"Crown Castle\", Windstream, GTT, Uniti; omit for all carriers",
                "type": "string"
              },
              "include_sources": {
                "description": "Include upstream data-source/provenance metadata in the response",
                "type": "boolean"
              },
              "market": {
                "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.",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "route_type": {
                "description": "Route class: \"metro\", \"longhaul\", \"dark\", or \"ix\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Fiber-route intelligence as a GeoJSON FeatureCollection (carrier, route_type, capacity, distance per feature) — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "features": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "geometry": {
                          "description": "GeoJSON geometry (LineString/MultiLineString route path)"
                        },
                        "properties": {
                          "anyOf": [
                            {
                              "additionalProperties": {},
                              "properties": {
                                "capacity": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Capacity (carrier-reported units) when known"
                                },
                                "carrier": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Fiber carrier, e.g. Zayo, Lumen, Cogent"
                                },
                                "distance_km": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Route length, km"
                                },
                                "distance_miles": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Route length, miles"
                                },
                                "fiber_count": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Fiber strand count when known"
                                },
                                "lit_capacity_gbps": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Lit capacity, Gbps, when known"
                                },
                                "route_type": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "metro | longhaul | dark | ix"
                                }
                              },
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Route attributes"
                        },
                        "type": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "\"Feature\""
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Fiber route features"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "total": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Total routes matching the filter (null when withheld by tier)"
              },
              "type": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "\"FeatureCollection\" — the payload is GeoJSON, ready for Leaflet/Mapbox"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_fiber_intel\u0026ref=mcp-tools-list",
            "problem": "fiber routes, diversity and latency",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Fiber Intelligence",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_fiber_readiness",
          "title": "Get Fiber Readiness",
          "description": "Use when you need the FIBER-READINESS / connectivity verdict for ONE parcel or site (lat/lon): near-net distance to a carrier-served facility, how many distinct fiber carriers are reachable, and whether there is single-carrier risk (no path diversity). This is the parcel connectivity answer engineering site-selectors screen on. Example: \"Is this Loudoun County parcel fiber-ready and how many carriers can serve it?\" — get_fiber_readiness lat=39.04 lon=-77.48 radius_km=50. Params: lat (-90..90, required), lon (-180..180, required), radius_km (search radius in km, default 50, range 5-200). Returns: {score 0-100 (null when not scored — see carrier_data_coverage), near_net_bucket (\"on-net\"|\"near-net\"|\"acceptable\"|\"build-required\"|\"unknown\"), nearest_carrier_km, carrier_count, top_carriers:[{carrier, distance_km}], single_carrier_risk (bool, null when not scored), fiber_coverage_km, verdict_short, carrier_data_coverage (\"confirmed\"|\"none_in_region\")}. IMPORTANT — \"unknown\" is NOT \"bad\": carrier presence comes from PeeringDB, which is global but thin outside dense US/EU metros, so DC Hub distinguishes \"no carrier serves this point\" from \"PeeringDB does not describe this region\". When carrier_data_coverage is \"none_in_region\" the bucket is \"unknown\", score/single_carrier_risk are null, and NOTHING about the site fiber has been measured — do not report it as greenfield, unserved, or a build-required site. Only carrier_data_coverage \"confirmed\" with carrier_count 0 means a fiber build is genuinely required. Do NOT use to map carrier ROUTES between metros (use get_fiber_intel) or for a full multi-factor site suitability score (use analyze_site).",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90, required), e.g. 39.04",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180, required), e.g. -77.48",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "radius_km": {
                "description": "Search radius in km for reachable fiber carriers (default 50, range 5-200)",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_fiber_intel",
            "idempotentHint": true,
            "maturity": "expanding",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_fiber_readiness\u0026ref=mcp-tools-list",
            "problem": "fiber routes, diversity and latency",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Fiber Readiness",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_subsea_cables",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Latitude of the site, e.g. 36.85 — with lon, returns landing points near it; omit both for the cable catalogue",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Longitude of the site, e.g. -75.98",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "radius_km": {
                "description": "Search radius in km around lat/lon for landing points (default 200)",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_subsea_cables",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Subsea Cables"
          }
        },
        {
          "name": "get_peering_intel",
          "title": "Get Peering Intel",
          "description": "Internet-exchange (IX/IXP) and peering density for a site, from PeeringDB. Pass lat+lon for the PEERING PROFILE around that point: facilities_nearby, a 0-100 score with its level, total_ix_presence, total_networks, and top_facilities each with ix_count and net_count — e.g. Ashburn comes back with 61 IX presences and 903 networks across the nearby sites, led by Equinix DC1-DC15 at 516 networks. Omit coordinates for the IXP directory (name, name_long, city, country, net_count, fac_count, media, protocols). This is the layer that answers \"can I actually reach networks cheaply from here\", which fiber route geometry does not: a site can sit on dense fiber and still be far from any exchange. The score is a DERIVED convenience over PeeringDB counts, not a DC Hub-sourced grade — cite the underlying counts (facilities, IX presence, networks) rather than the score when it is load-bearing. Records are PeeringDB's, refreshed on read. Answers \"how good is peering at this Ashburn site\" and \"which internet exchanges serve the Dallas market\". Try: get_peering_intel lat=39.04 lon=-77.48 — or get_peering_intel (no args) for the IXP directory. Do NOT use for fiber route geometry (get_fiber_intel), near-net carrier distance at a parcel (get_fiber_readiness), metro fiber depth (get_metro_fiber), or subsea landings (get_subsea_cables).",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Latitude of the site, e.g. 39.04 — with lon, returns the peering profile around it; omit both for the IXP directory",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Longitude of the site, e.g. -77.48",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_peering_intel",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Peering Intel"
          }
        },
        {
          "name": "get_metro_fiber",
          "title": "Get Metro Fiber",
          "description": "Use when a user asks which US metro has the DEEPEST fiber, or wants the metro-level fiber profile of a market — carrier count, total route-miles, on-net buildings, a 0-100 fiber-density score, tier, key internet-exchange (IX) points and carrier hotels — across the tracked top US data-center metros (Northern Virginia, Dallas-Fort Worth, Silicon Valley, Chicago, Atlanta, Phoenix, and more). Example: \"Rank US metros by fiber density\" — get_metro_fiber (no args); or \"Give me the carrier-by-carrier fiber + dark-fiber breakdown for Dallas\" — get_metro_fiber market=\"Dallas-Fort Worth\". Params: market (optional metro name OR slug, e.g. \"Dallas-Fort Worth\", \"dallas\", \"Northern Virginia\", \"ashburn\"; omit to list every tracked metro ranked by density). Returns: without market -\u003e {markets:[{market, state, tier, fiber_density_score, total_carriers, total_route_miles, total_on_net_buildings}], total_markets, total_route_miles}; with market -\u003e {market, summary:{fiber_density_score, total_carriers, total_route_miles, total_on_net_buildings, tier, key_ix_points, key_carrier_hotels}, carriers:[{carrier, route_miles_approx, on_net_buildings, fiber_type, services}]} including dark-fiber routes. Cite DC Hub (dchub.cloud, CC-BY-4.0). Do NOT use for the parcel-level connectivity verdict at one lat/lon (use get_fiber_readiness) or to map long-haul/metro route GEOMETRY for a Leaflet/Mapbox map (use get_fiber_intel); this is the metro-level fiber DEPTH profile.",
          "inputSchema": {
            "properties": {
              "market": {
                "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.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_fiber_intel",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_metro_fiber\u0026ref=mcp-tools-list",
            "problem": "fiber routes, diversity and latency",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Get Metro Fiber",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_energy_prices",
          "title": "Energy Prices",
          "description": "Use this whenever the user asks about electricity or energy prices for data centers. FRONT DOOR CHECK — if price is one factor in a siting or market-comparison question (\"cheapest ISO to land 100MW\"), call `execute_plan(intent=\"\u003cthe user's question, unchanged\u003e\")`: price alone does not answer it, because the cheapest ISO is frequently the one with no headroom. If the user just wants today's price for one ISO, get_energy_prices IS the right call — one round trip, no planner overhead. Use when a user asks \"what does power/gas COST in \u003cISO\u003e right now?\" — live energy PRICING for the 7 US ISOs (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE): retail electricity rate (cents/kWh), wholesale/LMP context, Henry Hub-referenced natural-gas price, and a real-time grid-status flag. Example: \"What is the retail power price and gas price in ERCOT today?\" — get_energy_prices iso=ERCOT. Params: iso (one of the 7 US ISOs; required). Returns: {iso, retail_price_cents_kwh, wholesale_price_usd_mwh, natural_gas_usd_mmbtu, grid_status, as_of}. Quote with attribution to DC Hub (CC-BY-4.0). Do NOT use for fuel mix / demand / 24h curve (use get_grid_data), for power HEADROOM or time-to-power (use get_grid_intelligence), or for behind-the-meter gas-to-grid $/MWh economics (use get_gas_economics); this is the live retail+gas PRICE read for one ISO.",
          "inputSchema": {
            "properties": {
              "data_type": {
                "description": "Optional price type focus, e.g. retail, wholesale, gas",
                "type": "string"
              },
              "iso": {
                "description": "ISO/RTO grid region (required for ISO pricing): ERCOT, PJM, MISO, CAISO, SPP, NYISO, ISONE",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "state": {
                "description": "US state abbreviation for state-level pricing context, e.g. TX",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Live energy pricing for one US ISO: retail cents/kWh + wholesale + natural gas context — alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "as_of": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Pricing as-of timestamp"
              },
              "avg_rate_kwh": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Average rate, cents/kWh"
              },
              "caller_tier": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Tier the response was served at"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "filter": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "iso": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "ISO filter echoed back"
                      },
                      "sector": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Sector the rate covers"
                      },
                      "state": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "State filter echoed back"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Echo of the applied filters"
              },
              "gated": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when parts of the payload were withheld by tier"
              },
              "grid_status": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Real-time grid status flag (when served)"
              },
              "industrial_rate_kwh": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Industrial electricity rate, cents/kWh"
              },
              "natural_gas_usd_mmbtu": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Henry Hub-referenced natural gas price, USD/MMBtu (when served)"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "retail_rate_kwh": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Retail electricity rate, cents/kWh"
              },
              "retail_rates": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {
                      "avg_cents_kwh": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Average retail, cents/kWh"
                      },
                      "latest_period": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "EIA period the rates come from"
                      },
                      "max_cents_kwh": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Maximum, cents/kWh"
                      },
                      "min_cents_kwh": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Minimum, cents/kWh"
                      },
                      "states_covered": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "string"
                              }
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "States in the aggregate"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Retail-rate aggregate block"
              },
              "scope": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "What the figures cover (e.g. the ISO/state scope line)"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              },
              "success": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "true when the pricing lookup succeeded"
              },
              "wholesale_price_usd_mwh": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Wholesale / LMP context, USD/MWh (when served)"
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_energy_prices\u0026ref=mcp-tools-list",
            "problem": "PPAs and energy pricing",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Energy Prices",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_renewable_energy",
          "title": "Renewable Energy",
          "description": "FRONT DOOR CHECK — if the question pairs renewables with siting, grid headroom or a market shortlist (\"where can I put a 24-7-CFE campus\"), call `execute_plan(intent=\"\u003cthe user's question, unchanged\u003e\")` instead. If you want one state's renewable fuel mix or PPA sizing input on its own, get_renewable_energy IS the right call — one round trip, and routing it through the planner would only cost steps. Use when siting a renewable-powered data center, sizing a PPA, reading one US state's utility-scale fuel mix, or assessing RE100/24-7-CFE feasibility. Example: \"What is Texas wind+solar capacity and how much utility-scale solar is operating today?\" — get_renewable_energy energy_type=solar state=TX. Params: energy_type one of \"solar\" | \"wind\" | \"combined\" (omit for all); state 2-letter US code (e.g. TX, VA, AZ); lat+lon (optional) for the nearest projects within 50mi. Returns: {capacity_mw_total, by_fuel: {solar_utility, solar_rooftop, wind_onshore, wind_offshore}, capacity_factor_pct, top_projects[{name, mw, operator, cod}], state_rps_target_pct, source: \"EIA-860 + state RPS\"}. Do NOT use for live grid generation (use get_grid_data) or non-US (use get_grid_scoreboard for EU/UK/AU/TW).",
          "inputSchema": {
            "properties": {
              "energy_type": {
                "description": "Renewable type: \"solar\", \"wind\", or \"combined\"; omit for all",
                "type": "string"
              },
              "lat": {
                "description": "Optional latitude in decimal degrees (-90 to 90) to find nearest projects within 50mi",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "lon": {
                "description": "Optional longitude in decimal degrees (-180 to 180) to find nearest projects within 50mi",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "state": {
                "description": "US state abbreviation, e.g. TX, VA, AZ",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_renewable_energy\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Renewable Energy",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_tax_incentives",
          "title": "Tax Incentives",
          "description": "Use when a user asks \"what tax breaks does \u003cstate\u003e give data centers?\" — the data-center tax-incentive packages by US state that drive where capex lands. Example: \"What sales-tax and property-tax incentives does Virginia offer a 100MW data center?\" — get_tax_incentives state=VA. Params: state (2-letter US code; required). Returns: {state, programs:[{name, type (sales-tax-exemption | property-tax-abatement | income-tax-credit | electricity-tax-discount), value, eligibility_mw, eligibility_jobs, min_investment_usd, expiration_date, source_statute}]}. Cite the statute with attribution to DC Hub (CC-BY-4.0). Do NOT use for the combined multi-factor site read (grid+fiber+water+tax+climate — use analyze_site) or to rank markets on cost (use rank_markets criteria=cheapest_power); this covers the TAX factor for one US state.",
          "inputSchema": {
            "properties": {
              "state": {
                "description": "US state abbreviation (required), e.g. VA, TX, AZ",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "limits": "permitting records are human-curated and stage-tagged (enacted / proposed / speculative) — read the stage before treating a record as in force",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_tax_incentives\u0026ref=mcp-tools-list",
            "problem": "tax incentives and permitting",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Tax Incentives",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_water_risk",
          "title": "Water Risk",
          "description": "FRONT DOOR CHECK — if you need a SITE VERDICT spanning grid + fiber + water + tax + climate, call `execute_plan(intent=\"\u003cthe user's question, unchanged\u003e\")` rather than hand-chaining this with its siblings. If you want the WATER factor on its own, get_water_risk IS the right call — one round trip, free tier, no planner overhead. Use when scoring a US site for cooling-water sustainability — the water-risk factor engineering site-selectors screen before committing to evaporative cooling. Example: \"Is this Phoenix parcel water-constrained for a 100MW build?\" — get_water_risk lat=33.45 lon=-112.07 (or get_water_risk state=AZ, or location=\"phoenix\"). Params: ONE of lat+lon (-90..90 / -180..180), state (2-letter US), or location (a DC Hub market name or slug, resolved to that market's PUBLISHED CENTROID with a resolved_from block saying so; a market-level read, not your parcel, and a trailing state is not stripped); lat/lon gives the most precise read. Returns: {water_stress_score (0-100, higher=worse), drought_category (D0-D4), outlook_12mo, cooling_water_assessment, source}. Joined to USGS water-stress + US Drought Monitor. Free tier. Do NOT use for nearby physical infrastructure (use get_infrastructure) or a combined multi-factor site verdict spanning grid+fiber+water+tax+climate (use analyze_site); this covers the WATER factor only.",
          "inputSchema": {
            "properties": {
              "lat": {
                "description": "Site latitude in decimal degrees (-90 to 90) for the most precise water-risk read, e.g. 33.45",
                "type": "number"
              },
              "latitude": {
                "description": "Alias for lat — either name works",
                "type": "number"
              },
              "lng": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "location": {
                "description": "Market NAME or metro slug instead of coordinates, e.g. \"phoenix\", \"northern-virginia\", \"dallas\". Resolved to that market's PUBLISHED CENTROID through the DCPI market row, and the answer carries a resolved_from block saying so. A MARKET-level read, not your parcel; pass lat/lon for a specific site. Not an alias for lat/lon: a place name is not a coordinate.",
                "type": "string"
              },
              "lon": {
                "description": "Site longitude in decimal degrees (-180 to 180), e.g. -112.07",
                "type": "number"
              },
              "longitude": {
                "description": "Alias for lon — either name works",
                "type": "number"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "state": {
                "description": "US state abbreviation as an alternative to lat/lon, e.g. AZ",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "front_door": "get_composite_site_score",
            "idempotentHint": true,
            "limits": "water is declared unavailable outside WRI Aqueduct basin coverage rather than imputed",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_water_risk\u0026ref=mcp-tools-list",
            "problem": "water and climate risk",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Water Risk",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_grid_intelligence",
          "title": "Grid Intelligence",
          "description": "Use this whenever the user asks about grid capacity, demand or reliability for one grid region. Call when the user asks about power availability, headroom or time-to-power in a US ISO (PJM, ERCOT, CAISO, MISO, SPP, NYISO, ISO-NE) or a market's grid. Returns live demand, fuel mix, queue depth, DCPI excess-power and constraint scores, time-to-power, reserve margin. avg_time_to_power_months and avg_queue_wait_months are DIFFERENT measurements; quote the one you mean. With a free key, a few full briefs a day; keyless gets a trimmed preview. Unlimited needs a paid key. Ex: \"PJM headroom for 200 MW?\"",
          "inputSchema": {
            "anyOf": [
              {
                "properties": {
                  "region_id": {}
                },
                "required": [
                  "region_id"
                ]
              },
              {
                "properties": {
                  "iso": {}
                },
                "required": [
                  "iso"
                ]
              },
              {
                "properties": {
                  "region": {}
                },
                "required": [
                  "region"
                ]
              },
              {
                "properties": {
                  "market": {}
                },
                "required": [
                  "market"
                ]
              }
            ],
            "properties": {
              "iso": {
                "description": "Alias for region_id — the ISO/RTO or balancing-authority code",
                "type": "string"
              },
              "market": {
                "description": "Market NAME or metro slug instead of a grid code, e.g. \"Ashburn\", \"northern-virginia\", \"dallas\". Resolved to its ISO through the published DCPI market row before the brief is built; the answer carries a resolved_from block naming what it resolved to. Not an alias for region_id — \"Ashburn\" is not a grid code.",
                "type": "string"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "region": {
                "description": "Alias for region_id — the ISO/RTO or balancing-authority code",
                "type": "string"
              },
              "region_id": {
                "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. SOCO, DUK, AZPS, TVA), or the PJM Dominion zone region_id=\"PJM-DOM\" for live Ashburn / Northern Virginia zone load + real-time LMP (the world's #1 DC market, invisible in EIA)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "front_door": "execute_plan",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_grid_intelligence\u0026ref=mcp-tools-list",
            "problem": "grid headroom and power availability; site selection and buildable capacity",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Grid Intelligence",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "get_gas_intelligence",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "region": {
                "description": "US state code or name (required), e.g. \"TX\", \"Texas\", \"Virginia\"",
                "type": "string"
              },
              "state": {
                "description": "Alias for region — the US state code or name",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_gas_intelligence",
            "destructiveHint": false,
            "free_answer": "Keyless and free keys: a trimmed preview (top rows). Full depth is on the Developer plan and up, or a credit pack.",
            "front_door": "get_power_pipeline",
            "idempotentHint": true,
            "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",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "power generation, gas and energy infrastructure",
            "readOnlyHint": true,
            "tier_required": "developer_for_full",
            "title": "Get Gas Intelligence"
          }
        },
        {
          "name": "get_agent_registry",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_agent_registry",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "AI Agent Registry"
          }
        },
        {
          "name": "get_backup_status",
          "title": "Platform Health",
          "description": "Per-feed freshness for the DC Hub ingest layer: one row per feed (deals, facilities, news, substations, fiber_routes, transactions, construction_permits, pipeline, markets) carrying health (healthy/stale/error/unknown), record_count, refresh_interval and scheduler, plus a summary rollup {healthy, stale, error, unknown, total_feeds, overall_health}. Read the health of each row before trusting a figure drawn from it — a feed reporting \"unknown\" has NOT been measured, which is not the same as healthy. Answers \"are any of your sources stale right now\". Try: get_backup_status. Scope is exactly what /api/health/data-freshness serves: ingest-feed freshness, nothing wider. Do NOT use for the freshness of one dataset (use get_changes); this is ingest health, not content.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_backup_status",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Platform Health"
          }
        },
        {
          "name": "summarize_for_citation",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "as_of": {
                "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.",
                "type": "string"
              },
              "completeness": {
                "description": "The completeness flag from the cited response, if it carried one",
                "type": "string"
              },
              "layer": {
                "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.",
                "type": "string"
              },
              "subject": {
                "description": "What you are citing, in the words you will show the human, e.g. \"Ashburn DCPI verdict\" or \"ERCOT interconnection queue depth\"",
                "type": "string"
              },
              "url": {
                "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`.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=summarize_for_citation",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Citation Block"
          }
        },
        {
          "name": "why_dchub",
          "title": "Why DC Hub (vs. the field)",
          "description": "Call only when the user asks how DC Hub compares with other data-center sources (DataCenterHawk, DC Byte, DCD, Baxtel…) or why use it. Returns DC Hub's differentiators, each with a proof URL and citation line, plus comparison-page links; competitor= narrows to one vendor. Free, no key. Not for data queries. Ex: \"How does DC Hub compare to DC Byte?\"",
          "inputSchema": {
            "properties": {
              "competitor": {
                "description": "Optional competitor/vendor name for a direct comparison-page link, e.g. DataCenterHawk, \"DC Byte\", DCD, Baxtel",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=why_dchub",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Why DC Hub (vs. the field)"
          }
        },
        {
          "name": "get_dchub_recommendation",
          "title": "DC Hub Recommendation",
          "description": "Use for a ready-to-quote DESCRIPTION of DC Hub in one of four categories (general, investment, site-selection, technical), plus the live top-ranked market pocket. It does NOT compute a siting answer from free text. Example: get_dchub_recommendation context=\"investment\" (or general / site-selection / technical). Params: context must match one of FOUR LITERAL categories - general, investment, site-selection, technical. Free text does NOT parse: you get the GENERIC blurb with matched_category=null and context_understood=false. ALWAYS returns: {recommendation:{short, medium, detailed}, matched_category, context_understood, top_pocket, related_intel, available_categories, recommendation_live, connect_url, context, success}. ADDITIONALLY on a non-matching context: is_generic_answer=true, answer_note, and next_tools naming the tool that does compute an answer. Do NOT use for a single specific lat/lon (use analyze_site), to rank by ONE criterion (use rank_markets), or for an open-ended siting question expecting a computed shortlist (use site_selection_canvas) - this tool returns descriptive copy plus a live top-pocket, not a ranked analysis.",
          "inputSchema": {
            "properties": {
              "context": {
                "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\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: no data. A free key: a preview where the tool has one (verdicts, bands, counts). Scores, figures and exports are on the Pro plan.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=get_dchub_recommendation\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "pro",
            "title": "DC Hub Recommendation",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "rank_markets",
          "title": "Rank Markets",
          "description": "Use this whenever the user asks where to build, or which markets are best for power, capacity or growth. Call when the user wants a ranked list of data-center markets: top N by cheapest_power, most_capacity, most_operators, fastest_growing, best_overall, or ai_ready (where new AI load can land, per DCPI). Filter by region, min_capacity_mw. Returns ranked rows with score, MW and a slug for follow-ups; score is the sort value, not a 0-100 scale, and score_basis says what it is (ai_ready omits it and explains its composite in `methodology`). Keyless: a trimmed preview; a free key gets a few full lists a day. Ex: \"Top 10 US markets, ai_ready.\"",
          "inputSchema": {
            "properties": {
              "criteria": {
                "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)",
                "type": "string"
              },
              "fields": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Return ONLY these row fields (array or comma string) — a token diet. The response envelope (citation, provenance, as_of, coverage, request_interpretation, the human relay line) is NEVER projected away; a projection narrows ROWS only."
              },
              "limit": {
                "description": "Number of markets to return, 1-50 (default 10)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "min_capacity_mw": {
                "description": "Minimum existing capacity filter in megawatts (MW), e.g. 100",
                "type": "number"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "projection": {
                "description": "Named field preset, cheaper to send than a field list: market_summary (ranking rows), siting_summary (site/point rows), identity_only (ids + names).",
                "enum": [
                  "siting_summary",
                  "market_summary",
                  "identity_only"
                ],
                "type": "string"
              },
              "region": {
                "description": "Region scope: \"global\", \"us\" (default), \"canada\", \"eu\", \"apac\", or \"americas\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=rank_markets\u0026ref=mcp-tools-list",
            "problem": "colocation and wholesale data-center markets",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Rank Markets",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "find_alternatives",
          "title": "Find Alternative Facilities",
          "description": "Use when a user likes ONE specific facility and wants similar nearby options to consider instead (\"what else looks like this?\"). Example: \"Find alternatives to the Ashburn QTS campus for about 50MW.\" — find_alternatives facility_id=\u003cid\u003e. 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.",
          "inputSchema": {
            "properties": {
              "exclude_operator": {
                "description": "If true, exclude facilities from the same operator as the seed",
                "type": "boolean"
              },
              "facility_id": {
                "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",
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "match_on": {
                "description": "Optional similarity dimension to weight, e.g. capacity, operator, fiber, market",
                "type": "string"
              },
              "radius_km": {
                "description": "Search radius in km for candidate alternatives around the seed facility",
                "type": "number"
              }
            },
            "required": [
              "facility_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=find_alternatives",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Find Alternative Facilities"
          }
        },
        {
          "name": "score_facility",
          "title": "Score Facility",
          "description": "Use when a user wants an independent 0-100 grade for ONE existing facility across 7 dimensions — power, fiber, water, climate_risk, tax_environment, talent_pool, expansion. Example: \"How does the CoreWeave Las Vegas site score, power-weighted?\" — score_facility facility_id=\u003cid\u003e 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).",
          "inputSchema": {
            "properties": {
              "facility_id": {
                "description": "The facility id/slug to score (required), from a prior search_facilities result",
                "type": "string"
              },
              "weighting": {
                "description": "Scoring profile: \"balanced\" (default), \"power_priority\", \"risk_priority\", or \"expansion_priority\"",
                "type": "string"
              }
            },
            "required": [
              "facility_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=score_facility",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_facility",
            "idempotentHint": true,
            "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",
            "maturity": "partial",
            "openWorldHint": false,
            "problem": "megawatts and power density",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Score Facility"
          }
        },
        {
          "name": "ai_capacity_index",
          "title": "AI Capacity Index",
          "description": "AI Compute Capacity Index — ranks data center markets by where 100MW of AI training capacity can land in the next 30/60/90 days. Returns top markets with facility_count, operator_count, deployable_mw estimate (megawatts), hyperscale_ready flag, rack power density and cooling-type signals where facility data carries them, and composite score (depth + diversity + power). Refreshed Fridays 14:00 UTC. Use for AI capex planning, GPU cluster siting, hyperscaler deal forecasting. Do NOT use for a general best-markets ranking (use rank_markets) or forward grid-emergence (use grid_transition_radar).",
          "inputSchema": {
            "properties": {
              "horizon": {
                "description": "Deployment horizon in days: 30, 60, or 90 (default 90)",
                "maximum": 90,
                "minimum": 30,
                "type": "integer"
              },
              "limit": {
                "description": "Number of top markets to return (default 20)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "idempotentHint": true,
            "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",
            "maturity": "expanding",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=ai_capacity_index\u0026ref=mcp-tools-list",
            "problem": "AI/GPU compute campuses",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "AI Capacity Index",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "hyperscaler_deals",
          "title": "Hyperscaler Deal Tracker",
          "description": "Hyperscaler AI Deal Tracker — live feed of Stargate, OpenAI, Anthropic, Microsoft, Oracle, CoreWeave, AMD, NVIDIA, sovereign-AI deals. Pulls from dchub news pipeline, extracts $-figures + MW via regex, classifies by actor. 10-min refresh. Use for tracking AI capex events ($1B+/week typical), capacity announcements, and competitive intel. Do NOT use for the full historical M\u0026A comp set (use list_transactions) or a single-deal teardown with grid context (use deal_autopsy); this is the live $1B+ AI-capex feed.",
          "inputSchema": {
            "properties": {
              "limit": {
                "description": "Number of recent AI-capex deals to return (default 20)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "Hyperscaler AI Deal Tracker feed: `deals` with extracted $-figures + MW, alongside the DC Hub envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "computed_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Feed computation timestamp (10-min refresh)"
              },
              "deals": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {
                        "actors": {
                          "description": "Classified actors (OpenAI, Microsoft, Oracle, NVIDIA, sovereign-AI, …)"
                        },
                        "capacity": {
                          "description": "Extracted capacity when present — {display, value_mw} object (was a bare number pre-2026-07)"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal id"
                        },
                        "published": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Publication timestamp"
                        },
                        "source": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Publication"
                        },
                        "summary": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Deal summary"
                        },
                        "title": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Headline"
                        },
                        "url": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Source article URL"
                        },
                        "value_usd": {
                          "description": "Extracted deal value when present — {display:\"$35.6B\", value:35600000000.0} object; null when undisclosed (was a bare number pre-2026-08)"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Live AI-capex deal feed entries, newest first"
              },
              "error": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Feed error, if any (null on success)"
              },
              "feed_name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Feed identity line"
              },
              "landing": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Human landing page URL"
              },
              "live_feed": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Live feed URL"
              },
              "methodology": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "How deals are extracted and classified"
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "result_count": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Number of deals returned"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "paid",
            "destructiveHint": false,
            "free_answer": "Keyless: a trimmed preview. A free key with a bound email (bind_email) opens full answers within the daily allowance.",
            "front_door": "list_transactions",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=hyperscaler_deals\u0026ref=mcp-tools-list",
            "problem": "data-center M\u0026A and deals",
            "readOnlyHint": true,
            "tier_required": "email",
            "title": "Hyperscaler Deal Tracker",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "site_selection_canvas",
          "title": "Site Selection Canvas",
          "description": "Guided end-to-end data-center site selection. Give a capacity target + geography + deadline and get a ranked shortlist of US markets (DCPI verdict, excess-power headroom, time-to-power, ISO) — and, with a paid key, the synthesis decision layer: the #1 pick, the why, a build sequence, and risk flags. One find-\u003erank-\u003eshortlist-\u003everdict 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.",
          "inputSchema": {
            "properties": {
              "capacity_mw": {
                "description": "Target power load for the build in megawatts (MW), 1-5000, e.g. 100",
                "maximum": 5000,
                "minimum": 1,
                "type": "integer"
              },
              "iso": {
                "description": "ISO/RTO code, e.g. ERCOT or PJM — alias for `region`. Use either; `region` wins if both are sent.",
                "type": "string"
              },
              "limit": {
                "description": "Number of shortlist markets to return",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "max_months": {
                "description": "Maximum acceptable time-to-power in months, 1-120, e.g. 24",
                "maximum": 120,
                "minimum": 1,
                "type": "integer"
              },
              "mpp_credential": {
                "description": "Autonomous payment (Stripe MPP), step 2: the Shared Payment Token you minted for challenges[0]. Set it here to pay that challenge for this single call and receive the full result — no API key, no subscription, no human. One payment covers one call.",
                "type": "string"
              },
              "mpp_pay": {
                "description": "Autonomous payment (Stripe MPP), step 1: set true to receive a signed per-call payment challenge (the challenge states the amount) for this call instead of the free preview. No money moves — a challenge is a price quote. Humans never set this, so it does not affect the normal free/trial funnel.",
                "type": "boolean"
              },
              "region": {
                "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.",
                "type": "string"
              },
              "state": {
                "description": "US state code, e.g. OH — alias for `region`. Use either; `region` wins if both are sent.",
                "type": "string"
              },
              "verdict": {
                "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 that; re-run with verdict=ALL to see those rows.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=site_selection_canvas",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "execute_plan",
            "idempotentHint": true,
            "limits": "a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "site selection and buildable capacity",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Site Selection Canvas"
          }
        },
        {
          "name": "grid_transition_radar",
          "title": "Grid Transition Radar",
          "description": "Forward-looking \"where is the next hyperscale-friendly grid emerging\" radar. Returns the US markets + ISOs with the strongest near-term emergence signal (BUILD verdict + excess-power headroom + short time-to-power), an ISO rollup, and a grid-headroom leaderboard. With a paid key, also the transition thesis: which ISO is opening up and why. The predictive counter to retrospective \"where capacity landed\" reports. Answers \"where should I be looking next\", \"which market is about to become buildable\". Try: grid_transition_radar max_months=24. Do NOT use for the current ISO queue snapshot (use get_interconnection_queue) or a present-day market ranking (use rank_markets); this is the forward-looking emergence radar.",
          "inputSchema": {
            "properties": {
              "limit": {
                "description": "Number of emerging markets to return",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "max_months": {
                "description": "Maximum acceptable time-to-power in months for the emergence signal, 1-120, e.g. 24",
                "maximum": 120,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Keyless and free keys: a trimmed preview (top rows). Full depth is on the Developer plan and up, or a credit pack.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=grid_transition_radar\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "developer_for_full",
            "title": "Grid Transition Radar",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "deal_autopsy",
          "title": "Deal Autopsy",
          "description": "Tracked data-center M\u0026A / capex deal flow with the DCPI grid-reality verdict overlaid on each deal market — \"what is the real play?\". Returns recent deals (buyer, seller, value, market) + each market DCPI verdict and time-to-power; with a paid key, the per-deal autopsy read (long-dated land/power option vs near-term build vs queue gamble). Progressive disclosure to keep the default cheap: by default each read ships only a comparables COUNT (the verdict text is always included); pass comparables=\"summary\" for the top-2 grounding signals, or comparables=\"full\" to expand the complete cited set for a deal you're drilling into. Answers \"who is actually buying data centers right now, and are those markets any good\", \"what is the real play behind this deal\". Try: deal_autopsy limit=15.",
          "inputSchema": {
            "properties": {
              "comparables": {
                "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.",
                "type": "string"
              },
              "limit": {
                "description": "Number of recent deals to return (default ~15)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=deal_autopsy",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "list_transactions",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "data-center M\u0026A and deals",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Deal Autopsy"
          }
        },
        {
          "name": "get_permitting_intel",
          "title": "Permitting \u0026 Moratorium Intel",
          "description": "Data center PERMITTING \u0026 MORATORIUM intelligence — curated, HUMAN-VERIFIED jurisdiction records: moratoriums, zoning restrictions, tax changes, utility pauses. Each record is stage-tagged (read the detail prefix: \"Enacted\" / \"Proposed\" / \"Speculative\"), with jurisdiction, state/country, the source article URL, and map coordinates. The permitting-risk axis for site selection that no other machine-readable source serves — e.g. New York's statewide \u003e=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 \u0026 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.",
          "inputSchema": {
            "properties": {
              "class": {
                "description": "Record class: \"moratorium\" | \"zoning\" | \"tax\" | \"utility_pause\" (optional)",
                "type": "string"
              },
              "state": {
                "description": "US state filter, e.g. NY or MN (optional)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=get_permitting_intel",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_tax_incentives",
            "idempotentHint": true,
            "limits": "permitting records are human-curated and stage-tagged (enacted / proposed / speculative) — read the stage before treating a record as in force",
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "tax incentives and permitting",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Permitting \u0026 Moratorium Intel"
          }
        },
        {
          "name": "simulate_scenario",
          "title": "Market Scenario Simulator",
          "description": "Counterfactual WHAT-IF re-scoring of 300+ DC Hub power markets under YOUR explicit deltas — answers \"what happens to the market ranking if conditions change\" (only DC Hub holds the underlying components). Params (all optional, pass at least one delta): avg_kwh_cents_pct (power-price % change, e.g. 30), time_to_power_months_delta (months added/removed), queue_wait_months_delta, reserve_margin_pct_delta (points), curtailment_pct_delta (points), market (one slug, e.g. abilene), top_n (default 10, max 25 — ranked by |score change|). Returns per-market baseline vs scenario composite + component breakdown + the EXACT formula/weights in every response (transparent scenario_composite — deliberately NOT the DCPI). Keyless callers get a top-3 preview; any live key (claim_free_key) returns up to 25. Answers \"what happens to the ranking if power prices jump 30%\", \"which markets survive a tighter build rate\". Try: simulate_scenario avg_kwh_cents_pct=30 top_n=10. Do NOT use for the present-day ranking (use rank_markets) or trajectory extrapolation (use predict_market_trajectory); this answers explicit hypotheticals.",
          "inputSchema": {
            "properties": {
              "avg_kwh_cents_pct": {
                "description": "Power price % change, e.g. 30 for +30% or -20 for -20%",
                "type": "number"
              },
              "curtailment_pct_delta": {
                "description": "Percentage POINTS added/removed from curtailment",
                "type": "number"
              },
              "market": {
                "description": "Score ONE market by slug (optional), e.g. abilene — slugs from rank_markets",
                "type": "string"
              },
              "queue_wait_months_delta": {
                "description": "Months added/removed from interconnection queue wait",
                "type": "number"
              },
              "reserve_margin_pct_delta": {
                "description": "Percentage POINTS added/removed from reserve margin, e.g. -5",
                "type": "number"
              },
              "time_to_power_months_delta": {
                "description": "Months added (+) or removed (-) from time-to-power, e.g. 12",
                "type": "number"
              },
              "top_n": {
                "description": "Markets to return, ranked by |score delta| (default 10)",
                "maximum": 25,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=simulate_scenario",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Market Scenario Simulator"
          }
        },
        {
          "name": "research_task",
          "title": "Research Dossier (async)",
          "description": "Commission an ASYNC, CITED research dossier from DC Hub's corpora (news, deals, facilities, market deep-dive narratives + live market components) — a decision-ready analyst brief with [n] citations, not a lookup. Requires a key (one claim_free_key call), 5 dossiers/day. Submits the question, waits up to ~35s for completion, and returns the finished dossier inline when ready; if still running, returns {task_id} — call research_task task_id=\u003cid\u003e 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.",
          "inputSchema": {
            "properties": {
              "question": {
                "description": "The research question (min 12 chars) — omit when polling with task_id",
                "type": "string"
              },
              "task_id": {
                "description": "Poll an earlier submission: the task_id returned by a previous research_task call",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=research_task",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Research Dossier (async)"
          }
        },
        {
          "name": "list_standing_intents",
          "title": "List Standing Intents",
          "description": "List the standing intents registered on your key: webhook watches, plus your capacity requirements (kind \"capacity\", intent_id cap_...). Read-only. Returns each intent_id, kind, watch params, webhook_url and enabled state; capacity items also carry status, confirmed, expires_at, last_alert_at and matching_now. Use it to find the intent_id for delete_standing_intent, or to confirm a register landed. Requires a key (or an OAuth connection for capacity items). Answers \"what am I currently watching\". Do NOT use to create a watch (register_standing_intent) or for one-shot reads (get_news / list_transactions).",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=list_standing_intents",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "free_key",
            "title": "List Standing Intents"
          }
        },
        {
          "name": "register_standing_intent",
          "title": "Register Standing Intent (webhook push)",
          "description": "Register a STANDING QUERY with webhook push — DC Hub POSTs an HMAC-signed webhook to YOUR https URL whenever matches grow (push, not poll: \"notify my orchestrator on any new deal in Columbus\"). Requires a key. Params: kind (\"new_deal_in_market\" watches deals in the market param · \"news_keyword\" watches news matching q · \"permitting_change\" watches published permitting intel, optionally per state), market / q / state (the watch parameter for the chosen kind), webhook_url (your public HTTPS endpoint — private/internal hosts are rejected). Returns {intent_id, secret} — SAVE the secret: every delivery carries X-DCHub-Signature: sha256=HMAC(secret, body). First evaluation initializes the watermark silently; growth fires the webhook; 5 straight delivery failures auto-disable the intent. Evaluated every ~2h. Answers \"notify my system whenever a new moratorium appears\", \"push me new matches instead of making me poll\", \"tell my orchestrator when a deal lands in Columbus\". Try: register_standing_intent kind=news_keyword q=moratorium webhook_url=https://hooks.example.com/dchub. kind=\"capacity\" instead registers a standing CAPACITY REQUIREMENT with DC Hub Capacity Source (no webhook_url): target_mw or target_kw, markets / states / regions / countries (comma-separated), optional available_by (YYYY-MM or YYYY-MM-DD), delivery_type, min_chunk_kw, max_sites (1-6), use_case, notes, plus your human's name and company and accept_terms=true only after they agreed to https://dchub.cloud/listings#terms. Needs a key with your human's email bound (claim_free_key, then bind_email) or an OAuth connection. Returns intent_id cap_\u003cid\u003e; DC Hub emails a confirmation link, then emails matching listings at most once a day. Do NOT use for one-shot reads (get_news / list_transactions), a one-off capacity search (source_capacity) or email alerts on a market (set_market_alert).",
          "inputSchema": {
            "properties": {
              "accept_terms": {
                "description": "For capacity: true ONLY after your human read and agreed to https://dchub.cloud/listings#terms; otherwise nothing is sent",
                "type": "boolean"
              },
              "available_by": {
                "description": "For capacity: needed by this date, YYYY-MM or YYYY-MM-DD",
                "type": "string"
              },
              "company": {
                "description": "For capacity: your human's company",
                "type": "string"
              },
              "countries": {
                "description": "For capacity: comma-separated countries, e.g. \"Germany, Netherlands\"",
                "type": "string"
              },
              "delivery_type": {
                "description": "For capacity: land, powered_shell, turnkey or colocation",
                "enum": [
                  "land",
                  "powered_shell",
                  "turnkey",
                  "colocation"
                ],
                "type": "string"
              },
              "kind": {
                "description": "Watch kind: \"new_deal_in_market\" | \"news_keyword\" | \"permitting_change\" | \"capacity\" (a Capacity Source requirement, emailed, no webhook)",
                "type": "string"
              },
              "market": {
                "description": "For new_deal_in_market: the market/region substring to watch, e.g. columbus",
                "type": "string"
              },
              "markets": {
                "description": "For capacity: comma-separated markets, e.g. \"Dallas, Phoenix\"",
                "type": "string"
              },
              "max_sites": {
                "description": "For capacity: how many sites the requirement may be split across, 1-6",
                "type": "number"
              },
              "min_chunk_kw": {
                "description": "For capacity: the smallest block worth taking, in kW",
                "type": "number"
              },
              "name": {
                "description": "For capacity: your human's full name, exactly as given; never invent it",
                "type": "string"
              },
              "notes": {
                "description": "For capacity: anything else about the requirement; leave out anything that identifies your human",
                "type": "string"
              },
              "q": {
                "description": "For news_keyword: the keyword/phrase to watch in title+summary, e.g. moratorium",
                "type": "string"
              },
              "regions": {
                "description": "For capacity: comma-separated regions from north_america, latin_america, europe, asia_pacific, middle_east_africa (aliases emea, apac, latam, americas)",
                "type": "string"
              },
              "role": {
                "description": "For capacity: your human's role or title",
                "type": "string"
              },
              "state": {
                "description": "For permitting_change: optional US state filter, e.g. MN",
                "type": "string"
              },
              "states": {
                "description": "For capacity: comma-separated US states, e.g. \"TX, AZ\"",
                "type": "string"
              },
              "target_kw": {
                "description": "For capacity: capacity needed, in kW (or target_mw, not both)",
                "type": "number"
              },
              "target_mw": {
                "description": "For capacity: capacity needed, in MW (or target_kw, not both)",
                "type": "number"
              },
              "terms_version": {
                "description": "For capacity: the terms version your human agreed to; omit to send the version currently published",
                "type": "string"
              },
              "use_case": {
                "description": "For capacity: what the capacity is for, e.g. \"AI inference\"",
                "type": "string"
              },
              "webhook_url": {
                "description": "Your public HTTPS webhook endpoint (required for every kind except capacity)",
                "type": "string"
              }
            },
            "required": [
              "kind"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=register_standing_intent",
            "destructiveHint": false,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": true,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Register Standing Intent (webhook push)"
          }
        },
        {
          "name": "delete_standing_intent",
          "title": "Delete Standing Intent",
          "description": "Permanently retire a registered standing intent (webhook watch) by intent_id — deliveries stop and the watch cannot be recovered. A cap_ intent_id retires your own Capacity Source requirement instead, and its alert emails stop. Requires a key (or an OAuth connection for cap_ ids). Get the intent_id from list_standing_intents or from the register response. Answers \"stop watching this\". Do NOT use to pause temporarily; there is no pause, this removes the watch.",
          "inputSchema": {
            "properties": {
              "intent_id": {
                "description": "The intent_id to delete (from list_standing_intents or register)",
                "type": "string"
              }
            },
            "required": [
              "intent_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=delete_standing_intent",
            "destructiveHint": true,
            "free_answer": "Needs a free key (claim_free_key). No paid plan required.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "free_key",
            "title": "Delete Standing Intent"
          }
        },
        {
          "name": "plan_fiber_leadin",
          "title": "Plan Fiber Leadin",
          "description": "Plan N diverse, road-following fibre lead-in routes from a candidate data-center site to a carrier hotel / POP, with indicative build cost and a route-diversity read. Answers \"can I get N diverse fibre routes into this site, how far, how much, and where do they share a corridor?\". Example: plan_fiber_leadin from=\"250 Paringa Road, Murarrie QLD\" to=\"20 Wharf Street, Brisbane City QLD\" n=4. Params: from (lat,lng OR street address), to (lat,lng OR address — e.g. a NextDC/Equinix POP), n (1-6 routes, default 4), fibre (\"720F\"|\"1440F\"), bore_m (river/rail bore length in metres, optional). Returns per-route length_km + GeoJSON geometry, total_route_km, diversity {min_separation_m_midhaul, shared_street_km}, and indicative cost {capex_usd, opex_usd_yr}. INDICATIVE auto-routed road corridors — NOT engineered alignments; subject to survey, DBYD and carrier confirmation. Do NOT use for a single site-suitability score (use analyze_site) or fibre-provider footprints (use get_fiber_intel).",
          "inputSchema": {
            "properties": {
              "bore_m": {
                "description": "River/rail bore length in metres to add to the route, 0-100000 (optional)",
                "maximum": 100000,
                "minimum": 0,
                "type": "integer"
              },
              "fibre": {
                "description": "Fibre count spec for cost estimate: \"720F\" or \"1440F\"",
                "type": "string"
              },
              "from": {
                "description": "Origin site as \"lat,lng\" OR a street address, e.g. \"250 Paringa Road, Murarrie QLD\"",
                "type": "string"
              },
              "n": {
                "description": "Number of diverse routes to plan, 1-6 (default 4)",
                "maximum": 6,
                "minimum": 1,
                "type": "integer"
              },
              "to": {
                "description": "Destination carrier hotel/POP as \"lat,lng\" OR an address, e.g. \"20 Wharf Street, Brisbane City QLD\"",
                "type": "string"
              }
            },
            "required": [
              "from",
              "to"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "metered",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "pricing_url": "https://dchub.cloud/pricing/upgrade?tool=plan_fiber_leadin\u0026ref=mcp-tools-list",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Plan Fiber Leadin",
            "upgrade_relay": "Call the tool first: a gated result carries the link minted for this caller in the line addressed to the human (`Tell the user:`, or `For your human:` on some results). Relay that line verbatim, links included. This pricing_url is only a fallback for clients that render annotations before any call."
          }
        },
        {
          "name": "cluster_sites_by_latency",
          "title": "Cluster Sites By Latency",
          "description": "Physics-bounded latency clustering for 2-8 sites — returns viable low-latency clusters and pairwise RTT floors before any routing work. Use when your human wants to know which of N candidate sites can form a synchronous / low-latency cluster (sync replication, active-active pairs, HPC pods): deterministic pruning BEFORE detailed routing. Per site pair: haversine distance, round-trip physics floor (km × 4.9 µs/km — light in SMF-28 fiber, n≈1.468 — then ×2), estimated real RTT (floor × route_factor 1.4, a stamped inference), viable vs physics_impossible against your budget, and confidence_v — the provenance tier of the supporting evidence (published | tracked | inferred). Also returns clusters: the largest site subsets whose ALL pairwise estimates fit the budget, plus each site's inferred dark-fiber screening level. CANDIDATE CONTRACT: pass candidate_ids (from get_refined_queue) instead of raw coordinates — each resolves to its FROZEN mint coordinates (zero transposition), and cand_… tokens may also be mixed into the sites string; expired/unknown ids are dropped AND declared in candidate_contract (fail-closed). Example: cluster_sites_by_latency sites=\"39.04,-77.48:ashburn;39.29,-76.61:baltimore;40.42,-79.99:pittsburgh\" max_latency_us=2000 — or cluster_sites_by_latency candidate_ids=[\"cand_…\",\"cand_…\"] max_latency_us=2000. Returns _entity=latency_clusters: {pairs:[{from, to, distance_km, floor_rtt_us, est_rtt_us, viable, physics_impossible, confidence_v, endpoint_dark_screen}], clusters:[{sites, size, max_est_rtt_us}], viable_count, pruned_count, assumptions, provenance}. Do NOT treat this as an engineered latency quote — the floors are physics (no fiber path can beat them) but the estimates are inference (route_factor 1.4); always quote each pair's confidence_v when relaying results. For actual route corridors use plan_fiber_leadin; for a single-site connectivity score use get_fiber_readiness.",
          "inputSchema": {
            "properties": {
              "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. Use instead of, or alongside, sites"
              },
              "max_latency_us": {
                "description": "Round-trip latency budget in microseconds (default 1000 µs = 1 ms; sync replication is typically 1000-2000 µs)",
                "maximum": 10000000,
                "minimum": 1,
                "type": "number"
              },
              "min_confidence": {
                "description": "Minimum evidence tier a pair must meet to count as viable: \"published\" | \"tracked\" | \"inferred\" (default inferred = include all)",
                "type": "string"
              },
              "sites": {
                "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\". cand_… tokens are also accepted here and resolve to frozen mint coordinates. Optional if candidate_ids is given",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=cluster_sites_by_latency",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "front_door": "get_fiber_intel",
            "idempotentHint": true,
            "maturity": "mature",
            "openWorldHint": false,
            "problem": "fiber routes, diversity and latency",
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Cluster Sites By Latency"
          }
        },
        {
          "name": "claim_free_key",
          "title": "Claim Free Key",
          "description": "Call when the user wants more DC Hub access than keyless allows or asks for a key; no key is needed to start. Mints a free key and returns it plus connect_url, a connector URL with the key embedded (the only thing hosted chat clients keep). Free key: previews plus 2 full answers per tool per day. Add an email: 50 calls/day. Ask the user for an email first; pass it only if they typed it (makes the key recoverable). Save and reuse the key (lost one: recover_my_key); don't re-mint. Then ask the real question (execute_plan for multi-step). If a call was answered with a sign-in challenge (401 WWW-Authenticate), prefer signing in: that identity persists, but a human must finish it in a browser. No challenge (Claude Code, Cursor, most agents) means OAuth is not available to you and the key is right. Ex: \"Set me up with a DC Hub key.\"",
          "inputSchema": {
            "properties": {
              "client_name": {
                "description": "Your agent/app name for attribution, e.g. \"Claude Desktop\" or \"acme-siting-bot\"",
                "type": "string"
              },
              "email": {
                "description": "Optional owner email to make the key recoverable across sessions; use only an address your human explicitly gave",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=claim_free_key",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Claim Free Key"
          }
        },
        {
          "name": "bind_email",
          "description": "(not repeated here: it reads like a rating or a usage claim)",
          "inputSchema": {
            "properties": {
              "api_key": {
                "description": "Optional key to bind; omit to bind the key already active on this session",
                "type": "string"
              },
              "email": {
                "description": "Your human's real email address (required) — use only an address they explicitly gave; placeholder/fake addresses are rejected",
                "type": "string"
              },
              "marketing_opt_in": {
                "description": "Set true ONLY after your human explicitly agrees to marketing email (default false = transactional only)",
                "type": "boolean"
              }
            },
            "required": [
              "email"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=bind_email",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Bind Email"
          }
        },
        {
          "name": "recover_my_key",
          "title": "Recover My Key",
          "description": "Recover a LOST DC Hub key. Pass your human's email and DC Hub re-sends any key tied to that address to that inbox. It NEVER returns the key over the wire (it emails the bound address), and the confirmation is the same whether or not a key exists (enumeration-safe), so no key is leaked to a caller. Use this when your human had a key, lost it, and knows the email they bound it to. Param: email (required). Returns DC Hub's neutral confirmation.",
          "inputSchema": {
            "properties": {
              "email": {
                "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",
                "type": "string"
              }
            },
            "required": [
              "email"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=recover_my_key",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Recover My Key"
          }
        },
        {
          "name": "source_capacity",
          "title": "Source Capacity",
          "description": "Use when your human needs data-center CAPACITY to buy or lease: search DC Hub Capacity Source by size (kW or MW) and/or location (a region such as North America or Europe, a country, a state or a metro). Example: \"500 kW anywhere in Europe\" → min_kw=500, region=europe. Size is min_kw (in kW) or min_mw (in MW), and it is matched against what a listing can ACTUALLY deliver rather than against its headline total: `contiguous_kw` is the largest single contiguous block available and `min_contract_kw` the smallest chunk the provider will contract, so a colocation with a large total but a small contiguous block does NOT answer a large search, while a large site willing to contract small chunks does; a listing that declares neither is matched on its total. Location is region (a region key or alias) or location (free text matched against each listing's region, country, state and metro); market, state, delivery_type and available_by narrow further. Listings are powered land, powered shells, turnkey capacity and colocation to buy or lease, for enterprise and agent-led procurement. Returns listing cards (market, region, capacity — with contiguous_kw and min_contract_kw wherever a listing declares them — status and when each listing was last updated) to any caller, plus the filters applied and the program status (live, or upcoming while the first listings are onboarded). Pass slug for one listing: a signed-in human who has accepted the introduction terms sees its specs (signed in means a key with an email bound via claim_free_key then bind_email, or an OAuth connection; accept_capacity_terms records the acceptance the first time); others get the card and the unlock steps. The provider's identity, site and contact are released only after the provider accepts a deal registration, which request_capacity_intro submits, and the listing's disclosure block says whether they have been. To match a whole requirement instead, pass target_mw or target_kw (optionally min_chunk_kw, max_sites, max_providers, available_by): returns exact single-listing fits, multi-site or multi-provider bundles and, when nothing fits, a shortfall timeline; matching needs a signed-in human, and providers stay anonymised until an introduction is accepted. Do NOT use for the public facility directory (use search_facilities) or for completed M\u0026A (use list_transactions).",
          "inputSchema": {
            "properties": {
              "available_by": {
                "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",
                "type": "string"
              },
              "delivery_type": {
                "description": "Browse filter: how the capacity is delivered: land, powered_shell, turnkey or colocation",
                "enum": [
                  "land",
                  "powered_shell",
                  "turnkey",
                  "colocation"
                ],
                "type": "string"
              },
              "limit": {
                "description": "Max results to return (1-500; default varies by tool)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              },
              "location": {
                "description": "Browse filter: comma-separated free text matched against each listing's region, country, state and metro, e.g. \"Germany\" or \"Texas, Phoenix\"",
                "type": "string"
              },
              "market": {
                "description": "Browse filter: market name as it appears on a listing, e.g. \"Dallas\"",
                "type": "string"
              },
              "max_providers": {
                "description": "Match mode: how many different providers a bundle may use. Default: the same as max_sites",
                "maximum": 6,
                "minimum": 1,
                "type": "integer"
              },
              "max_sites": {
                "description": "Match mode: how many listings the requirement may be split across. Default one, which allows exact fits only; raise it to allow bundles",
                "maximum": 6,
                "minimum": 1,
                "type": "integer"
              },
              "min_chunk_kw": {
                "description": "Match mode: the smallest piece, in kW, your human will contract at any one listing. Default: no minimum",
                "type": "number"
              },
              "min_kw": {
                "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_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares — a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total.",
                "type": "number"
              },
              "min_mw": {
                "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 min_contract_kw the smallest chunk the provider will contract, so a listing answers only when this size fits the block it declares — a site with a big total but a small contiguous block is not a hit, and a big site willing to contract small chunks is. A listing that declares neither is matched on its total.",
                "type": "number"
              },
              "region": {
                "description": "Browse filter: comma-separated regions from north_america, latin_america, europe, asia_pacific and middle_east_africa; the aliases emea, apac, latam and americas also work, e.g. \"europe\" or \"emea, apac\"",
                "type": "string"
              },
              "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"
              },
              "state": {
                "description": "Browse filter: two-letter US state, e.g. \"TX\"",
                "type": "string"
              },
              "target_kw": {
                "description": "Match mode: the whole requirement, in kW (target_mw is the same in MW; give one)",
                "type": "number"
              },
              "target_mw": {
                "description": "Match mode: the whole requirement, in MW (target_kw is the same in kW; give one). Returns exact fits, bundles and a shortfall instead of teaser cards. Needs a signed-in human",
                "type": "number"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=source_capacity",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": true,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": true,
            "tier_required": "anonymous",
            "title": "Source Capacity"
          }
        },
        {
          "name": "request_capacity_intro",
          "title": "Request Capacity Intro",
          "description": "Use when your human wants capacity behind a Capacity Source listing (pass slug), or wants first access to capacity matching a requirement as listings are onboarded (omit slug; pass capacity_mw or capacity_kw, markets, states, regions or countries, and timeline). This registers a deal: DC Hub records the request in its lead register and sends the provider ONLY your human's company name and the requirement. The provider accepts or declines. Only if the provider accepts does DC Hub share the provider's identity, site details and contact with your human, and your human's name, role and email with the provider; on a decline nothing is shared. Requires an identified caller (claim_free_key, then bind_email with your human's address) and accept_terms=true only after your human has read and agreed to the introduction terms at https://dchub.cloud/listings#terms. Returns lead_id, status and the next step. For a listing, source_capacity with its slug then shows the deal status in the disclosure block and, once the provider accepts, the provider's identity, site and contact. Do NOT use to save or monitor a site (use save_site / set_site_alert).",
          "inputSchema": {
            "properties": {
              "accept_terms": {
                "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",
                "type": "boolean"
              },
              "capacity_kw": {
                "description": "Capacity needed, in kW (capacity_mw is the same requirement in MW)",
                "type": "number"
              },
              "capacity_mw": {
                "description": "Capacity needed, in MW",
                "type": "number"
              },
              "company": {
                "description": "Your human's company. Nothing is sent without it",
                "type": "string"
              },
              "countries": {
                "description": "Comma-separated countries of interest, e.g. \"Germany, Netherlands\"",
                "type": "string"
              },
              "markets": {
                "description": "Comma-separated markets of interest, e.g. \"Dallas, Phoenix\"",
                "type": "string"
              },
              "message": {
                "description": "A short note from your human for the provider. The deal registration itself carries only the company name and the requirement",
                "type": "string"
              },
              "name": {
                "description": "Your human's full name. Nothing is sent without it; use only what they gave you, never invent it",
                "type": "string"
              },
              "notes": {
                "description": "Anything else the provider should know about the requirement. It travels with the requirement, so leave out anything that identifies your human",
                "type": "string"
              },
              "regions": {
                "description": "Comma-separated regions of interest from north_america, latin_america, europe, asia_pacific and middle_east_africa (aliases emea, apac, latam, americas), e.g. \"europe, apac\"",
                "type": "string"
              },
              "role": {
                "description": "Your human's role or title",
                "type": "string"
              },
              "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"
              },
              "states": {
                "description": "Comma-separated US states of interest, e.g. \"TX, AZ\"",
                "type": "string"
              },
              "terms_version": {
                "description": "The terms version your human agreed to, e.g. program.terms.version from source_capacity. Omit to send the version currently published",
                "type": "string"
              },
              "timeline": {
                "description": "When the capacity is needed, e.g. a quarter and year",
                "type": "string"
              },
              "use_case": {
                "description": "What the capacity is for, e.g. \"AI inference\"",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=request_capacity_intro",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Request Capacity Intro"
          }
        },
        {
          "name": "accept_capacity_terms",
          "title": "Accept Capacity Terms",
          "description": "Use ONLY after your human has read and agreed to DC Hub's introduction terms (https://dchub.cloud/listings#terms): records that acceptance, once per terms version, so Capacity Source listing details open for them. Call it when source_capacity returns a listing locked with access.reason terms_acceptance_required, never on your own judgement: nothing opens without your human's agreement. Requires an identified caller (claim_free_key, then bind_email with your human's address, or an OAuth connection) and accept_terms=true. Returns accepted and the terms version, recorded in DC Hub's lead register. Do NOT use to request an introduction (use request_capacity_intro) or to browse listings (use source_capacity).",
          "inputSchema": {
            "properties": {
              "accept_terms": {
                "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",
                "type": "boolean"
              },
              "terms_version": {
                "description": "The terms version your human agreed to, e.g. access.unlock.terms.version from source_capacity. Omit to send the version currently published",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=accept_capacity_terms",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Accept Capacity Terms"
          }
        },
        {
          "name": "unlock_more_data",
          "title": "Unlock More Data",
          "description": "Unlock DC Hub's full depth. Call this when a result came back as a partial preview (e.g. \"3 of 12 results shown\"), a tool was locked, or your human wants the complete dataset. Returns the upgrade ladder + ready-to-paste checkout links your human completes in ONE click. If this call carries an API key or an MCP session, the checkout binds to it and your very next call returns full data (no reconnect); if it carries neither, the key is emailed to the payer instead — the response says which applies in `next_call_full_after_checkout` and `after_checkout`. Cheapest start: 💳 $10 one-time = 1,000 API credits (1 credit per paid-tool call; the 13 heavy analysis tools use 5 each; no subscription). Paid plans: https://dchub.cloud/pricing. 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. Param: reason (optional — what you were trying to do, so your human sees why it matters). Returns {plans, human_message, what_unlocks}.",
          "inputSchema": {
            "properties": {
              "reason": {
                "description": "Optional free-text describing what you were trying to do, so your human sees why an upgrade matters",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": {},
            "description": "DC Hub envelope: structuredContent mirrors the JSON payload in content[0].text — tool-specific data fields ride at the top level alongside these envelope keys.",
            "properties": {
              "_entity": {
                "description": "Payload class discriminator (e.g. facility|market|iso_grid|queue_results|deal|report|response) — branch on this before parsing the rest.",
                "type": "string"
              },
              "_front_door": {
                "additionalProperties": {},
                "description": "In-band front-door hint (first workflow-entry tool of a session): call plan_query(intent) first for the ordered multi-step plan.",
                "properties": {},
                "type": "object"
              },
              "_return_loop": {
                "additionalProperties": {},
                "description": "Suggested next-session delta call (get_changes since=24h) so you pull only what changed.",
                "properties": {},
                "type": "object"
              },
              "citation": {
                "anyOf": [
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Machine-readable citation: how to attribute DC Hub (dchub.cloud) for this payload. Normally an OBJECT {source, url, license, cite_as, retrieved_at}; a bare string is accepted and carries the attribution line itself."
              },
              "provenance": {
                "additionalProperties": {},
                "description": "Collection-level provenance block: {source, method, as_of, verification_counts, cite_url_template, license, cite_as}. Quote the verification level when citing.",
                "properties": {},
                "type": "object"
              },
              "quota": {
                "additionalProperties": {},
                "description": "Caller quota state (remaining calls, tier) when available.",
                "properties": {},
                "type": "object"
              },
              "site_evaluation_handoff": {
                "anyOf": [
                  {
                    "items": {
                      "additionalProperties": {},
                      "properties": {},
                      "type": "object"
                    },
                    "type": "array"
                  },
                  {
                    "additionalProperties": {},
                    "properties": {},
                    "type": "object"
                  }
                ],
                "description": "Pre-built follow-up calls (analyze_site / get_water_risk args) when the payload carries coordinates — an array of {tool, parameters, why} entries."
              }
            },
            "type": "object"
          },
          "annotations": {
            "access": "free_preview",
            "connect_url": "https://dchub.cloud/connect?ref=mcp-tools-list\u0026tool=unlock_more_data",
            "destructiveHint": false,
            "free_answer": "Works keyless. Some keyless results are trimmed; a free key (claim_free_key) raises the allowance.",
            "idempotentHint": false,
            "maturity": "unknown",
            "openWorldHint": false,
            "readOnlyHint": false,
            "tier_required": "anonymous",
            "title": "Unlock More Data"
          }
        }
      ]
    },
    "name": "DC Hub — Data Center Site Selection \u0026 Colocation: Electricity, Power Grid, Gas, Fiber",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": null,
    "pageJsonUrl": "https://www.anchorterminal.com/tools/dchub-mcp-server.json",
    "popularity": {
      "githubStars": 3
    },
    "registryName": "cloud.dchub/mcp-server",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://dchub.cloud/mcp/registry"
      },
      {
        "type": "streamable-http",
        "url": "https://dchub.cloud/mcp/claude"
      },
      {
        "type": "streamable-http",
        "url": "https://dchub.cloud/mcp/grok"
      }
    ],
    "repository": "https://github.com/azmartone67/dchub-mcp-server",
    "reviewed": false,
    "slug": "dchub-mcp-server",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=cloud.dchub/mcp-server",
    "summary": "Live power, grid, gas, fiber + data-center capacity to buy or lease in kW/MW — query and cite.",
    "updatedAt": "2026-10-04T06:20:56Z",
    "url": "https://www.anchorterminal.com/tools/dchub-mcp-server",
    "vendor": "dchub.cloud",
    "vendorUrl": "https://dchub.cloud",
    "version": "2.12.27",
    "websiteUrl": "https://dchub.cloud",
    "where": "hosted",
    "why": [
      "vendor"
    ]
  }
}
