Atria API

Site intelligence for agents, over MCP

Atria is a hosted Model Context Protocol server. Any MCP client, or any program that can send an HTTP request, can look up US parcels, screen sites, search the results Scout found for your organization and start new thesis runs. Every value comes back with its source and the time it was fetched.

Endpointhttps://askatria.ai/mcp

Quickstart

Pick your client and run the line. The client opens a browser so you can sign in, or create an account, and approve access. There is no key to paste, and the free plan needs no card.

npx add-mcp https://askatria.ai/mcp

Detects the agents on your machine, such as Claude Code, Cursor, VS Code, Codex and Gemini CLI, and adds Atria to each. Your client opens a browser to sign in and approve; the free plan needs no card.

For any other MCP client, add the server to its configuration file:

MCP configuration

{
  "mcpServers": {
    "atria": {
      "type": "http",
      "url": "https://askatria.ai/mcp"
    }
  }
}

Then ask your agent something about a place, for example: “Who owns 4405 Michigan Ave Rd NE in Cleveland, Tennessee, and how much of it is in the floodplain?”

Authentication

OAuth is the default for interactive clients. Atria supports dynamic client registration, so a client that speaks MCP authorization registers itself, opens the sign-in page and keeps its own tokens. The metadata is at /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource.

API keys are for servers, scripts and clients without OAuth. Create one under Scout, then Agents in your dashboard and send it as a bearer token. Keys start with atria_sk_ and are shown once.

MCP configuration with an API key

{
  "mcpServers": {
    "atria": {
      "type": "http",
      "url": "https://askatria.ai/mcp",
      "headers": { "Authorization": "Bearer atria_sk_..." }
    }
  }
}

Keys carry scopes: lookup, screen, search (which also covers atria_result), coverage and crawl. A call outside the key’s scopes is refused and costs nothing.

Server credentials use the OAuth client credentials grant, for services that should not hold a long-lived key. An owner creates one in the same place, chooses its scopes and receives a client ID and a client secret, which is shown once. Your server sends them to /api/oauth/token with grant_type=client_credentials, using HTTP Basic or the form body, and receives an access token that lasts one hour. There is no refresh token; request a new access token when the old one expires. A credential stops working when it is revoked or when the person who created it leaves the organization.

Request an access token

curl -s https://askatria.ai/api/oauth/token \
  -u "$ATRIA_CLIENT_ID:$ATRIA_CLIENT_SECRET" \
  -d grant_type=client_credentials

API keys and server credentials are for server-side use only. A request that carries either one and comes from a web browser, which Atria recognizes by its Origin header, is refused with a 403. Server-side clients such as Node’s fetch, curl and Python send no Origin and are unaffected. Browser-based MCP clients should connect with OAuth sign-in, whose access tokens are short-lived, tied to one person’s sign-in and accepted from any origin. Cross-origin responses from the MCP endpoint never allow credentials such as cookies, because authentication is always a bearer token in the Authorization header.

Calling over HTTP

The server speaks MCP over streamable HTTP and is stateless: every request is a JSON-RPC message POSTed to the endpoint. MCP clients handle this for you; without one, list the tools and call them directly.

List the tools

curl -s https://askatria.ai/mcp \
  -H "Authorization: Bearer $ATRIA_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call a tool

curl -s https://askatria.ai/mcp \
  -H "Authorization: Bearer $ATRIA_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "atria_lookup",
      "arguments": { "address": "4405 Michigan Ave Rd NE, Cleveland, TN" }
    }
  }'

GET /mcp/info returns the server’s name, version and sign-in details without authentication.

Responses

Every value is wrapped in an envelope so an agent can cite it and can tell a real gap from a source that did not answer:

  • ok: the value, with source (name and URL) and fetched_at.
  • partial: a module that reads several sources answered from some of them. The fields fed by the sources named in failed_parts are null, which says nothing about the site; a retry may fill them.
  • absent: the source answered and has nothing at this location, with a reason.
  • failed: the source did not answer. This says nothing about the site; retry later or check another source.
  • pending: Atria is fetching this at no charge, either the county’s GIS sources because it had none, or a zoning district’s rules from its ordinance. The fetch object carries the job id and an estimate; poll atria_job_status or re-run the call later.

An ok envelope

{
  "status": "ok",
  "value": {
    "centroidZone": "X",
    "sfhaPercent": 7.2,
    "zones": [
      { "zone": "AE", "subtype": null, "sfha": true, "acres": 0.9, "percent": 7.2 }
    ]
  },
  "source": { "name": "floodZone", "url": "https://hazards.example.gov/..." },
  "fetched_at": "2026-10-01T00:00:00.000Z"
}

The server instructs agents never to fill an absent, failed or pending value, or a null field of a partial one, in from general knowledge. Modules that come back failed or pending are not charged; a partial module is charged like an ok one.

Tools

Each tool is listed with what it does and what it costs. Its arguments come back from tools/list. The full module and field reference is available after signing in, and a connected agent reads it through atria_catalog.

atria_lookup

100 creditsscope lookupread-only

Parcel lookup

Resolves an address, a coordinate or an assessor parcel number to the county parcel record: owner, acreage, zoning, land use, values and outline.

Example arguments

{
  "address": "4405 Michigan Ave Rd NE, Cleveland, TN"
}

Pass one of address, lat and lng together, or apn with county and state.

atria_screen

Credits: 10 national, 25 county GIS, 400 at mostscope screenread-only

Site diligence screen

Screens a point or parcel for power, gas, water, flood, zoning rules, terrain, hazards and environmental records, each value with its source.

atria_screen_batch

The atria_screen price per pointscope screenread-only

Batch diligence screen

Runs the same screen over up to 25 points or addresses in one call; points that fail are not charged.

atria_ask

Credits: 50 plus the modules it runsscope screenread-only

Ask about a site

Answers a plain-language question about a US location, with a citation on every claim.

Example arguments

{
  "lat": 42,
  "lng": -93.6,
  "question": "Who is the electric utility and how far is the nearest high-voltage line?"
}

atria_zoning_standards

Credits: scope screenread-only

Zoning standards

Returns the zoning that governs a parcel, its district, and the district's permitted uses and development standards, each with the ordinance section it comes from.

atria_permit_path

Credits: scope screenread-only

Permit path

Returns how a project gets approved where a parcel sits: the governing body, approval paths with steps, fees and timelines, the hearing calendar and the government offices to contact, each from published sources.

atria_quote

Freescope coverage, lookup, screen or searchread-only

Price a call (free)

Prices a lookup, screen, batch or question without running it, and says whether the organization's credits cover it.

atria_catalog

Freescope coverage, lookup, screen or searchread-only

Module catalog (free)

Gives a connected agent the module reference: what each module returns, its fields and units, and what it costs.

atria_proximity

Credits: 10, plus 1 per driving route; a labor shed is 50scope screenread-only

Drive-time proximity

Measures driving times and distances between places, finds the nearest facilities of a kind, and describes a labor shed.

Example arguments

{
  "mode": "nearest",
  "origin": "35.194,-84.8118",
  "set": "substations",
  "n": 3,
  "min_kv": 161
}

The three nearest substations of 161 kV or more, ranked by drive time.

atria_result

20 creditsscope searchread-only

Crawled parcel record

Returns one crawled parcel with its record, its thesis score and reasons, and its screen when the crawl ran one.

atria_coverage

Freescope coverageread-only

County coverage (free)

Reports what Atria can read for a county, so an agent knows before relying on county records.

atria_job_status

Freescope coverage, lookup or screenread-only

Coverage fetch status (free)

Reports the progress of a background fetch Atria started for a county or a zoning district.

atria_crawl_start

250,000 creditsscope crawlwrites, confirm first

Start a thesis crawl

Starts a thesis-driven crawl over a county or a drawn polygon. A person approves it before it runs unless the organization has turned approval off.

atria_crawl_status

Freescope crawlread-only

Crawl status (free)

Reports the progress of a crawl, or of one still waiting for approval.

Credits and plans

Calls are priced in credits; 1 credit is $0.001. Credits belong to your organization and reset on the first of each month (UTC). A call that would exceed what is left is refused and costs nothing. Call atria_quote, which is free, for the price of a screen, batch or question and whether your balance covers it.

Free

$0

5,000 credits a month

Agents only. About 50 lookups or a dozen full screens a month; no card needed.

Builder

$49 a month

75,000 credits a month

Agents and the API, with overage at $1 per 1,000 credits up to a cap you set.

Team

$399 a month

600,000 credits a month

Adds Scout (thesis crawls, chat, data rooms, pipeline, outreach) on the same balance; overage at $0.80 per 1,000.

Enterprise

Custom

Annual agreement

Scout seats across your organization, bulk exports, support terms and the advisory team.

Manage your plan in the dashboard.

Errors and limits

  • 401 with a WWW-Authenticate header: no valid token or key. OAuth clients use the header to start sign-in.
  • 403 for an API key or server credential sent from a web browser. Keep them on a server, or connect the browser client with OAuth sign-in.
  • Insufficient credits: the call would exceed your organization’s remaining credits. Nothing is charged; credits reset on the first of the month, or raise your plan.
  • Rate limits apply per key per minute. A limited call is refused and costs nothing.
  • Tool errors come back as MCP tool results with isError set and a message the agent can read.
Atria API