Skip to main content
Glama
portofcams

Āina Atlas MCP

by portofcams

Ā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_address

address or tmk

Resolve a Hawaii address (or TMK) to a Tax Map Key

GET /atlas/geocode + GET /atlas/parcels/bbox + GET /atlas/search (public)

lookup_parcel

address or tmk

Full structured parcel record

GET /atlas/search + GET /atlas/parcel/{tmk} (public, no key)

generate_property_brief

address or tmk

Parcel lookup → Claude-drafted brief (summary, snapshot, watch-outs, actions, deep links)

lookup_parcel data → Anthropic Messages API

compare_parcels

a, b (each an address or TMK)

Two parcels side by side + a key-field diff

Two lookup_parcel calls

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 tool

Quick 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.js

Add to Claude Desktop

Edit claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %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, reads hazards.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, reads hawaiian_context.ahupuaa and adu.

Configuration

Env var

Required

Default

Purpose

AINA_BASE_URL

no

https://addressapi.portofcams.com

Āina Atlas data API base

ANTHROPIC_API_KEY

for brief only

Drafts the property brief

AINA_BRIEF_MODEL

no

claude-opus-4-8

Model for the brief

AINA_API_KEY

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/parcel and /api/search, while the live data API only serves /atlas/parcel and /atlas/search, so every request returns "parcel not found" (verified live). This server therefore wraps the working /atlas/parcel data and drafts the brief itself, reusing that endpoint's real system prompt. TODO (server-side, not this repo): a one-line path fix in routers/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 tools
compare_parcelsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
aYesFirst parcel: an address or TMK.
bYesSecond parcel: an address or TMK.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_parcelA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tmkNoTMK parcel id (digits, dashes ok), e.g. 121010042. Skips address resolution.
addressNoHawaii address to resolve, e.g. '500 Ala Moana Blvd, Honolulu'.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_addressA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tmkNoA TMK (digits, dashes ok). If given, address is ignored.
addressNoFree-text Hawaii address, e.g. '500 Ala Moana Blvd, Honolulu'.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 3 tool updatesv0.1.0
    • First observedcompare_parcels
    • First observedlookup_parcel
    • First observedresolve_address

TDQS

A4.5/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Built 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 (price
    8
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Open-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.
    12
    5 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP 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.
    18
    7
    MIT