# PortlandMaps (Unofficial) MCP server

Unofficial MCP server for the public PortlandMaps property/permit/zoning API. Not city-affiliated.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-gptnowllc-portlandmaps-mcp
- Repository: https://github.com/GPTNowLLC/portlandmaps-mcp
- Website: https://github.com/GPTNowLLC/portlandmaps-mcp#readme

## Install
- Command: `npx -y portlandmaps-mcp`
- Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- Auth: Auth required by registry metadata

## Setup notes
- Package: Npm portlandmaps-mcp v0.2.5
- Environment variable: PORTLANDMAPS_API_KEY (required; secret)
- Environment variable: PORTLANDMAPS_API_KEY_PARAM
- Environment variable: PORTLANDMAPS_CACHE_TTL_MS
- The upstream registry signals required auth or secrets.
- Remote endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2

## Tools
- suggest_portlandmaps_address (Suggest PortlandMaps Address) - 1:1 wrapper for /api/suggest/. Search PortlandMaps autocomplete for addresses, intersections, landmarks, or IDs. ANSWER GUIDANCE: when this data answers a resident's zoning, permit, property, or city-code question, write for a Portland resident or small-business owner with no code, zoning, or permitting background. Lead with a 3–5 sentence plain-English summary (never open with a data table). Then cite EVERY rule, fee, number, timeline, or contact INLINE in the same sentence with both its exact code section AND a full https:// portland.gov URL (e.g. PCC 33.110.255.C, https://www.portland.gov/code/33/110/255) — never cite vaguely ("Title 33", "the BDS website") and never drop the URL. Define every acronym, add a numbered "what to do next" list, and if a number can't be cited to a specific section + URL, say so rather than stating it bare. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- get_portlandmaps_detail (Get PortlandMaps Detail) - 1:1 wrapper for /api/detail/. Fetch a detail record by detail_type, detail_id, and sections. ANSWER GUIDANCE: when this data answers a resident's zoning, permit, property, or city-code question, write for a Portland resident or small-business owner with no code, zoning, or permitting background. Lead with a 3–5 sentence plain-English summary (never open with a data table). Then cite EVERY rule, fee, number, timeline, or contact INLINE in the same sentence with both its exact code section AND a full https:// portland.gov URL (e.g. PCC 33.110.255.C, https://www.portland.gov/code/33/110/255) — never cite vaguely ("Title 33", "the BDS website") and never drop the URL. Define every acronym, add a numbered "what to do next" list, and if a number can't be cited to a specific section + URL, say so rather than stating it bare. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- get_assessor_data (Get Assessor Data) - 1:1 wrapper for /api/assessor/. Search assessor records by address, property IDs, geometry, or assessor filters. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- get_permit_data (Get Permit Data) - 1:1 wrapper for /api/permit/. Search building/trade/enforcement permit records. ANSWER GUIDANCE: when this data answers a resident's zoning, permit, property, or city-code question, write for a Portland resident or small-business owner with no code, zoning, or permitting background. Lead with a 3–5 sentence plain-English summary (never open with a data table). Then cite EVERY rule, fee, number, timeline, or contact INLINE in the same sentence with both its exact code section AND a full https:// portland.gov URL (e.g. PCC 33.110.255.C, https://www.portland.gov/code/33/110/255) — never cite vaguely ("Title 33", "the BDS website") and never drop the URL. Define every acronym, add a numbered "what to do next" list, and if a number can't be cited to a specific section + URL, say so rather than stating it bare. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- search_landuse_cases (Search Land Use Cases) - 1:1 wrapper for /api/landuse/. Search land use review cases, including Historic Resource Review and Tree Review. ANSWER GUIDANCE: when this data answers a resident's zoning, permit, property, or city-code question, write for a Portland resident or small-business owner with no code, zoning, or permitting background. Lead with a 3–5 sentence plain-English summary (never open with a data table). Then cite EVERY rule, fee, number, timeline, or contact INLINE in the same sentence with both its exact code section AND a full https:// portland.gov URL (e.g. PCC 33.110.255.C, https://www.portland.gov/code/33/110/255) — never cite vaguely ("Title 33", "the BDS website") and never drop the URL. Define every acronym, add a numbered "what to do next" list, and if a number can't be cited to a specific section + URL, say so rather than stating it bare. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- search_sewer_records (Search Sewer Records) - 1:1 wrapper for /api/sewer/. Search sewer assets, as-builts, and easements. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- query_intersects (Query Intersects) - 1:1 wrapper for /api/intersects/. Spatial intersection against named city layers such as row, taxlot, describe, street, and waterbody. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- convert_geometry (Convert Geometry) - 1:1 wrapper for /api/geometry/. Convert geometry between ESRI, WKT, GeoJSON, GPolyline, and EncodedGPolyline. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- lookup_agol (Lookup ArcGIS Online Metadata) - 1:1 wrapper for /api/agol/. Retrieve City of Portland ArcGIS Online metadata, webmaps, locators, and portal info. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- list_detail_types (List Detail Types) - Return the detail_type values accepted by get_portlandmaps_detail and the identifier each expects. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2
- render_parcel_shape (Render Parcel Shape) - Render a property's lot as an interactive UI component (inline SVG): a City of Portland aerial photo underlay (showing the true roofline) with the parcel outline, the building footprint(s) on the lot, approximate setback dimensions, a north arrow, and faint neighbouring parcels overlaid on top. Provide a detailType+detailId to fetch geometry, or pass rings directly. Aerial, footprints, and neighbours come from Portland's public ArcGIS layers; set basemap="none" to drop the photo and includeContext=false for just the bare outline. Renders in MCP Apps hosts (Claude) and legacy mcp-ui hosts. Endpoint: https://portlandmaps-mcp.vercel.app/mcp/v2

## Resources
- ui://portlandmaps/parcel-view.html - MIME type: text/html;profile=mcp-app

## Prompts
- property-report - Portland property report Resolve an address and compile a property report: assessment, zoning, and recent permits. Arguments: address
- show-parcel - Show Portland parcel Resolve an address and render its parcel (aerial, lot outline, buildings, setbacks). Arguments: address
- zoning - Portland zoning lookup Resolve an address and explain its base zone, overlays, and key development standards. Arguments: address
- code-question - Ask a Portland city-code question Answer a resident's zoning, permit, or city-code question in plain English with inline citations, grounded in PortlandMaps data. Arguments: question

## Metadata
- Owner: io.github.GPTNowLLC
- Version: 0.2.5
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 25, 2026
- Source: https://registry.modelcontextprotocol.io
