Koskamo

DC Hub MCP

An MCP server providing data center energy, electricity, and power grid intelligence. It offers tools to query the Data Center Power Index (DCPI), access facility maps, grid data, M&A deals, and capacity listings for site selection and infrastructure planning.

Endpoint and access

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

DC Hub MCP logo, by DC HubVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-09Operated by DC Hub
MCP endpoint (Streamable HTTP)
https://dchub.cloud/mcp/core
Vendor documentation

What its tools do

10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

10 of 10 have a description · 10 of 10 declare behavior hints · 10 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to dchub.cloud ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query Data Center Power Index (DCPI) scores and verdicts
  • Access global data center facility maps and grid data
  • Search for data center capacity to buy or lease
  • Retrieve M&A deal and investment tracking data

Source and maintenance

Vendor evidenceRegistry 2.12.46
Maintenance checked

Protocol and capabilities

Server
DC Hub Core 2.12.46
MCP protocol negotiated in check
2025-11-25
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

DC Hub provides current, sourced data for data-center siting and infrastructure: grid capacity and time to power for US grid operators, interconnection queues, energy prices, fiber and peering, natural-hazard, water and climate risk, tax incentives, a facility database, and a daily market power index (DCPI) with BUILD, CAUTION or AVOID verdicts. It is a good fit when a question is about where to build or lease data-center capacity, how much power is available or how long it takes to get, or the current state of a market, grid, facility or site; this data changes weekly, so each result is dated. For a question with several parts, call plan_and_answer. For a single question, use evaluate_site (one location), compare_sites, find_sites, market_snapshot, rank_markets, grid_power, fiber_connectivity or facility_lookup. Every response carries as_of, sources, access and an unavailable list. When quoting a figure, keep its as_of date, say when a value is modeled or estimated, treat null as unknown or withheld (never as zero), and describe a preview as partial. Use get_evidence to build a citation or to check how current a data feed is. Every tool is a read-only lookup.

Tools

10 advertised

plan_and_answer — Plan and answer a multi-part question
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when a data-center question needs several kinds of data, e.g. "where could 200 MW land in Texas with fiber and short time to power?" or "compare Phoenix and Columbus for an AI campus". Pass the question unchanged as intent (query/question aliases accepted); optional hints (market, state, iso, lat, lon, capacity_mw). If intent is omitted, a US markets overview intent is used. A deterministic keyword planner (no language model) picks the lookups, runs them in order and returns each step with its own as_of and sources. Set dry_run to true to see the plan without running it. For a single lookup, the matching tool answers directly (evaluate_site, market_snapshot, grid_power). Returns headline step counts, one section per step, and an unavailable list for steps that could not run.

plan_and_answer input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "iso": {
      "type": "string",
      "description": "Grid operator hint, for example ERCOT or PJM"
    },
    "lat": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees, for example 39.04"
    },
    "lon": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees, for example -77.48"
    },
    "query": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 3,
      "description": "Alias for intent"
    },
    "state": {
      "type": "string",
      "description": "Two-letter US state hint, for example TX"
    },
    "intent": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 3,
      "description": "The question in plain language, passed unchanged"
    },
    "market": {
      "type": "string",
      "description": "Market name or slug hint, for example phoenix"
    },
    "dry_run": {
      "type": "boolean",
      "description": "true returns the plan without running it; default false"
    },
    "question": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 3,
      "description": "Alias for intent"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target load in megawatts, for example 200"
    }
  }
}
plan_and_answer annotations
{
  "title": "Plan and answer a multi-part question",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_sites — Find candidate areas or markets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user has no site yet and asks where to look, e.g. "areas in Ohio on 345 kV with gas within 8 km" or "which Texas markets could take 200 MW within 24 months?". mode areas (default) needs a geography (state, or lat and lon with radius_km) and returns search areas anchored on real substations with measured distances, plus applied_filters and constraint_coverage showing which filters ran. mode markets returns a market shortlist filtered by capacity_mw, region, state, iso and max_months. Results are search areas or markets, not parcels, listings or land for sale. Score one with evaluate_site.

find_sites input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "iso": {
      "type": "string",
      "description": "Grid operator filter for markets mode, for example ERCOT"
    },
    "lat": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees, for example 39.04"
    },
    "lon": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees, for example -77.48"
    },
    "mode": {
      "enum": [
        "areas",
        "markets"
      ],
      "type": "string",
      "description": "areas (default) or markets"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum results, default set by the source"
    },
    "state": {
      "type": "string",
      "description": "Two-letter US state, for example OH"
    },
    "region": {
      "type": "string",
      "description": "Region filter for markets mode, for example TX or us"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius around lat/lon in km, for example 60"
    },
    "max_gas_km": {
      "type": "number",
      "description": "Maximum distance to a gas pipeline in km (areas mode)"
    },
    "max_months": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Maximum time to power in months (markets mode)"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target load in MW; filters markets mode, echoed only in areas mode"
    },
    "max_fiber_km": {
      "type": "number",
      "description": "Maximum distance to fiber in km (areas mode)"
    },
    "min_voltage_kv": {
      "type": "number",
      "description": "Minimum substation voltage in kV (areas mode), for example 345"
    }
  }
}
find_sites annotations
{
  "title": "Find candidate areas or markets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
evaluate_site — Evaluate one site
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user has one candidate location and asks whether it suits a data center, e.g. "is 39.04,-77.48 good for 100 MW?". Pass lat and lon, or location as "lat,lon" or a market name (a market is read at its published centroid and the response says so). Returns a BUILD, CAUTION or AVOID verdict, a 0-100 composite over validated factors only, the limiting factor, and a coverage map of which factors were measured; unmeasured factors are listed in unavailable and never estimated. include adds factor sections: water, hazard, climate, fiber, tax, raw. At some access levels only the verdict, coverage and limiting factor are returned and scores are null. For 2 to 4 locations use compare_sites; for a whole market use market_snapshot.

evaluate_site input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "lat": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees, for example 39.04"
    },
    "lon": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees, for example -77.48"
    },
    "state": {
      "type": "string",
      "description": "Two-letter US state, improves water and tax lookups, for example VA"
    },
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "water",
          "hazard",
          "climate",
          "fiber",
          "tax",
          "raw"
        ],
        "type": "string"
      },
      "maxItems": 6,
      "description": "Optional factor sections to add"
    },
    "location": {
      "type": "string",
      "description": "Alternative to lat/lon: \"lat,lon\" or a market name or slug, for example \"39.04,-77.48\" or \"phoenix\""
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target load in megawatts, echoed and passed to the raw section"
    }
  }
}
evaluate_site annotations
{
  "title": "Evaluate one site",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_sites — Compare 2 to 4 sites or markets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants 2 to 4 data center candidates side by side, coordinates or named markets, e.g. "39.04,-77.48 vs 33.45,-112.07 for 50 MW" or "Dallas vs Columbus". Pass locations as a list of "lat,lon" strings or market names. Coordinates return the same composite read for each site (verdict, coverage, limiting factor, and scores where available) and the winner with its rationale when the source provides one. Market names return each market scorecard (DCPI verdict and bands); no winner is computed for markets. capacity_mw is echoed and does not change scores. For one site use evaluate_site; to rank many markets use rank_markets.

compare_sites input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "locations"
  ],
  "properties": {
    "locations": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 120,
        "minLength": 1
      },
      "maxItems": 4,
      "minItems": 2,
      "description": "2 to 4 candidates, each \"lat,lon\" or a market name, for example [\"39.04,-77.48\", \"33.45,-112.07\"]"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Target load in megawatts, echoed per candidate"
    }
  }
}
compare_sites annotations
{
  "title": "Compare 2 to 4 sites or markets",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
market_snapshot — Snapshot of one market
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about one data-center market or metro, e.g. "how is Northern Virginia looking?" or "Phoenix power verdict". Pass market as a name or slug. detail scorecard (default) returns the DCPI verdict with excess-power and constraint scores and bands, time to power, and whether inputs are live or modeled (data_basis). detail brief adds a short market briefing (power, pipeline, operators, deals, news); detail full also adds market intelligence metrics. To rank several markets use rank_markets.

market_snapshot input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "market"
  ],
  "properties": {
    "detail": {
      "enum": [
        "scorecard",
        "brief",
        "full"
      ],
      "type": "string",
      "description": "scorecard (default), brief or full"
    },
    "market": {
      "type": "string",
      "maxLength": 120,
      "minLength": 2,
      "description": "Market name or slug, for example \"phoenix\" or \"northern-virginia\""
    }
  }
}
market_snapshot annotations
{
  "title": "Snapshot of one market",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
rank_markets — Rank markets by one criterion
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants data center markets ranked by one criterion, e.g. "10 US markets that suit a 200 MW AI campus" or "markets with low power prices and at least 100 MW installed". criteria selects the sort: ai_ready (buildability for new load, the default), ai_capacity (AI compute capacity index), or a sort by power price, installed capacity, operator count, growth or overall score (see the criteria values). Optional region, limit and min_capacity_mw. Returns rank, market, the sort value, signal_tier (how much rests on live versus modeled inputs) and per-row as_of where the source provides it. Pass a market slug to market_snapshot for detail.

rank_markets input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Number of markets, for example 10"
    },
    "region": {
      "type": "string",
      "description": "Region filter, for example us, TX or europe"
    },
    "criteria": {
      "enum": [
        "ai_ready",
        "ai_capacity",
        "cheapest_power",
        "most_capacity",
        "most_operators",
        "fastest_growing",
        "best_overall"
      ],
      "type": "string",
      "description": "Sort criterion; default ai_ready. The other values sort by power price, installed capacity, operator count, growth or overall score"
    },
    "min_capacity_mw": {
      "type": "number",
      "description": "Minimum installed capacity in MW"
    }
  }
}
rank_markets annotations
{
  "title": "Rank markets by one criterion",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
grid_power — Grid power availability and cost
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks about grid power availability or electricity cost, e.g. "how much headroom does PJM have?", "time to power for 200 MW in ERCOT", "what is in the interconnection queue?" or "when does new generation land in Ohio?". Pass iso (one, or a comma list such as "PJM,ERCOT" to compare), market (resolved to its grid operator) or state (year-by-year supply timeline). Returns demand, fuel mix, excess-power and constraint scores, time to power and queue depth, each with as_of and source. include adds telemetry, prices, queue or timeline sections. Fuel mix typically lags demand by about a day.

grid_power input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "iso": {
      "type": "string",
      "description": "Grid operator, or a comma list to compare, for example \"PJM\" or \"PJM,ERCOT,CAISO\""
    },
    "state": {
      "type": "string",
      "description": "Two-letter US state for the supply timeline, for example OH"
    },
    "market": {
      "type": "string",
      "description": "Market name, resolved to its grid operator, for example \"dallas\""
    },
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "telemetry",
          "prices",
          "queue",
          "timeline"
        ],
        "type": "string"
      },
      "maxItems": 4,
      "description": "Optional sections to add"
    },
    "capacity_mw": {
      "type": "number",
      "description": "Load in MW for the timeline section"
    }
  }
}
grid_power annotations
{
  "title": "Grid power availability and cost",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fiber_connectivity — Fiber and peering connectivity
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user asks how well a site or metro is connected by fiber, e.g. "is this parcel fiber-ready?", "how many carriers can serve it?" or "internet exchanges near Ashburn". Pass lat and lon for a point read (near-net distance bucket, nearest carrier distance, carrier data coverage) or market for the metro profile (carriers and dark-fiber availability zones). include peering adds nearby exchange and network density for a point. If carrier_data_coverage is none_in_region, nothing was measured there; that is not the same as no fiber.

fiber_connectivity input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "lat": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees, for example 39.04"
    },
    "lon": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees, for example -77.48"
    },
    "market": {
      "type": "string",
      "description": "Market name for the metro profile, for example \"Dallas-Fort Worth\""
    },
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "peering"
        ],
        "type": "string"
      },
      "maxItems": 1,
      "description": "Optional sections to add"
    },
    "radius_km": {
      "type": "number",
      "description": "Search radius for the point read in km, for example 50"
    }
  }
}
fiber_connectivity annotations
{
  "title": "Fiber and peering connectivity",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
facility_lookup — Find or profile data-center facilities
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to find or profile existing data-center facilities, e.g. "who operates this facility and how big is it?" or "data centers in Arizona over 50 MW". Pass id (or an exact name) for one record, or filters (query, country, state, city, operator, min_capacity_mw) for a list. Records carry name, operator, location, capacity where disclosed, status and verification details. Facility data combines open map data, peering records and operator disclosures; see license. Deals and construction pipeline are not covered by this profile.

facility_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "id": {
      "type": "string",
      "description": "Facility id or slug from a previous result"
    },
    "city": {
      "type": "string",
      "description": "City name"
    },
    "name": {
      "type": "string",
      "description": "Exact facility name, used when no id is known"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum records in a list, for example 10"
    },
    "query": {
      "type": "string",
      "description": "Free-text search, for example \"Ashburn\""
    },
    "state": {
      "type": "string",
      "description": "State or province code, for example AZ"
    },
    "country": {
      "type": "string",
      "description": "Country code, for example US"
    },
    "operator": {
      "type": "string",
      "description": "Operator name"
    },
    "min_capacity_mw": {
      "type": "number",
      "description": "Minimum capacity in MW"
    }
  }
}
facility_lookup annotations
{
  "title": "Find or profile data-center facilities",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_evidence — Citation and data freshness
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you quote a DC Hub figure, or the user asks where a number comes from or how current it is. Pass subject (what is being cited, e.g. "Phoenix DCPI verdict CAUTION"), and optionally layer, as_of and source_url from an earlier result. Returns a citation line, the license for that data layer, and current health and last-update time for each data feed. Pass since (ISO date) to also list records changed since then. It does not look up new figures.

get_evidence input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "as_of": {
      "type": "string",
      "description": "The as_of value from the result being cited"
    },
    "layer": {
      "type": "string",
      "description": "Data layer of the figure, for example dcpi, grid, fiber, facilities"
    },
    "since": {
      "type": "string",
      "description": "ISO date or time; lists changes after it, for example 2026-09-01"
    },
    "subject": {
      "type": "string",
      "description": "What is being cited, for example \"Phoenix DCPI verdict CAUTION\""
    },
    "source_url": {
      "type": "string",
      "description": "A source link from the result being cited, if any"
    }
  }
}
get_evidence annotations
{
  "title": "Citation and data freshness",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-09: 1 of 1 checks answered
  2. 2026-11-10: 2 of 2 checks answered

30-day availability

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

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

Maintenance history

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

  • · probe · passed · 497 ms · metadata changed · 10 tool(s)

Connect from your client

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

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

Claude Code

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

Codex

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

Cursor

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

Cline

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

VS Code

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

Gemini CLI

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

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://dchub.cloud/mcp/core

Windsurf

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

Let your agent find its tools

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

Do you run DC Hub MCP?

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

Claim this listing