URBANKIT/STUDIO
    Sign inFREE TOOLS · NO SIGNUP
    URBANKIT/STUDIO · EST. 2026 · ONLINEFREE · BROWSER-ONLY · NO TELEMETRY
    Published, @urbankitstudio/mcp-atlas v0.2.0

    Parcel-Data MCP Server

    Give Claude, Cursor, or any MCP client direct access to 170 verified US county parcel endpoints, no API key, no screen-scraping. One command:

    npx -y @urbankitstudio/mcp-atlas

    npm package

    @urbankitstudio/mcp-atlas

    Transport

    stdio. Runs locally, works with every MCP client.

    Coverage

    170 counties across 50 states, each with a verified ArcGIS REST endpoint.

    Available on

    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.

    MCP server
    npx -y @urbankitstudio/mcp-atlas
    TypeScript SDK
    npm i @urbankitstudio/atlas

    Quick start, Claude Desktop

    Open 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 4 tools

    The AI client discovers these via tools/list and calls them as needed during a conversation.

    list_counties

    List all 170 counties with verified parcel REST endpoints, optionally filtered by state slug.

    find_county

    Fuzzy-match a county by name or 5-digit FIPS code. Returns endpoint URLs and the set of searchable fields.

    get_parcel_endpoint

    Retrieve the complete ArcGIS REST URL, layer index, and a ready-to-run sample query for one specific county.

    build_owner_query

    Construct an ArcGIS REST query URL for owner/taxpayer lookup using the county's verified field name and case-insensitive partial matching.

    Example exchange

    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.

    Need the atlas inside your own code?

    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.

    Does an agent use these tools correctly?

    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.

    Also available: remote HTTP endpoint

    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.

    Claude Desktop, HTTP config

    {
      "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"
          }
        }
      }
    }

    Try it from the terminal

    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.

    HTTP endpoint tools reference

    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.

    find_parcel_by_address

    Public HTTP tool

    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.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "find_parcel_by_address",
        "arguments": {
          "address": "100 N Lake St Aurora IL"
        }
      }
    }

    geocode_address

    Public HTTP tool

    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.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "geocode_address",
        "arguments": {
          "address": "1600 Pennsylvania Ave NW Washington DC"
        }
      }
    }

    list_indexed_states

    Public HTTP tool

    List the states the UrbanKit atlas covers, with county counts. Discovery surface.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "list_indexed_states",
        "arguments": {}
      }
    }

    list_counties_in_state

    Public HTTP tool

    List the indexed counties for a state, with their REST endpoint URLs and searchable field names.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "list_counties_in_state",
        "arguments": {
          "state_slug": "illinois"
        }
      }
    }

    find_county_by_fips

    Public HTTP tool

    Look up a county in the atlas by 5-digit FIPS code (state + county). Use after geocode_address to chain into atlas tools.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "find_county_by_fips",
        "arguments": {
          "fips": "17089"
        }
      }
    }

    get_county_endpoint

    Public HTTP tool

    Fetch the canonical record for one specific county, endpoint URL, all searchable fields, sample query, and contact info.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "get_county_endpoint",
        "arguments": {
          "state_slug": "illinois",
          "county_slug": "kane-county"
        }
      }
    }

    enrich_address

    API key required

    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.

    Example call
    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "enrich_address",
        "arguments": {
          "address": "5 E Wilson St, Batavia, IL 60510"
        }
      }
    }

    radius_owners

    API key required

    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.

    Example call
    {
      "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
        }
      }
    }

    What you can ask

    • "What's the parcel REST endpoint for Travis County, TX?", Claude calls get_parcel_endpoint.
    • "Build me an owner query for someone named Smith in Kane County, IL.", Claude calls build_owner_query.
    • "Which counties in Texas are in the atlas?", Claude calls list_counties filtered by state.
    • "Find the county with FIPS 48453.", Claude calls find_county.

    Frequently asked questions

    What is the Model Context Protocol (MCP)?

    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.

    What is the difference between the npm package and the HTTP endpoint?

    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.

    Do I need an API key from UrbanKit?

    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.

    How is this different from just searching urbankitstudio.com?

    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.

    What clients can connect?

    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.

    Is the source open?

    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.

    Production use

    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 Teams

    Related