San Diego City GIS MCP
Provides tools to discover, query, and analyze GIS data from an ArcGIS Server REST services directory, including searching for layers, retrieving metadata, querying features, performing spatial queries, and geocoding addresses.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@San Diego City GIS MCPsearch for zoning layers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenContext
Audubon IBA MCP — a National Audubon Society Important Bird Areas fork of OpenContext (forked from the San Diego City GIS fork). It serves Audubon's public IBA feature service through the audubon_iba plugin.
Where the sibling GIS forks front a whole portal or services directory, this one fronts one fixed FeatureServer with a known schema. There is nothing to crawl, so the catalog-discovery machinery is gone: no search_datasets, no get_aggregations, no catalog manifest, no dataset-id resolution. What carries over is the ArcGIS REST plumbing — WGS84 handling, coded-value domain decoding, pagination, and error surfacing.
An IBA is a conservation priority, not a legal status. IBA designation is science-based (BirdLife/Audubon criteria, ranked Global / Continental / State). It carries no legal or regulatory force: it does not protect land, restrict its use, or trigger permitting, and the boundaries are advisory rather than authoritative property lines. This server states that in its MCP
instructions, in its tool descriptions, and in a footer on its output.
The data source
https://services1.arcgis.com/lDFzr3JyGEn5Eymu/arcgis/rest/services/iba_polygons_public/FeatureServer
layer 0 iba_polygons_public -- the main IBA polygon record
tables 3 criteria_site 4 criteria_species 5 habitat 6 landuse
7 observation 8 ownership 9 site_description
10 species 11 threatPublic and key-less. Layer 0's fields, coded-value domains, record cap (2000), and relationship ids are read from the service at runtime (?f=json) and cached — nothing is hardcoded beyond the fields the tools actually name.
Sites are addressed by site_id (e.g. 1004 = Anchorage Coastal), which you get from search_ibas or find_ibas_near_point.
Related MCP server: mcp-arcgis-irvine
The WGS84 contract
The polygons are authored in EPSG:3857 (Web Mercator). Every query sets inSR=4326 and outSR=4326, so all tools take and return WGS84 lat/lng and the service reprojects server-side. Without inSR, a WGS84 point would be read as Web Mercator metres and silently match nothing. find_ibas_near_point adds a server-side buffer (distance + units=esriSRUnit_Kilometer) rather than computing geometry client-side.
Pagination is metadata-driven: maxRecordCount is read from the service, and both /query and /queryRelatedRecords page with resultOffset/resultRecordCount.
Tools exposed
Tool | Purpose |
| "Which IBAs are near here?" — buffers a WGS84 |
| Attribute search: |
| The full polygon record for one |
| The tables behind a site, by |
| The site's actual polygon (WGS84 rings + bbox), for when inside the IBA has to mean inside rather than near |
| Cheap enum discovery for a field ( |
Workflow: fetch the polygon record first, then pull a related table only when the question needs one — species/criteria for why it was designated, threat/ownership/landuse for stewardship context, habitat for ecosystem, observation for history.
Chaining to eBird — read this before you do
The obvious mashup ("which designated species are being seen here right now?") has two traps that return confident, silently wrong answers. Both are handled by the server, but only if you use it as intended:
Never pass
species_codeto eBird. Audubon's taxonomy is frozen pre-2014, and most of its codes happen to coincide with eBird's — which is exactly what makes the rest dangerous. Site 202 is designated for "Clapper Rail"/clarai, butclaraiis eBird's code for an Atlantic bird absent from California; the bird actually there is Ridgway's Rail (ridrai1). eBird answers "no records" and its absence-of-evidence disclaimer makes the zero look real. Resolve every bird through eBird's taxonomy by scientific name first.ebird_linkis not a join key. It is a human-facing web URL; theUS-CA_202inside it is an Audubon id that every eBird tool rejects. The working bridge is the centroid plus thesuggested_radius_kmthatget_iba_detailsreturns (eBird's 25 km default is metro-scale against a site of a few km²). For a true in-boundary audit rather than a radius, useget_iba_boundaryand filter hotspot coordinates against the rings.
Full details, including the probed classification of every stale code: docs/EBIRD_COMPOSABILITY.md.
Connect to the server
Add it as a custom connector in Claude (same steps on Claude.ai and Claude Desktop):
Settings → Connectors (or Customize → Connectors on claude.ai)
Add custom connector
Name it e.g.
Audubon IBAand paste your deployment's/mcpURL.
Quick health check from a terminal:
curl -sS -X POST http://localhost:8000/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
# → {"jsonrpc":"2.0","id":1,"result":{"status":"ok"}}Raw JSON-RPC example:
curl -sS -X POST http://localhost:8000/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"audubon_iba__find_ibas_near_point",
"arguments":{"lat":61.17,"lng":-149.9,"radius_km":40}}}'Verified end-to-end
The definition-of-done is a two-step chain around Anchorage (61.17, -149.9): a 40 km buffer search, then a related-record traversal on a site it returns. Together they prove the WGS84 buffer contract and the site_id → objectid → queryRelatedRecords chain (the relationship id is not the related table's id, and queryRelatedRecords keys on objectid, not site_id).
// audubon_iba__find_ibas_near_point
{ "lat": 61.17, "lng": -149.9, "radius_km": 40 }returns six Alaska IBAs — Anchorage Coastal, Campbell Creek, Goose Bay, Palmer Hay Flats, Susitna Flats, Swanson Lakes — each with its priority rank and ebird_link. Traversing one of them:
// audubon_iba__get_iba_related_records
{ "site_id": 1004, "category": "species" }returns the birds Anchorage Coastal was designated for (Short-billed Dowitcher, Snow Goose, Hudsonian Godwit, Sandhill Crane).
scripts/smoke_prod.py runs both plus eleven more checks against any deployment — including that species records still carry the eBird taxonomy warning, and that a site whose name contains a SQL keyword (Union) is still searchable:
python scripts/smoke_prod.py # production
python scripts/smoke_prod.py http://localhost:8000/mcp # localData use
The endpoint is public, but Audubon routes formal reuse of the spatial data through a request process. Ad-hoc display and analysis in conversation is fine; anything beyond that should go through Audubon.
Local development
uv sync # or: pip install -r requirements.txt
python scripts/local_server.py # serves http://localhost:8000/mcp
python -m pytest tests/ -q # testsOn Windows, set PYTHONIOENCODING=utf-8 before local_server.py (it prints emoji).
See CLAUDE.md and docs/ for architecture, deployment, and plugin development.
Credits & thanks
This server is a fork of OpenContext, created by Srihari Raman and released by the City of Boston, Department of Innovation and Technology under the MIT License.
Everything that makes this repository work — the plugin architecture, the MCP JSON-RPC server, the Lambda/HTTP adapters, the one-fork-one-server discipline, the deployment tooling — is theirs. This fork only adds a plugin for one bird-conservation dataset on top of that foundation, and the docs/ you'll find here (architecture, getting started, plugin development) are largely their work, retained as-is.
Publishing a civic data framework as open source, general enough that a bird-conservation dataset in Alaska can ride on a project built for Boston's open data, is a real public good. Thank you to Srihari Raman and to the City of Boston for building it and giving it away.
Thanks also to the National Audubon Society for publishing the Important Bird Areas data openly, and to the Cornell Lab of Ornithology for eBird, which this server is designed to compose with.
Licensed MIT — see LICENSE, which retains the original copyright.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceEnables searching and querying Washington DC's open geospatial datasets (parcels, zoning, addresses, transport) via ArcGIS feature services, with tools for dataset discovery, attribute/geometry queries, and schema inspection.Last updated11MIT
- Alicense-qualityCmaintenanceEnables querying City of Irvine GIS open geospatial data (parcels, zoning, parks) via ArcGIS Feature Services, with tools to search datasets, query layers, and retrieve schema information.Last updated18MIT
- Alicense-qualityCmaintenanceProvides tools to search and query City of Cupertino's open geospatial data (ArcGIS), including parcels, zoning, and public works layers.Last updated4MIT
- Alicense-qualityCmaintenanceEnables searching and querying City of Carlsbad, California open geospatial datasets (parcels, zoning, public works) via ArcGIS Feature Services. Provides tools to search datasets, query layers with SQL-like conditions, and retrieve layer schema.Last updated5MIT
Related MCP Connectors
ArcGIS Hub — open government geospatial data (search + Feature Service query).
City of Carlsbad GIS — Carlsbad, California open geospatial data (ArcGIS).
City of San Clemente GIS — San Clemente, California open geospatial data (ArcGIS).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codeforanchorage/audubon-iba-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server