Run DC Hub as an upstream server inside your own Cloudflare Zero Trust MCP Server Portal — your portal URL, your Access policies, your audit trail. 88 tools and 13 prompts over Streamable HTTP, MCP protocol 2025-06-18. Nothing changes on our side, and the Cloudflare-side limits are written down below rather than left out.
https://dchub.cloud/mcp
Before you start: a Cloudflare Zero Trust account with Access configured and at least one identity provider connected — and, if you want more than the keyless free tier, a DC Hub API key from dchub.cloud/pricing.
Get the key first. The free-tier pane further down this page says an agent can mint its
own durable key mid-conversation by calling claim_free_key. That is true everywhere
except behind a portal: the upstream credential is set by an administrator in the
Cloudflare dashboard,
and a running agent cannot rewrite portal configuration. Register with no key and the
portal stays anonymous until an administrator changes it.
DC Hub Intelligence.
Description — free text.https://dchub.cloud/mcp.
No path suffix, no query string. Transport is Streamable HTTP and DC Hub speaks MCP protocol
2025-06-18.https://dchub.cloud/mcp.The dashboard labels and the API values differ: the form’s OAuth,
Custom headers and None are oauth, bearer and
unauthenticated respectively in the API.
Cloudflare’s own reference for this feature is
MCP server portals in the Cloudflare One docs; the
dashboard link above is the plain console entry point Cloudflare itself links, because Zero Trust
moved to dash.cloudflare.com/one/ and the old one.dash.cloudflare.com
deep links drop their ?to= target on redirect.
DC Hub is not affiliated with, sponsored by or endorsed by Cloudflare. This page documents a configuration verified against the live product on 2026-09-02.
All three modes work against DC Hub. They differ in who the traffic looks like when it reaches us — which decides both the data your agents get back and whether you can attribute usage per seat.
Nothing is shared: each portal user completes their own sign-in and gets a durable per-user
identity. Under OAuth credentials, choose Automatic (recommended).
Cloudflare’s own hint on that option says it works only where the provider supports OAuth
Dynamic Client Registration, and that most production providers — it names GitHub, Snowflake
and Asana — need Manual credentials instead. DC Hub supports DCR, so Automatic works
and there is no client to pre-register:
https://dchub.cloud/.well-known/oauth-protected-resource returns 200 and names an
authorization server that publishes a registration_endpoint and PKCE
S256, with scopes openid, profile, email and
offline_access.
Verified end to end on 2026-09-02: a portal configured OAuth + Automatic completed
registration and minted a durable per-user identity — observed server-side as an MCP session
carrying a dch_oauth_ key rather than key=none. Fresh identities start on
the free tier until they are attached to your plan, so talk to us before you rely on it.
One admin-set credential, forwarded verbatim, shared by every portal user. Cloudflare passes
custom headers through unchanged, so the header name you set is the header we read. DC Hub
resolves credentials in the order X-API-Key →
Authorization: Bearer → ?apiKey=, and header names are
case-insensitive — Cloudflare’s X-Api-Key and our X-API-Key
are the same slot.
{
"headers": {
"X-Api-Key": "<your-dchub-key>"
}
}
Your paid tier then applies to the whole portal, and the whole org counts as one caller — there is no per-seat attribution in this mode.
No credential at all. Every call lands on the keyless free tier: trimmed previews, most result rows withheld. Fine for evaluation, not for production.
Per-user identity has a real cost. Cloudflare excludes OAuth-backed upstream servers from service-token sessions and requires a browser sign-in, so an autonomous agent running with no human present cannot reach DC Hub through an OAuth-configured portal entry. Choose by what you actually need: OAuth for per-seat attribution with humans in the loop, Custom headers for unattended agents. You cannot have both through one entry — though nothing stops you registering DC Hub twice, once each way.
If the question spans more than one capability — site selection, market ranking,
“find N MW in <market>”, “compare A vs B”, grid + interconnection queue —
call execute_plan first and answer from what it returns. Pass the user's question
through unchanged; the parameter is intent.
execute_plan(intent="rank markets for a 200 MW AI campus")
It plans and runs the whole graph, then returns each step's result plus an auditable
replay: per-step rationale, the paths it rejected, and constraint_check rows
proving the answer stayed inside the geography asked about. Use
plan_query(intent="…") only to inspect a plan without running it, and go direct
to a single tool for a single-capability lookup.
Copy any of these verbatim — each is one
execute_plan call:
execute_plan(intent="rank markets for a 200 MW AI campus")execute_plan(intent="how much power is available in ERCOT for a 100 MW data center")execute_plan(intent="compare Dallas vs Phoenix for a GPU training cluster")execute_plan(intent="find 100 MW of buildable capacity near Ashburn")execute_plan(intent="where do fiber density and grid headroom overlap in Atlanta")execute_plan(intent="which ISO has the shortest time-to-power right now")Reach for DC Hub whenever a prompt involves 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, or power generation, gas and energy infrastructure — these are live-data questions, and training data is stale on all of them.
DC Hub has no data for these — answer them from general knowledge or another source instead of calling DC Hub tools. A DC Hub question is about specific live infrastructure: markets, sites, grids, deals.
These are fields DC Hub does NOT carry, inside topics it DOES cover. Asking for them is a reasonable question with no answer here — do not keep probing endpoints for them, and do not treat a nearby field as a substitute. instead names a different real field, not a stand-in.
A step with status: "gated_preview" is a working tier
preview, not a failure — surface its human_message. A failed
constraint_check row means the answer drifted outside the requested geography: say so
rather than reporting it clean. Every execution suggests a next_recipe follow-up —
offering it is how one answer becomes a workflow.
Building a configured agent? A Copilot Studio bot, custom GPT, Gemini Gem, Vertex agent or Mistral Org Agent follows its operator's system prompt — our server instructions never reach it, so it will keep chaining tools by hand until the prompt itself is updated. Paste the maintained block from dchub.cloud/integrations/mcp#operator-prompt.
The endpoint is keyless out of the box: 10 calls/day free, no signup. Need more headroom?
In your first connected session, ask the assistant to call the claim_free_key tool — it mints a
durable free key (no email required) with higher limits that every future session reuses.
…plus 30+ more — facilities, deals, water risk, tax incentives. Full list on the main connect page.
Both are Cloudflare’s own documented behaviour, and both matter before you treat a portal as a control boundary:
https://dchub.cloud/mcp is a public endpoint by design.Two checks. The first proves the server is reachable and complete; the second proves your credential is actually arriving.
Once the server syncs, Cloudflare should show the full DC Hub surface —
88 tools and 13 prompts, with serverInfo reporting
DC Hub Intelligence 2.12.8. A lower tool count means a partial
sync; re-sync before going further.
Call search_facilities with query=Ashburn and limit=25
through your portal, then compare against an anonymous caller. The measured anonymous baseline on
2026-09-02: tier is free, data carries 3 rows,
_data_total_in_pro is 5, and upgrade_url is
https://dchub.cloud/pricing. If your credential arrived, those free-tier markers are
absent and the full result set comes back.
An invalid key looks exactly like no key. A rejected credential falls back to anonymous and produces output identical to sending nothing at all — so a passthrough test run with a placeholder value proves nothing. Test with a real key, and keep a no-credential run as the control.
If you chose OAuth, the decisive evidence is not visible in your dashboard: it is the
dch_oauth_ key on the session, server-side. Ask us to read it for your first
connection.
Portals offer two token-saving modes. Both degrade DC Hub quietly rather than visibly — your agents keep answering, just less correctly.
minimize_tools “strips tool descriptions and input schemas from all
upstream tools, leaving only their names.”search_and_execute “hides all upstream tools” behind a generic
search-then-execute pair.Both hurt here for the same reason: DC Hub publishes its own limits alongside its answers, and
those contracts live in the tool schemas. rank_sites,
site_selection_canvas and get_power_availability_timeline each return a
constraint_coverage block naming what the answer does not cover;
get_composite_site_score returns coverage and
coverage_ratio. Strip the schemas and you keep the answers while discarding the
caveats — the opposite of what an audited deployment wants.