Give Claude, Cursor, or any MCP client direct access to 155 verified US county parcel endpoints, no API key, no screen-scraping. One command:
@urbankitstudio/mcp-atlasstdio. Runs locally, works with every MCP client.
155 counties across 50 states, each with a verified ArcGIS REST endpoint.
The same atlas, 155 US counties, each with a verified ArcGIS REST parcel endpoint, owner / APN / address lookup, and no API key, published across the major MCP registries and on npm. Pull it from wherever your client looks for servers.
npx -y @urbankitstudio/mcp-atlas
npm i @urbankitstudio/atlas
Listed as io.github.LEOyrh/mcp-atlas in the modelcontextprotocol.io registry.
Indexed and independently scored in the Glama MCP directory.
Indexed in the mcp.so community server directory.
Open on mcp.soThe MCP server package, v0.1.4, with install page and version history.
Source, issues, and the contribution guide. MIT license.
Open on GitHubOpen claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/; Windows: %APPDATA%\Claude\) and add or merge in this block, then restart Claude Desktop:
{
"mcpServers": {
"urbankit-atlas": {
"command": "npx",
"args": ["-y", "@urbankitstudio/mcp-atlas"]
}
}
}Claude Desktop launches the server via npx on startup. In a fresh conversation ask: "What urbankit-atlas tools do you have?", you'll see all four. Try "What's the parcel REST endpoint for Travis County, TX?"
The same config block works for Cursor and any other client that supports stdio MCP servers.
The AI client discovers these via tools/list and calls them as needed during a conversation.
list_countiesList all 155 counties with verified parcel REST endpoints, optionally filtered by state slug.
find_countyFuzzy-match a county by name or 5-digit FIPS code. Returns endpoint URLs and the set of searchable fields.
get_parcel_endpointRetrieve the complete ArcGIS REST URL, layer index, and a ready-to-run sample query for one specific county.
build_owner_queryConstruct an ArcGIS REST query URL for owner/taxpayer lookup using the county's verified field name and case-insensitive partial matching.
A real conversation with Claude Desktop after connecting the server:
User: What's the parcel REST endpoint for Travis County, TX?
Claude: [calls get_parcel_endpoint({ state: "texas", county: "travis-county" })]
Tool: {
"url": "https://maps.traviscountytx.gov/arcgis/rest/services/GIS/TaxParcelQuery/MapServer/0",
"searchFields": [
{ "name": "PROP_ID", "searchable": true },
{ "name": "LEGAL_NAME", "searchable": true },
{ "name": "SITUS_ADDR", "searchable": true }
],
"ownerField": "LEGAL_NAME",
"sampleQuery": "...where PROP_ID='123456'"
}
Claude: Travis County uses MapServer layer 0. To look up an owner, query
the LEGAL_NAME field. Here's a ready URL for partial-match
owner search. Let me know if you want me to run it.The model chose get_parcel_endpoint, got back the verified ArcGIS URL, the owner field name, and a ready query, no manual tab-switching or ArcGIS convention knowledge required.
If you want the atlas data inside your own TypeScript code, not through an AI client, install @urbankitstudio/atlas instead. It bundles all 155 counties offline with zero runtime network calls, TypeScript types, and a buildParcelLookupDeepLink helper.
Clients that connect to MCP servers by URL (no local subprocess) can point directly at https://urbankitstudio.com/api/mcp. It runs on Vercel and speaks JSON-RPC 2.0 over HTTP per the MCP 2025-06-18 spec. It exposes six tools including address geocoding and full parcel-by-address resolution.
{
"mcpServers": {
"urbankit-atlas": {
"url": "https://urbankitstudio.com/api/mcp"
}
}
}The server speaks plain JSON-RPC, so you can verify connectivity with curl:
curl -X POST https://urbankitstudio.com/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'The response includes serverInfo, protocolVersion, and a short instructions string Claude reads before deciding which tool to call.
The HTTP endpoint exposes 6 tools. Click "Example call" to see the JSON-RPC payload for testing without a client.
Resolve a U.S. street address to its county parcel record end-to-end. Returns the geocoded match, the county FIPS, and, if the county is indexed, the REST endpoint, searchable fields, and a deep link.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find_parcel_by_address",
"arguments": {
"address": "100 N Lake St Aurora IL"
}
}
}Resolve a U.S. address to lat/lon, state FIPS, and county FIPS via the U.S. Census Geocoder. Use when you only need the geographic resolution.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "geocode_address",
"arguments": {
"address": "1600 Pennsylvania Ave NW Washington DC"
}
}
}List the states the UrbanKit atlas covers, with county counts. Discovery surface.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_indexed_states",
"arguments": {}
}
}List the indexed counties for a state, with their REST endpoint URLs and searchable field names.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_counties_in_state",
"arguments": {
"state_slug": "illinois"
}
}
}Look up a county in the atlas by 5-digit FIPS code (state + county). Use after geocode_address to chain into atlas tools.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find_county_by_fips",
"arguments": {
"fips": "17089"
}
}
}Fetch the canonical record for one specific county, endpoint URL, all searchable fields, sample query, and contact info.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_county_endpoint",
"arguments": {
"state_slug": "illinois",
"county_slug": "kane-county"
}
}
}get_parcel_endpoint.build_owner_query.list_counties filtered by state.find_county.MCP is an open standard for connecting AI assistants like Claude Desktop, Cursor, and ChatGPT to external tools and data sources. Anthropic published the spec in late 2024; Claude Desktop, Cursor, and the OpenAI Apps SDK all added MCP support within a year. An MCP server exposes tools (functions the AI can call) over JSON-RPC. When you configure your AI client to talk to a server, the AI discovers the available tools via tools/list and calls them as needed.
npx @urbankitstudio/mcp-atlas is a stdio-based MCP server you run locally. It ships with the full atlas baked in, no network call to our servers needed. The HTTP endpoint at urbankitstudio.com/api/mcp is a remote MCP server your client points at by URL. Both serve the same atlas data. The npm package is the recommended default: it works with every MCP client, runs offline, and always reflects the atlas version you have installed.
No. Both the npm package and the HTTP endpoint are public read-only. There is no usage cap on the server side. Your AI client (Claude Desktop, Cursor, etc.) pays the LLM-token cost on its own subscription.
Two things. First, the AI calls tools directly and stitches the results into its reasoning, no 'open this link, then open this other link' dance. Second, the response is structured JSON, not HTML, so the AI can chain results into follow-up questions like 'now build an owner query for Travis County.' The website is for humans; the MCP server is for agents.
Any MCP-spec-compliant client. Claude Desktop is the canonical one (config snippet below). Cursor, Continue, and other IDE-integrated AI tools have MCP support. The OpenAI Apps SDK added remote MCP support in 2025. Any client that can launch a local subprocess with stdio transport will work with the npm package.
Yes. The npm package source is at github.com/LEOyrh/mcp-atlas (MIT license). The atlas data files backing the HTTP endpoint are served from the same domain and are the source of truth, no hidden database. You can fork the server, point it at a different atlas, and ship your own.
The MCP server is free and public for evaluation. Teams that need higher Parcel Data API rate limits, bulk county downloads as JSON or CSV, the radius-notice tool with seats for staff, and an uptime SLA have a tier for that. Built for proptech, title and escrow, land-use law, and GIS consultancies.
UrbanKit for Teams