Give Claude, Cursor, or any MCP client direct access to 170 verified US county parcel endpoints, no API key, no screen-scraping. One command:
@urbankitstudio/mcp-atlasstdio. Runs locally, works with every MCP client.
170 counties across 50 states, each with a verified ArcGIS REST endpoint.
The same atlas: 170 US counties indexed, 165 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.2.0, 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 170 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 170 counties offline with zero runtime network calls, TypeScript types, and a buildParcelLookupDeepLink helper.
Two of the eight tools bill you, so the question of whether an agent picks the right one is a question about your invoice as much as your answer. We publish an eval set of hand written tasks, each naming the tool a careful reader would call and why, and measure tool selection, argument correctness and cost safety against the exact tool descriptions this server ships.
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. Six discovery tools remain public and read-only. Two key-gated actions perform the work: enrich_address for one owner/APN lookup and radius_owners for a capped radius mailing list.
{
"mcpServers": {
"urbankit-atlas": {
"url": "https://urbankitstudio.com/api/mcp"
}
}
}To enable enrich_address and radius_owners, add your UrbanKit key as an Authorization header:
{
"mcpServers": {
"urbankit-atlas": {
"url": "https://urbankitstudio.com/api/mcp",
"headers": {
"Authorization": "Bearer uk_live_REPLACE_WITH_YOUR_KEY"
}
}
}
}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 8 tools: six public discovery tools and two key-gated actions. 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"
}
}
}Perform the parcel query and return owner of record, APN, site address, and owner mailing address. Requires an UrbanKit API key on a paid plan (Starter $7/mo and up) or pay-as-you-go. PAYG meters one unit only when parcel data is released; plan keys use one request from their quota, refunded if the failure was on our side.
Send Authorization: Bearer <key> on the MCP HTTP request.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "enrich_address",
"arguments": {
"address": "5 E Wilson St, Batavia, IL 60510"
}
}
}Return parcel and available owner-mailing rows inside a radius. Paid plan keys only (PAYG excluded). Bills one quota unit per parcel row returned, defaults to a 100-row cap, and supports a count_only preview before raising the cap (maximum 500).
Send Authorization: Bearer <key> on the MCP HTTP request.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "radius_owners",
"arguments": {
"address": "5 E Wilson St, Batavia, IL 60510",
"radius_feet": 500,
"count_only": true
}
}
}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 and makes no request to our servers. The HTTP endpoint at urbankitstudio.com/api/mcp adds two hosted actions: enrich_address for one owner/APN lookup, and radius_owners for a capped parcel-and-mailing list around an address. Use the local package for offline endpoint discovery; use the HTTP actions when you want the lookup performed for you.
Not for the local npm package or the HTTP endpoint's six discovery tools. The hosted actions require a key: enrich_address runs on paid plans or pay-as-you-go; radius_owners runs on paid plans only because one ring can return hundreds of parcel rows. enrich_address uses one unit when data is released. radius_owners uses one unit per parcel row returned, with a caller-set cap and a count_only preview.
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 data delivered 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 Teamsnpm SDK (@urbankitstudio/atlas) for TypeScript programs that need county data offline.
Browser version of address-to-APN, for humans without a Claude subscription.
Open toolBrowser version of enrich_address: one address to its owner of record, free, restrictions honored.
Open toolThe full index of 170 indexed counties, browsable by state.
Browse