{"serverId":"mcp-registry/cloud.dchub/datacenter-power-grid-fiber","tools":[{"name":"analyze_parcel","fixed":{"name":"analyze_parcel","description":"Use this when the user has a land parcel for a data center site: structured read of its boundary — pass your own GeoJSON Polygon/MultiPolygon, OR just lat+lon and DC Hub finds the containing parcel in its HOSTED parcel-boundary layer (free county/state GIS polygons, covering a set of priority data-center counties in VA, IL, TX, OH, UT, OR, IA and WY; a point outside it returns parcel_not_covered with the analyze_site preview + the coverage list, never a guess). Returns _entity=parcel_analysis: g","inputSchema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude of a point ON the parcel — used with lon when geometry is omitted to look up the containing parcel from the hosted county/state GIS layer"},"lng":{"type":"number","description":"Alias for lon — either name works"},"lon":{"type":"number","description":"Longitude of a point ON the parcel (used with lat when geometry is omitted)"},"geometry":{"description":"GeoJSON Polygon or MultiPolygon parcel boundary, e.g. {\"type\":\"Polygon\",\"coordinates\":[[[lng,lat],[lng,lat],...]]} — a MultiPolygon carries discontinuous parcels as one envelope. Omit to look up the hosted parcel containing lat/lon instead","type":"string"},"latitude":{"type":"number","description":"Alias for lat — either name works"},"longitude":{"type":"number","description":"Alias for lon — either name works"},"capacity_mw":{"type":"number","description":"Optional target load in MW to pass through into the site_evaluation_handoff"}}},"annotations":{"access":"free_preview","maturity":"unknown","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=analyze_parcel","readOnlyHint":true,"openWorldHint":false,"tier_required":"anonymous","idempotentHint":true,"destructiveHint":false},"title":"Analyze Parcel"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: geometry. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":424,"tokensAfter":428},{"name":"cluster_sites_by_latency","fixed":{"name":"cluster_sites_by_latency","description":"Use this when the user asks which data center sites can form a low-latency cluster (2-8 sites) — returns viable low-latency clusters and pairwise RTT floors before any routing work. Use when your human wants to know which of N candidate sites can form a synchronous / low-latency cluster (sync replication, active-active pairs, HPC pods): deterministic pruning BEFORE detailed routing. Per site pair: haversine distance, round-trip physics floor (km × 4.9 µs/km — light in SMF-28 fiber, n≈1.468 — the","inputSchema":{"type":"object","properties":{"sites":{"type":"string","description":"Semicolon-separated \"lat,lon\" pairs, 2-8 sites (same format as compare_sites locations); optional per-site labels via \"lat,lon:label\", e.g. \"39.04,-77.48:ashburn;39.29,-76.61:baltimore\"."},"candidate_ids":{"description":"Array (or comma-separated string) of candidate_id values from get_refined_queue — each resolves to its FROZEN mint coordinates (zero transcription drift); expired/unknown are dropped and declared in candidate_contract.","type":"string"},"max_latency_us":{"type":"number","maximum":10000000,"minimum":1,"description":"Round-trip latency budget in microseconds (default 1000 µs = 1 ms; sync replication is typically 1000-2000 µs)"},"min_confidence":{"type":"string","description":"Minimum evidence tier a pair must meet to count as viable: \"published\" | \"tracked\" | \"inferred\" (default inferred = include all)"}}},"annotations":{"access":"free","problem":"fiber routes, diversity and latency","maturity":"mature","front_door":"get_fiber_intel","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=cluster_sites_by_latency","readOnlyHint":true,"openWorldHint":false,"tier_required":"anonymous","idempotentHint":true,"destructiveHint":false},"title":"Cluster Sites By Latency"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: candidate_ids. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":408,"tokensAfter":412},{"name":"compare_sites","fixed":{"name":"compare_sites","description":"Use this when the user has 2-4 candidate data center sites and asks which is best. Pass locations as \"lat,lon;lat,lon\" and optional capacity_mw. Returns each site's analyze_site scores side by side plus a recommended winner and why. Keyless returns each site's verdict band and power band, with the other factors named; a free key adds names and counts without figures; scores and figures need a paid DC Hub plan, as does the pick. Ex: \"Phoenix vs Ashburn for 50 MW?\"","inputSchema":{"type":"object","properties":{"sites":{"description":"Alternative to locations: an array of {lat, lon} (or {lat, lng}) objects, 2-4 sites","type":"string"},"mpp_pay":{"type":"boolean","description":"Per-call payment quote (Stripe MPP): true returns a signed payment challenge instead of the free preview; no money moves. Set it only after your human has explicitly approved paying for this call."},"locations":{"type":"string","description":"Semicolon-separated list of 2-4 \"lat,lon\" pairs to compare, e.g. \"33.45,-112.07;39.04,-77.48\""},"capacity_mw":{"type":"number","description":"Target power load for the build in megawatts (MW), e.g. 50 (typical 50-500)"},"mpp_credential":{"type":"string","description":"Per-call payment (Stripe MPP): the Shared Payment Token for challenges[0]; pays that challenge for this one call. Send it only with your human's explicit approval of the charge."}}},"annotations":{"access":"paid","maturity":"unknown","pricing_url":"https://dchub.cloud/pricing/upgrade?tool=compare_sites&ref=mcp-tools-list","readOnlyHint":true,"openWorldHint":false,"tier_required":"pro","idempotentHint":true,"destructiveHint":false},"title":"Compare Sites"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: sites. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":392,"tokensAfter":396},{"name":"execute_plan","fixed":{"name":"execute_plan","description":"Use this when a data center question spans several topics: one-call planner over megawatts and power density, grid headroom and power availability, interconnection queues, substations and transmission, site selection and buildable capacity, colocation and wholesale data-center markets, AI/GPU compute campuses, fiber routes, diversity and latency, PPAs and energy pricing, tax incentives and permitting, water and climate risk, data-center M&A and deals, power generation, gas and energy infrastruct","inputSchema":{"type":"object","required":["intent"],"properties":{"iso":{"type":"string","description":"ISO/RTO code to pin geography, e.g. \"PJM\", \"ERCOT\"."},"lat":{"type":"number","description":"Latitude for a specific site."},"lon":{"type":"number","description":"Longitude for a specific site."},"state":{"type":"string","description":"US state code, e.g. \"VA\"."},"cohort":{"description":"Optional experiment tag for adoption/retention measurement, e.g. \"cohort.front_door\". Has NO effect on routing, planning, geography or results — it is recorded only.","type":"string"},"intent":{"type":"string","description":"The user's infrastructure question, passed through UNCHANGED. Examples: \"rank markets for a 200 MW AI campus\" · \"evaluate 100 MW power headroom for a GPU training cluster in PJM\" · \"compare Dallas vs Phoenix for a hyperscale campus\" ·…"},"market":{"type":"string","description":"Metro slug or name to pin the analysis to, e.g. \"ashburn\". Beats any market the planner would mint."},"context":{"description":"Optional structured hints AND step-arg overrides: {lat, lon, iso, market, capacity_mw, candidate_id, state, since} — user-supplied values beat minted ones. The typed top-level params below are merged into this and WIN on conflict.","type":"string"},"max_steps":{"description":"Max plan steps to execute, 1-8 (default 6)","type":"string"},"max_fanout":{"description":"Max per-finalist fan-out calls for one step, 1-3 (default 2)","type":"string"},"capacity_mw":{"type":"number","description":"Target capacity in MW, e.g. 100."}}},"annotations":{"access":"free","limits":"supply-side signals, not a load-interconnection promise — generation is not deliverable load · utility study timelines, large-load tariff processes and substation-grain delivery are declared out of coverage rather than estimated · a state-scoped ranking needs a state the planner can resolve; an unresolved geography answers nationally and says so","problem":"grid headroom and power availability; site selection and buildable capacity","maturity":"mature","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=execute_plan","readOnlyHint":true,"openWorldHint":true,"tier_required":"anonymous","idempotentHint":true,"destructiveHint":false},"title":"Execute Plan"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: cohort, context, max_steps, max_fanout. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":569,"tokensAfter":587},{"name":"plan_query","fixed":{"name":"plan_query","description":"Use this when you want to see the plan for a data center question without running it (execute_plan runs the same planner and returns the answers). Reach for plan_query only to review, log, diff or audit a plan before executing it yourself. Deterministic keyword routing over the tool registry — no LLM, no network, same intent always returns the same plan (free). Returns _entity=query_plan {best_tool, intent_confidence + workflow_confidence (dual 0-1: question-read vs executability), reason, plann","inputSchema":{"type":"object","required":["intent"],"properties":{"intent":{"type":"string","description":"Natural-language description of what you are trying to find out, e.g. \"rank markets for a 200MW AI campus\" or \"how much power is available in ERCOT\""},"context":{"description":"Optional structured hints: {lat, lon, iso, market, capacity_mw, candidate_id, state (2-letter), since} — sharpens args_hint values and routing (e.g. lat/lon boosts the site-analysis route)","type":"string"}}},"annotations":{"access":"free","maturity":"unknown","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=plan_query","readOnlyHint":true,"openWorldHint":false,"tier_required":"anonymous","idempotentHint":true,"destructiveHint":false},"title":"Plan Query"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: context. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":284,"tokensAfter":288},{"name":"rank_sites","fixed":{"name":"rank_sites","description":"Use this when you have enriched candidate data center sites to rank under constraints — the normalization contract that lets you compare sites across separate analyze_site calls WITHOUT dropping into code. Pass candidates you already enriched (each an object with lat/lng + metric fields like risk_resilience, water_stress, fiber_km — pull these from analyze_site + get_refined_queue and pass site_evaluation_handoff through untouched), hard constraints, and weighted objectives; get back _entity=ran","inputSchema":{"type":"object","properties":{"top_k":{"type":"integer","maximum":50,"minimum":1,"description":"How many top-ranked sites to return (1-50, default 3)"},"absolute":{"type":"boolean","description":"false (default) = min-max normalize within THIS batch (best-in-set, NOT stable across runs). true = score on a FIXED 0-100 scale for CROSS-RUN-STABLE, auditable scores — use ONLY when the objective fields are already 0-100 (analyze_site…"},"candidates":{"description":"Array of candidate objects. PREFERRED: {candidate_id: \"cand_…\", <your metric fields>} using ids from get_refined_queue — frozen coordinates/capacity/fiber_km load from the mint (zero transcription drift), your enrichments (e.g.","type":"string"},"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","type":"string"},"percentile":{"type":"boolean","description":"true = score each objective as its PERCENTILE against the viable-site POPULATION (\"better than X% of viable sites\") — the strongest cross-run + cross-region comparability."},"constraints":{"description":"Hard filters {field: {min?, max?}} — a candidate missing a constrained field is dropped (fail-closed). e.g. {\"risk_resilience\": {\"min\": 70}, \"estimated_ttp_months\": {\"max\": 34}}","type":"string"},"shortlist_name":{"type":"string","description":"Alternative to candidates: re-rank a SAVED shortlist (created via save_to_shortlist) in one shot — loads its sites (scoped to your API key) + reuses their saved objectives if you pass none, and re-scores against the current baseline"},"require_complete":{"type":"boolean","description":"true = DROP any candidate missing one or more of your (validated) objectives — dropped candidates are DECLARED in excluded_incomplete, never silent."}}},"annotations":{"access":"free_preview","maturity":"unknown","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=rank_sites","readOnlyHint":true,"openWorldHint":false,"tier_required":"anonymous","idempotentHint":true,"destructiveHint":false},"title":"Rank Sites"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: candidates, objectives, constraints. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":677,"tokensAfter":690},{"name":"save_to_shortlist","fixed":{"name":"save_to_shortlist","description":"Use this when the user wants to keep a data center site on a named shortlist that survives across conversations (Phase 5 statefulness). Snapshots the site's objectives + its current percentile objective_score, so you can re-score it later against the evolving national baseline. Use to build a durable siting shortlist across days/weeks; the list is scoped to your API key. Pair with get_shortlist to re-score + see drift. MINIMAL call: save_to_shortlist(shortlist_name=\"my-targets\", site={site_ref, ","inputSchema":{"type":"object","required":["shortlist_name","site"],"properties":{"site":{"description":"Site object. MINIMAL form is enough: {site_ref, lat, lng, capacity_mw}. Richer is better — add any analyze_site metric fields (risk_resilience, fiber_connectivity, water score…) and those become what gets re-scored later.","type":"string"},"notes":{"type":"string","description":"Optional free-text note, e.g. \"strong fiber, acceptable water\""},"objectives":{"description":"OPTIONAL {field: signedWeight} map (+maximize/-minimize) if this site was ranked under explicit objectives — stored so re-scoring reuses the same criteria. Omit it and DC Hub weights the site's own metric fields equally.","type":"string"},"shortlist_name":{"type":"string","description":"Name of the shortlist, e.g. \"Q3-2026-1GW-targets\" — created if new. REQUIRED."}}},"annotations":{"access":"free_preview","maturity":"unknown","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=save_to_shortlist","readOnlyHint":false,"openWorldHint":false,"tier_required":"free_key","idempotentHint":false,"destructiveHint":false},"title":"Save To Shortlist"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: site, objectives. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":380,"tokensAfter":389},{"name":"set_shortlist_alert","fixed":{"name":"set_shortlist_alert","description":"Use this when the user wants a drift alert on a saved site shortlist so you can stop polling and be notified when a site's national standing moves materially (Phase 5). Fires when any site in the shortlist has current percentile score < percentile_below OR score_delta_since_saved < delta_below (e.g. -8 = dropped 8 points vs when saved). Evaluated after each daily baseline refresh; delivers via webhook and/or email. This is the \"wake me when it matters\" loop for long-running siting campaigns. Sco","inputSchema":{"type":"object","required":["notify"],"properties":{"notify":{"description":"Delivery: {\"webhook\":\"https://...\"} and/or {\"email\":\"you@co.com\"} — at least one required","type":"string"},"delta_below":{"type":"number","description":"Fire if any site's score_delta_since_saved drops below this — pass a NEGATIVE number, e.g. -8 (dropped 8+ points since saved)"},"shortlist_name":{"type":"string","description":"The shortlist to monitor (created via save_to_shortlist)"},"percentile_below":{"type":"number","description":"Fire if any site's current percentile objective_score drops below this (e.g. 70)"}}},"annotations":{"access":"free_preview","maturity":"unknown","connect_url":"https://dchub.cloud/connect?ref=mcp-tools-list&tool=set_shortlist_alert","readOnlyHint":false,"openWorldHint":false,"tier_required":"free_key","idempotentHint":false,"destructiveHint":false},"title":"Set Shortlist Alert"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: notify. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":322,"tokensAfter":327}],"toolsChanged":8,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}