URBANKIT/STUDIO
    FREE · NO SIGNUP
    URBANKIT/STUDIO · EST. 2026 · ONLINEFREE · BROWSER-ONLY · NO TELEMETRY · OPEN SOURCE
    For developers & AI agents

    Build on the parcel atlas

    The same county parcel data behind our tools, in two forms you can call from code: a TypeScript npm package for your own programs, and a keyless MCP server for Claude, Cursor, and other AI clients. No account, no API key, MIT-licensed.

    npm SDK

    @urbankitstudio/atlas v0.4.0. TypeScript, ESM + CJS, zero runtime deps.

    MCP server

    JSON-RPC 2.0, MCP spec 2025-06-18. Six tools, one endpoint, no key.

    Underlying data

    128 counties across 39 states, each with verified REST endpoints and searchable fields.

    npm SDK — @urbankitstudio/atlas

    A typed wrapper around the atlas, bundled offline so your code makes no runtime network call to resolve a county. Look up an endpoint by slug or FIPS, read its searchable fields, and build deep-links into the parcel-lookup tool. Works in Node 18+ and every modern bundler.

    npm i @urbankitstudio/atlas

    A real example

    Every function below ships in v0.4.0. findCountyByFips and findCounty return undefined on a miss rather than throwing, so you can branch on the result.

    import { findCountyByFips, listStates, atlas } from "@urbankitstudio/atlas";
    
    // 1. Resolve a 5-digit county FIPS to its parcel endpoint.
    const kane = findCountyByFips("17089"); // Kane County, IL
    if (kane) {
      const endpoint = kane.endpoints[0];
      console.log(endpoint.url);          // the live ArcGIS REST URL
      console.log(endpoint.searchFields); // [{ name: "PIN", searchable: true }, ...]
    }
    
    // 2. Discovery: which states are indexed, and how many counties each.
    const populated = listStates().filter((s) => s.populated);
    console.log(populated.length, "states");
    
    // 3. Coverage totals are on the bundled atlas root.
    console.log(atlas.totals); // { states, counties, endpoints }
    
    // Unknown / malformed input returns undefined — it never throws.
    EXPORTS

    listStates, findState, findCounty, findCountyByFips, listCountiesByState, buildParcelLookupDeepLink.

    SHAPE

    Dual ESM/CJS builds, full .d.ts types, sideEffects: false, zero runtime dependencies.

    MCP server — for AI agents

    If your client speaks the Model Context Protocol, point it at our endpoint and the parcel atlas becomes six callable tools: find_parcel_by_address, geocode_address, list_indexed_states, list_counties_in_state, find_county_by_fips, and get_county_endpoint. The server is public and read-only. Your client pays its own LLM-token cost; there is no key to manage on our side.

    ENDPOINThttps://urbankitstudio.com/api/mcp

    Claude Desktop config

    Open claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/; Windows: %APPDATA%\Claude\) and merge in this block, then restart Claude Desktop.

    {
      "mcpServers": {
        "urbankit-atlas": {
          "url": "https://urbankitstudio.com/api/mcp"
        }
      }
    }

    The full MCP server page has the per-tool reference, JSON-RPC payload examples, a curl walkthrough, and setup notes for Cursor and other clients.

    SDK or MCP — which one?

    Reach for the npm SDK when

    • You are writing your own program and want county lookups inline, with no network round-trip and full TypeScript types.
    • You need deterministic, versioned data you can pin in package.json.
    • You are building a deep-link into the parcel-lookup tool from your own UI.

    Reach for the MCP server when

    • You want Claude, Cursor, or another AI client to resolve a parcel mid-conversation without copy-pasting.
    • You want address-to-APN and geocoding chained by the model, not wired by hand.
    • You do not want to ship or update a dependency. The endpoint tracks the latest atlas on its own.

    The data underneath

    Both surfaces read the same source: the County Parcel REST API Atlas, a hand-verified index of public ArcGIS endpoints. No hidden database sits behind them. The JSON files are the source of truth, and you can browse the whole set by state.