# find_sites

FRONT DOOR CHECK — if the question spans more than one capability ("find 200MW near Dallas with fiber, then rank the markets"), call execute_plan(intent="<the user's question, unchanged>"). find_sites is the right single call when the user has NO site yet and wants candidates to start from. THE INVERSE QUERY: every other DC Hub siting tool needs a coordinate you already have — analyze_site scores one, get_composite_site_score grades one, rank_sites orders candidates YOU already enriched, find_alternatives needs a seed facility. This one answers "where should I even be looking?". Returns candidate SEARCH AREAS anchored on real HIFLD substations at or above min_voltage_kv, spatially de-duplicated by cluster_km so a dense metro yields distinct areas instead of 40 near-identical rows, each carrying measured distance to the nearest gas pipeline and fiber route plus state-grain moratorium context, and a next_calls handoff. ★ WHAT A CANDIDATE IS NOT: a search area is NOT a parcel, NOT a listing, and NOT land known to be for sale — DC Hub holds no land-ownership or availability data, and hosted parcel boundaries cover ONE county (Loudoun VA), so analyze_parcel will 404 on most of these points BY DESIGN. Read each as "start looking here", then score the coordinate with analyze_site. ★ READ constraint_coverage BEFORE CALLING THIS A SCREENED LIST: a constraint filters ONLY when its layer actually answered. If a layer errors, the set comes back UNFILTERED with applied:false plus a reason and an instead, the names repeated in top-level unapplied_constraints and an unapplied_constraints_warning — an unevaluable constraint is never a passed constraint. fiber_distance_km is a straight-line CHORD between a route's endpoints, NOT the true polyline path; its basis is stamped on every candidate and get_fiber_readiness at the coordinate is the engineered read. hazard/moratorium are STATE grain, never a site verdict. A geography is REQUIRED — pass state, or lat+lon (+radius_km); without one you get a legible 400 (error_code geography_required), never a nationwide scan. Free tier coarsens coordinates to ~11 km and withholds operator/capacity. Answers "where should I even be looking for 200 MW in Ohio" and "which areas near Dallas sit on 230kV with gas within 5 miles". Try: find_sites state=OH min_voltage_kv=230 max_gas_km=8 — or find_sites lat=39.04 lon=-77.48 radius_km=60 min_voltage_kv=500. Do NOT use to score a site you already have (analyze_site), to rank candidates you already enriched (rank_sites), to find similar FACILITIES to a known one (find_alternatives), or for interconnection-queue survivors (get_refined_queue).

Agent View of the PolicyLayer registry record for `find_sites`. HTML page: https://policylayer.com/tools/cloud-dchub-mcp-server/find-sites

## Facts

- Tool: `find_sites`
- Server: Mcp Server (`https://dchub.cloud/mcp`) — https://policylayer.com/tools/cloud-dchub-mcp-server.md
- Homepage: https://github.com/azmartone67/dchub-mcp-server
- Risk category: Read (Low risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server CORS policy: *
- Server rate-limited: no
- Parameters: 12
- Recommended policy verdict: Allowed

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `lat` | number | no | Latitude of a search centre, e.g. 39.04 — use with lon (+ radius_km) instead of state |
| `lng` | number | no | Alias for lon — either name works |
| `lon` | number | no | Longitude of a search centre, e.g. -77.48 |
| `limit` | integer | no | Max results to return (1-500; default varies by tool) |
| `state` | string | no | 2-letter US state to search, e.g. OH — required unless you pass lat + lon |
| `latitude` | number | no | Alias for lat — either name works |
| `longitude` | number | no | Alias for lon — either name works |
| `radius_km` | number | no | Search radius in km around lat/lon (default 80, clamped 5-400); ignored in state mode |
| `cluster_km` | number | no | Collapse anchors within this many km into one candidate area (default 8, max 100). Raise it for broader coverage, lower it for denser results |
| `max_gas_km` | number | no | Drop candidates farther than this from the nearest gas pipeline. Applied ONLY if the gas layer answers — check constraint_coverage |
| `max_fiber_km` | number | no | Drop candidates farther than this from the nearest fiber route (CHORD approximation — see fiber_distance_basis). Applied ONLY if the fiber layer answers |
| `min_voltage_kv` | number | no | Only anchor on substations at or above this voltage in kV (default 115). 230+ for hyperscale, 500 for the largest campuses |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_sites",
    "arguments": {}
  }
}
```

## Why find_sites is rated Low

Tool queries and retrieves site candidate data without side effects or state changes.

From the tool's own definition: "find_sites returns candidates; no modifications, deletions, or external operations triggered"

Risk signals: High parameter count (13 properties) · Bulk/mass operation — affects multiple targets

## Use case

AI agents call find_sites to retrieve information from Mcp Server without modifying anything. It is typically the context-gathering step in research, monitoring, and reporting workflows, before the agent takes action elsewhere.

## Recommended policy (PolicyLayer)

Verdict: **Allowed**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches Mcp Server:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "find_sites": {}
  }
}
```

## Other tools on Mcp Server (87)

- `delete_standing_intent` — Destructive — https://policylayer.com/tools/cloud-dchub-mcp-server/delete-standing-intent.md
- `execute_plan` — Execute — https://policylayer.com/tools/cloud-dchub-mcp-server/execute-plan.md
- `simulate_scenario` — Execute — https://policylayer.com/tools/cloud-dchub-mcp-server/simulate-scenario.md
- `unlock_more_data` — Financial — https://policylayer.com/tools/cloud-dchub-mcp-server/unlock-more-data.md
- `ai_capacity_index` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/ai-capacity-index.md
- `analyze_parcel` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/analyze-parcel.md
- `analyze_site` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/analyze-site.md
- `cluster_sites_by_latency` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/cluster-sites-by-latency.md
- `compare_isos` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/compare-isos.md
- `compare_sites` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/compare-sites.md
- `deal_autopsy` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/deal-autopsy.md
- `discover_tools` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/discover-tools.md
- `fetch` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/fetch.md
- `find_alternatives` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/find-alternatives.md
- `get_agent_registry` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-agent-registry.md
- `get_backup_status` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-backup-status.md
- `get_changes` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-changes.md
- `get_climate_intel` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-climate-intel.md
- `get_composite_site_score` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-composite-site-score.md
- `get_dchub_recommendation` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-dchub-recommendation.md
- `get_disaster_risk` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-disaster-risk.md
- `get_energy_prices` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-energy-prices.md
- `get_facility` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-facility.md
- `get_facility_risk_delta` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-facility-risk-delta.md
- `get_fiber_intel` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-fiber-intel.md
- `get_fiber_readiness` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-fiber-readiness.md
- `get_gas_economics` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-gas-economics.md
- `get_gas_index` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-gas-index.md
- `get_gas_intelligence` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-gas-intelligence.md
- `get_global_power` — Read — https://policylayer.com/tools/cloud-dchub-mcp-server/get-global-power.md
- …and 57 more: https://policylayer.com/tools/cloud-dchub-mcp-server.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=cloud-dchub-mcp-server · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/cloud-dchub-mcp-server
