Āina Atlas MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Āina Atlas MCPCheck flood and lava risks at 500 Ala Moana Blvd."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Āina Atlas MCP
An MCP server that exposes my live Āina Atlas Hawaii property pipeline as Claude tools. Ask Claude about any Hawaii address or TMK and it can pull the real parcel record — zoning, lava/tsunami/FEMA flood hazards, ahupuaʻa context, ADU eligibility, AVM, tax-appeal window — and draft an AI property brief.
It wraps the real, publicly-callable /atlas/* endpoints on my "aina-atlas" data API (no key required for lookups), and composes the brief locally via the Anthropic API. Every field returned is whatever the live API returns — nothing is fabricated.
Honest scope line: this wraps my live Āina Atlas property pipeline. The lookup tools hit the production data API directly. The brief is drafted by Claude from that real parcel data, reusing the same Hawaii-property-analyst prompt as my web product.
Tools
Tool | Input | What it does | Backing |
|
| Resolve a Hawaii address (or TMK) to a Tax Map Key |
|
|
| Full structured parcel record |
|
|
| Parcel lookup → Claude-drafted brief (summary, snapshot, watch-outs, actions, deep links) |
|
|
| Two parcels side by side + a key-field diff | Two |
lookup_parcel, resolve_address, and compare_parcels work with no API key. generate_property_brief needs ANTHROPIC_API_KEY.
Related MCP server: Dilix MCP
What the parcel record includes
The lookup_parcel response is the live free-tier Āina Atlas JSON, including:
tmk, island, address, acres, owner, land_value, building_value, has_homeowner_exemption, zoning (code, land_use), hazards (lava, tsunami_evac, fema_flood), hawaiian_context (ahupuaa, moku, mokupuni, gis_acres), slope (elevation, slope %, classification, aspect, solar exposure), native_plants, tax_appeal (county appeal window + deadline), nearby_places, county_links, centroid, geometry (rings), adu (eligibility, max unit size, notes), ocean_view, shoreline, soil, rainfall, conservation, wildfire, property_tax, zoning_rules, avm, and deed_link.
Install
cd aina-atlas-mcp
npm install
npm run build # compiles src/ -> build/index.js
cp .env.example .env # then fill in ANTHROPIC_API_KEY for the brief toolQuick smoke test from the shell (lists the tools over stdio — no key needed):
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"cli","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| node build/index.jsAdd to Claude Desktop
Edit claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"aina-atlas": {
"command": "node",
"args": ["/Users/johnthomasair/code/aina-atlas-mcp/build/index.js"],
"env": {
"AINA_BASE_URL": "https://addressapi.portofcams.com",
"ANTHROPIC_API_KEY": "sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}Use an absolute path to build/index.js. Restart Claude Desktop; the aina-atlas tools appear in the tools menu. Leave ANTHROPIC_API_KEY out if you only want the lookup tools (the brief tool will return a clear "needs ANTHROPIC_API_KEY" error).
Demo prompts
"What are the flood and lava-zone risks at 500 Ala Moana Blvd, Honolulu?" — calls
lookup_parcel, readshazards.fema_flood/hazards.lava."Give me an Āina Atlas property brief for TMK 121010042." — calls
generate_property_brief."Compare TMK 121010042 and 121010015 — zoning, value, and ADU eligibility." — calls
compare_parcels."What ahupuaʻa is this parcel in, and is it ADU-eligible?" —
lookup_parcel, readshawaiian_context.ahupuaaandadu.
Configuration
Env var | Required | Default | Purpose |
| no |
| Āina Atlas data API base |
| for brief only | — | Drafts the property brief |
| no |
| Model for the brief |
| no | — | Optional paid-tier bearer (unlocks paid surfaces; not needed for the lookup tools) |
Architecture notes / TODO
Why the brief is composed here instead of wrapping the server's brief endpoint: the data API exposes the public brief route
POST /api/bluewave/property-brief, but it is broken in production — its internal parcel lookup calls/api/parceland/api/search, while the live data API only serves/atlas/parceland/atlas/search, so every request returns"parcel not found"(verified live). This server therefore wraps the working/atlas/parceldata and drafts the brief itself, reusing that endpoint's real system prompt. TODO (server-side, not this repo): a one-line path fix inrouters/bluewave_property_brief.py(/api/parcel→/atlas/parcel,/api/search→/atlas/search) would restore the upstream endpoint; this MCP could then optionally call it directly.Paid report PDF (
GET /atlas/report/{tmk}) and the insurance-brief preview (/api/insurebrief/*) are intentionally not exposed as tools: the report is a binary PDF behind a paywall (402), and the insurebrief proxy currently 404s against the live data-API build (its/atlas/insurebrief/*routes aren't deployed yet — verified). Both are TODOs pending real, callable backing.
License
MIT
Work with me
I'm John Thomas — I run BlueWave Projects, an AI build studio. I ship production MCP servers, Claude agents, and LLM-in-the-loop pipelines — usually in days, not months — over real, often regulated data (FAA Part 135, maritime AIS, Hawaii property records). USCG Master Captain; deep in aviation, maritime, and construction operations.
Want Claude wired into your own data or workflow? john@binnacleai.com · https://bluewaveprojects.com
Available Tools
3 toolscompare_parcelsARead-only
Compare two Hawaii parcels side by side. Each input may be an address or a TMK. Returns both full parcel records plus a compact diff of key fields (acres, zoning, values, hazards, ADU).
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First parcel: an address or TMK. | |
| b | Yes | Second parcel: an address or TMK. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, consistent with the description. The description adds valuable behavioral context: it returns both full parcel records and a compact diff of specific fields (acres, zoning, values, hazards, ADU), going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (2 parameters, no output schema), the description is complete: it covers input format, output type, and key diff fields. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning by stating each input may be an address or a TMK, clarifying the parameter flexibility beyond just 'string'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares two Hawaii parcels, specifying input types (address or TMK) and output (full records plus diff of key fields). It distinguishes from siblings like lookup_parcel and resolve_address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a side-by-side comparison is needed, but does not explicitly contrast with siblings or state when not to use. Still clear enough for an AI agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_parcelARead-only
Look up the full Āina Atlas parcel record for a Hawaii property by address or TMK. Returns the real structured JSON: TMK, island, acres, owner, zoning, land/building value, hazards (lava zone, tsunami evacuation, FEMA flood), Hawaiian context (ahupuaʻa / moku / mokupuni), slope & solar exposure, native plants, ADU eligibility, AVM, tax-appeal window, and deep links. This is the core lookup and needs no API key.
| Name | Required | Description | Default |
|---|---|---|---|
| tmk | No | TMK parcel id (digits, dashes ok), e.g. 121010042. Skips address resolution. | |
| address | No | Hawaii address to resolve, e.g. '500 Ala Moana Blvd, Honolulu'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description adds valuable behavioral context such as 'needs no API key' and lists extensive return data. It does not contradict annotations and provides transparency beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single comprehensive paragraph that front-loads the core purpose. While it is detailed, every sentence adds value. It could be more structured, but it is well-organized and not overly verbose given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully covers the return values and context (Hawaii property lookup, hazards, Hawaiian geography, etc.). It is complete and leaves no significant gaps for an agent to understand what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description mentions 'by address or TMK' but does not add significant new semantic detail beyond the schema descriptions for 'tmk' and 'address'. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it looks up a full Āina Atlas parcel record by address or TMK, listing numerous return fields. It distinguishes itself as the 'core lookup' from siblings like compare_parcels and resolve_address, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for single parcel lookups but does not explicitly state when to use alternatives. However, it provides clear context that this is the primary lookup tool, which is sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_addressARead-only
Resolve a Hawaii street address (or a TMK) to a Tax Map Key (TMK) parcel id. Geocodes the address (HI-bounded Nominatim) then finds the parcel under it. Use this first when you only have an address; feed the TMK into lookup_parcel.
| Name | Required | Description | Default |
|---|---|---|---|
| tmk | No | A TMK (digits, dashes ok). If given, address is ignored. | |
| address | No | Free-text Hawaii address, e.g. '500 Ala Moana Blvd, Honolulu'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true. Description adds geocoding process (HI-bounded Nominatim) and precedence rule (if TMK given, address ignored). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. Front-loaded with purpose, then process, then workflow advice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a two-param optional tool. Explains process, workflow with sibling, and covers both usage paths. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining TMK overrides address and that address is free-text for Hawaii. Baseline 3, extra context raises to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'resolve' + specific resource 'address to TMK parcel id'. Distinguishes from siblings by stating it is for initial address lookup before feeding TMK into lookup_parcel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this first when you only have an address; feed the TMK into lookup_parcel.' Provides clear context and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
compare_parcels - First observed
lookup_parcel - First observed
resolve_address
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: one resolves addresses to TMKs, one performs full parcel lookups, and one compares two parcels. There is no overlap in functionality.
All tool names follow a consistent verb_noun pattern in snake_case: resolve_address, lookup_parcel, compare_parcels. The verbs and nouns are clear and uniform.
With 3 tools, the server is well-scoped for its intended purpose of Hawaii parcel lookup and comparison. Each tool is essential and contributes to the core workflow without unnecessary redundancy.
The tool set covers the primary use cases: resolving addresses to TMKs, retrieving full parcel records, and comparing parcels. Minor gaps like batch operations or advanced search are absent but not critical for the stated domain.
Maintenance
Related MCP Connectors
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Unofficial MCP server for the public PortlandMaps property/permit/zoning API. Not city-affiliated.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
Related MCP Servers
- AlicenseAqualityCmaintenanceBuilt an MCP server that connects Claude Desktop, Cursor, or any MCP client to Northeast Deal Intel's CRE database. 8 tools: • search_deals — filter 14K+ active listings by state, type, score, cap rate • search_comps — 100K+ closed transactions for comp benchmarking • score_deal — submit any property for AI scoring against real comp data • find_1031_candidates — exchange-ready deal filter (price8MIT
- AlicenseAqualityDmaintenanceOpen-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.125 npmMIT
- AlicenseNot gradedqualityBmaintenanceUK property data MCP server for AI hosts (Claude, ChatGPT). Wraps Land Registry, Rightmove, EPC, rental yields, stamp duty, and Companies House into 13 tools.2MIT
- AlicenseAqualityAmaintenanceMCP server for NYC real estate due diligence. Lets Claude query 22+ NYC public-record databases — DOB/HPD/ECB violations, ACRIS deeds, DOF sales, 311 complaints, FDNY incidents, NYPD complaints, marshal evictions, PLUTO, rent stabilization — in plain English.187MIT