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/mcpDetects 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, withsource(name and URL) andfetched_at.partial: a module that reads several sources answered from some of them. The fields fed by the sources named infailed_partsare null, which says nothing about the site; a retry may fill them.absent: the source answered and has nothing at this location, with areason.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. Thefetchobject carries the job id and an estimate; pollatria_job_statusor 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_search
Credits: 20 per pagescope searchread-only
Search crawled parcels
Searches parcels Atria has already crawled and scored for the organization, by area, acreage, score, owner, zoning or land use.
Example arguments
{
"state": "TN",
"min_acres": 20,
"min_score": 80
}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-Authenticateheader: 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
isErrorset and a message the agent can read.