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.
@urbankitstudio/atlas v0.4.0. TypeScript, ESM + CJS, zero runtime deps.
JSON-RPC 2.0, MCP spec 2025-06-18. Six tools, one endpoint, no key.
128 counties across 39 states, each with verified REST endpoints and searchable fields.
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
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.listStates, findState, findCounty, findCountyByFips, listCountiesByState, buildParcelLookupDeepLink.
Dual ESM/CJS builds, full .d.ts types, sideEffects: false, zero runtime dependencies.
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.
https://urbankitstudio.com/api/mcpOpen 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.
package.json.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.
The browsable index of 128 indexed counties, by state, with each endpoint's searchable fields.
BrowsePer-tool reference, JSON-RPC examples, and client setup for the six-tool server.
Read the docsThe site, the atlas data files, the SDK, and the MCP edge function all live in one open repo.
Open repo