daedal-map
Summary: DaedalMap is a geographic-interoperability MCP server that turns coordinates and codes into canonical loc_id identities, links geography systems via crosswalks, and serves boundary shapes plus maintained data packs.
Learn and discover —
get_tool_help(topic or exact tool contract),get_catalog(data packs or geometry families, lite/full/download),get_pack(one pack's metrics, filters, access lane).Coordinates to places —
resolve_pointfor shallow reverse geocoding (Admin 0–3, single point or bounded array, optional marine overlaps), thenresolve_deep_pointscoped to a shallowloc_idfor Admin 4–6 or one family (postal, watershed, marine, land management).Inspect places —
get_loc_id_infofor identity, parentage, lifecycle, shape status, and per-place pack/geometry availability (optionally hierarchy and cross-family references);compare_geographiesfor containment/common ancestry and temporal validity between twoloc_ids.Identify unknown geography —
identify_dataset_geographypicks the geography column(s) from sampled dataset columns;identify_reference_systemclassifies or verifies one identifier column's system, country, level, and vintage.Convert codes —
convert_referenceperforms any-to-any conversion throughloc_id(omitto_systemto land inloc_id), single or batched, with overlap thresholds and vintages.Retrieve shapes —
get_geometryreturns shape availability, metadata, centroid, and bbox by exactloc_id(s) or an administrative parent + level scope, with optional GeoJSON polygons.Query data —
get_datapulls rows from a published pack using exact metrics,loc_idregion filters, time/compare filters, sorting, and limits;get_eventdrills into a single disaster event with optional relationships, affected places, observations, and geometry.Pricing model — discovery and small lookups are free; bulk point resolution and reference conversion are metered with price disclosed before charge and paid from account credit.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
DaedalMap
Bring your data. Connect its geography.
DaedalMap is geographic interoperability infrastructure: a loc_id identity
model, versioned boundary geometry, published crosswalks between geography
systems, and maintained data packs. Resolve coordinates and reference codes to
administrative matches, pull compatible shapes and data, and follow crosswalks
into other systems such as census tracts, postal areas, watersheds, and
electoral districts.
Use it through a remote MCP server, an HTTP API, a map app, downloadable files, or this repository, which is the open runtime behind all of them.
Website | App | Agent docs | Geometry | Data packs | Downloads | Convert a file | llms.txt
Connect an agent
The hosted MCP server needs no install or account for discovery:
https://app.daedalmap.com/mcp?registry=githubClaude Code:
claude mcp add --transport http daedalmap 'https://app.daedalmap.com/mcp?registry=github'Codex:
codex mcp add daedalmap --url 'https://app.daedalmap.com/mcp?registry=github'Any client that supports streamable HTTP MCP can use the same URL. Start with
get_tool_help with topic='geometry' for geography jobs, or get_catalog, then get_pack,
then get_data for data. Setup for other clients is in the
agent docs.
Discovery and small geography lookups are free. Larger point/reference batches
and some data packs are metered: a paid call returns its exact price before any
charge and is paid from account credit with an API key. get_pack reports
the access lane for the selected data pack.
Related MCP server: STAC MCP Server
Tools
Job | Tools |
Learn the model |
|
Find what exists |
|
Query maintained data |
|
Inspect one disaster event |
|
Coordinates to places |
|
Rectangular map view to places |
|
Deeper map view lookup |
|
Identify a column of codes |
|
Translate codes between systems |
|
Inspect and relate places |
|
Retrieve shapes |
|
Each tool takes strict JSON arguments. The calling model turns a user's question into those arguments, and the server returns typed errors with recovery guidance when a call is malformed.
This table is the complete public roster, not a roadmap. Bulk export/job
builders and direct upstream live-feed wrappers remain internal or paused and
are intentionally absent from tools/list.
The loc_id model
loc_id is DaedalMap's geographic identity model. The administrative spine is
the main hierarchy and default join path:
USA country
USA-CA state
USA-CA-037 county
USA-CA-037-221710 census tractOther geography families, such as postal areas, watersheds, tribal areas, and
marine regions, keep their own loc_id identities. Published crosswalks connect
them to the spine and to each other, and each crosswalk row carries its
relationship type, overlap weight, source, and vintage. A direct join works when
both datasets declare the same identity; otherwise the connection runs through a
crosswalk.
Schema details are in docs/DATA_SCHEMAS.md.
Coverage
Geometry: global baseline plus 8+ deeper countries. The same geography tools work worldwide down to Admin 2. Country releases add deeper administrative tiers and reference families for Australia, Brazil, Canada, France, Germany, Mexico, the United Kingdom, the United States, and more as releases publish.
Data: 20+ maintained data packs covering natural hazards (earthquakes, tsunamis, volcanoes, hurricanes, tornadoes, wildfires, floods, weather alerts), hazard risk and environmental burden, economic and business indicators, currency rates, population, and climate.
The catalogs are the authority for what is available now:
Data packs: app.daedalmap.com/api/v1/catalog
Downloads
The Windows launcher's public source, build script, and tests are in tools/launcher. Its portable download keeps programs and its managed runtime in the launcher folder by default.
The Downloads page has three kinds of file:
Program - the map app or local MCP runtime, to run DaedalMap on your machine.
Data pack - maintained records for a subject, with source and release evidence.
Geometry package - boundaries and reference geography for a country or family.
Run it yourself
This repository is the open runtime: the FastAPI server, MCP and HTTP API, and map frontend. Use it to self-host, run against your own data, or extend the engine.
The Network expansion also lives in this repository. It adds optional rail, river, and power layers to the local Mapping map and provides a separate spreadsheet editor and Parquet CLI that run without Mapping. The older Lake County road map editor is archived reference code.
To develop one local program without checking out every source directory, see Work on one local tool. The tool source entries cover Mapping, Network, Research MCP, Geometry MCP, and the optional AI expansion, including their current migration status.
cd county-map
pip install -r requirements.txt
Copy-Item .env.example .envSet a data folder in .env:
INSTALL_MODE=local
RUNTIME_MODE=local
DATA_ROOT=C:/path/to/your/dataLeave DATA_ROOT blank to use the default app-data folder. No cloud storage,
database, or account is needed. The repository does not ship a data folder;
docs/DATA_INSTALLATION.md covers installing packs.
python app.pyThe app opens at http://localhost:7000, and the same MCP server is at
http://localhost:7000/mcp. Discovery routes:
GET /api/v1/guideGET /api/v1/catalogGET /api/v1/packs/{pack_id}POST /api/v1/query/dataset
Model API keys are optional. OPENAI_API_KEY or ANTHROPIC_API_KEY powers the
built-in chat panel only; MCP clients bring their own model. A self-hosted
instance returns commercial_access_unavailable on paid lanes unless you
configure a commercial verifier.
Runtime modes
|
| Use |
|
| Your machine, your data folder |
|
| Your machine, Parquet read from object storage you configure |
|
| A server deployment reading object storage |
In cloud data mode the runtime caches small metadata files locally and queries
Parquet in object storage through DuckDB httpfs. Details are in
docs/LOCAL_AND_HOSTED.md.
Documentation
docs/CONTEXT.md - technical router for the codebase
docs/API_AND_MCP.md - HTTP routes and MCP surfaces
docs/DATA_SCHEMAS.md - schemas and
loc_idconventionsdocs/DATA_PREPARATION.md - convert and validate your own data
docs/DATA_INSTALLATION.md - install data locally
docs/PACK_AUTHORING.md - build research packs and corpora
docs/RESEARCH_MCP.md - research with the hosted MCP
docs/RUNTIME_MODES.md - Explore, Research, Ops, and Tutorial
docs/SECURITY_AND_SELF_HOSTING.md - self-hosting securely
Contact
Questions, feedback, and self-hosting issues: support@daedalmap.com
License
MIT. Data packs and geometry carry their own source licenses, listed in each catalog entry.
For agents reading this repository
If asked to assess DaedalMap, start with the public context map, then use API and MCP contracts for hosted tools and data installation for local artifacts. The source checkout does not include the data packs or geometry packages. Check the live data catalog and geometry catalog before describing current coverage. Distinguish repository code, downloadable artifacts, and hosted service behavior in your answer.
Available Tools
16 toolscompare_geographiesCompare Geographic IdentitiesARead-onlyIdempotentInspect
Compare two known loc_ids using selected reference-graph identity and direct relationship evidence. Verified Admin ancestry can prove containment; a typed graph edge can prove only the relation it declares. An explicit negative edge returns no_overlap; a missing edge returns unknown. This tool never reads polygons or computes shape intersections. Use an external identifier bridge before this call when the input is not a loc_id. No payment required.
Inputs: as_of, items, batch_id, left_as_of, +5 more. Returns: ok, error, reason, results, +16 more
convert_referenceConvert Geographic ReferenceARead-onlyIdempotentInspect
Convert within one declared scope per call: iso3 is required and names one ISO3 country, GLOBAL, or MARINE. A batch uses one from_system, to_system, and crosswalk_id, with at most 25000 requested result rows. Convert X -> loc_id -> Y; omit to_system to enter the loc_id universe. For admin or city names use from_system admin_boundary with a country_hint inside the declared country. A published direct crosswalk uses one selected artifact; if the system pair has multiple artifacts, supply crosswalk_id from the typed ambiguity error. An exact miss ends on that artifact. Use get_geography when family or scope coverage is unknown. The tools/list access metadata states authored free, account, and paid item allowances; active operator policy may waive payment.
Inputs: iso3, as_of, items, limit, +11 more. Returns: ok, from, error, loc_id, +15 more
get_catalogList Published Packs or GeographiesARead-onlyIdempotentInspect
Choose data or geometry to list published pack IDs or family and scope IDs. The response includes a complete catalog download URL. Use get_pack for data or get_geography for geometry.
Inputs: catalog (required). Returns: error, packs, detail, reason, +20 more
get_dataGet DataARead-onlyIdempotentInspect
Retrieve rows from one selected published data pack using exact metrics, loc_id-based region filters, time/metric filters, sorting, and a row limit. Disaster event rows include stable event_id values for get_event drill-down. A parent administrative loc_id selects matching descendant rows at the pack's published grain. Call get_pack first; geometry families use their focused next-step tools.
Inputs: filters (required), metrics (required), pack_id (required), sort, +3 more. Returns: rows, sort, error, limit, +14 more
get_eventGet EventARead-onlyIdempotentInspect
Retrieve one exact disaster event and explicitly requested relationships, affected places, native observations, or geometry. Use get_data to obtain the stable event_id first.
Inputs: pack_id (required), event_id (required), source_id (required), limit, +4 more. Returns: error, event, reason, pack_id, +17 more
get_geographyInspect One Geography Family or ScopeARead-onlyIdempotentInspect
Inspect one published geometry family across scopes or one scope across families. Returns coverage and known editions from catalog metadata only. Optional year selects the latest admitted edition no later than that year when the selected catalog has an edition index; an unavailable index is reported explicitly.
Inputs: year, scope_id, family_id. Returns: error, reason, catalog, coverage, +10 more
get_loc_id_infoInspect Direct loc_id ConnectionsARead-onlyIdempotentInspect
Look up one known loc_id or a small batch in the selected reference graph. Return its identity and directly recorded loc_id connections, with family, direction, and relationship evidence. Each ID returns at most 50 connections and an explicit has_more flag. This tool does not expand descendants, infer containment, read shapes, search catalogs, or consult external adapters. No payment required.
Inputs: loc_id, loc_ids, batch_id, request_id. Returns: ok, iso3, name, error, +21 more
get_packInspect One Data PackARead-onlyIdempotentInspect
Inspect one exact data pack ID for its metrics, time coverage, and query metadata before get_data.
Inputs: pack_id (required). Returns: error, detail, reason, catalog, +12 more
get_shapeRetrieve Shapes for Known loc_idsARead-onlyIdempotentInspect
Shape lookup for exact existing loc_ids only. The default returns shape availability, centroid, and bounding box; include_polygon=true adds GeoJSON coordinates. Obtain any descendant IDs before this call. Historical geometry is returned first and successors are never substituted automatically. Year selection is not yet supported.
Inputs: loc_id, loc_ids, batch_id, request_id, +1 more. Returns: ok, error, items, reason, +13 more
get_tool_helpGet Tool HelpARead-onlyIdempotentInspect
Describe one tool visible on this facade, including its exact contract, or return a bounded workflow overview for one supported topic.
Inputs: topic, question, tool_name. Returns: ok, error, title, access, +13 more
identify_dataset_geographyChoose Geography Columns From a DatasetARead-onlyIdempotentInspect
Fast structural column selector: pass bounded named columns to find recognized geography headers or latitude/longitude pairs. It does not infer a country, level, or identifier system, open country indexes, or validate values. If more than one column is plausible, select one; then call identify_reference_system with the selected identifier column and one country_scope. No payment required.
Inputs: columns (required), request_id, country_scope, dataset_context. Returns: ok, error, limit, reason, +15 more
identify_reference_systemIdentify One Identifier Column's Reference SystemARead-onlyIdempotentInspect
Identify one selected identifier column within one required ISO3 country, GLOBAL, or MARINE scope. Pass bounded strings preserving leading zeros. It checks maintained identifier evidence, not dataset columns or polygons. Ambiguous systems stay unselected until expected.system is supplied. Use identify_dataset_geography first when the column is unknown. No payment required.
Inputs: country_scope (required), expected, identifier, request_id, +3 more. Returns: ok, error, limit, reason, +15 more
resolve_bboxResolve Map ViewportBRead-onlyIdempotentInspect
Compare one non-wrapping rectangular WGS84 viewport with the published Global administrative spine through Admin 2. Supply its four corners. Returns the best equal-area overlap plus nearby matches at each level and their shares of the viewport and loc_id. Large views may require zooming in. This tool reads no country deep bank.
Inputs: corners (required), request_id. Returns: ok, bbox, error, reason, +15 more
resolve_deep_bboxResolve Map Viewport (Deep)BRead-onlyIdempotentInspect
Second-pass rectangle overlap within one returned shallow administrative loc_id. Routes to that country's one Admin 1-owned exact partition and compares its Admin 1-6 spine. Supply the original four WGS84 corners; broad views may require zooming in.
Inputs: corners (required), shallow_loc_id (required), request_id. Returns: ok, bbox, error, reason, +15 more
resolve_deep_pointResolve Point(s) (Deep)ARead-onlyIdempotentInspect
Second-pass containment only after resolve_point. Supply the original WGS84 coordinate or a bounded point array, one shared shallow_loc_id returned by resolve_point, and one canonical family from get_catalog(catalog='geometry'). family defaults to administrative; shape-backed families use direct bbox-to-exact-shape lookup without crosswalks. Single and bulk requests share this scoped contract.
Inputs: shallow_loc_id (required), lat, lon, family, +4 more. Returns: ok, error, point, stack, +24 more
resolve_pointResolve Point(s) in One ScopeARead-onlyIdempotentInspect
Resolve WGS84 coordinates in exactly one selected scope and family. GLOBAL administrative finds Admin0; an ISO3 administrative scope finds its shallow country bank. MARINE requires one specific jurisdiction family (for example exclusive_economic_zone or high_seas), or water_body with water_kind=named or zone. The broad marine_jurisdiction category has no point route. No call crosses scopes or opens another family's bank. Discover families with get_catalog(catalog='geometry').
Inputs: lat, lon, family, points, +4 more. Returns: ok, error, point, stack, +24 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools have distinct roles, and the first-pass versus deep-pass resolution tools are explicitly separated in their descriptions. The four resolve_* tools and the sequential identify/convert/compare reference tools could still be confused at a glance, but the descriptions provide enough routing guidance.
All tool names use snake_case with a predictable verb-first pattern such as get_, resolve_, identify_, convert_, and compare_. Even the multiword names remain consistent and readable.
At 16 tools, the surface is slightly above the typical 3-15 range but reasonable for a complex geospatial catalog, resolution, and reference-conversion server. Each tool appears to serve a distinct workflow step rather than duplicating functionality.
The set covers discovery, pack/geography inspection, point and bbox resolution, deep resolution, identifier identification, conversion, comparison, shape lookup, event drill-down, and data retrieval. Minor gaps exist around broad search or polygon-intersection workflows, but the core read-only geospatial lifecycle is well covered.
Maintenance
Related MCP Connectors
Geocodio MCP — wraps the Geocodio geocoding API (geocod.io)
Free GeoNames MCP: countries, cities, POIs, distance & nearby. Remote HTTP + agent token signup.
Regrid MCP — wraps the Regrid Parcel API v2 (regrid.com)
Remote MCP endpoint for U.S. home forecasts, public benchmark data, and permit or zoning readiness.
Related MCP Servers
- AlicenseCqualityDmaintenanceA Model Context Protocol server that connects LLMs to GIS operations, enabling AI assistants to perform accurate geospatial analysis including geometric operations, coordinate transformations, and spatial measurements.87204MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to search and access geospatial datasets through STAC (SpatioTemporal Asset Catalog) APIs. Supports querying satellite imagery, weather data, and other geospatial assets with spatial, temporal, and attribute filters.1120MIT
- AlicenseAqualityDmaintenanceProvides comprehensive geospatial analysis capabilities through Turf.js, enabling spatial measurements, geometric operations, coordinate transformations, and geographic data processing. Supports over 100 geospatial functions including distance calculations, spatial relationships, buffer operations, and grid generation.100MIT
- FlicenseAqualityDmaintenanceProvides access to the OpenLandMap STAC catalog, offering over 100 global environmental datasets including soil, climate, and vegetation data. It enables AI agents to discover, search, and retrieve Cloud-Optimized GeoTIFFs for global geospatial analysis.27-