PortlandMaps (Unofficial)

io.github.GPTNowLLCPublished by GitHub account GPTNowLLCv0.2.5Updated Oct 24, 2026

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

VerifiedStreamable HTTPWeb executableLocation & LifestyleData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Unofficial MCP server for PortlandMaps, letting an assistant look up Portland addresses, property, permit, zoning and land-use records and render parcel shapes.

What you can do
Search PortlandMaps autocomplete for addresses, intersections, landmarks or IDs, and list the detail types a detail lookup accepts, then fetch detail records by type and ID with chosen sections. Look up assessor records by address, property IDs, geometry or filters, and search building, trade and enforcement permit records. Search land use review cases, including Historic Resource Review and Tree Review, and search sewer assets, as-builts and easements. Run spatial intersection queries against named city layers such as row, taxlot, street and waterbody, and convert geometry between ESRI, WKT, GeoJSON, GPolyline and EncodedGPolyline. Retrieve City of Portland ArcGIS Online metadata, webmaps,
When to use it
Useful when answering questions about a Portland property, zoning, permits, land use cases or sewer records, or when you need to geocode an address and check which city layers it intersects. The parcel renderer helps when a visual lot outline with footprint and setbacks is more useful than raw data.
Requirements
Runs as a remote endpoint or as a local npm package over stdio. The PortlandMaps API key is supplied through the PORTLANDMAPS_API_KEY environment variable and is required for the API tools; optional settings name the query parameter used for the key and the in-memory cache TTL in milliseconds. Network access to the PortlandMaps API is needed.
Before you install
The server is unofficial and not city-affiliated, so results should be checked against official sources for decisions. It requires an API key in PORTLANDMAPS_API_KEY, which is sent as a query parameter by default, so it may appear in URLs and logs. Tools are read-only lookups, but queries and addresses are sent to the PortlandMaps API and cached in memory for an hour by default.

Installation

In SourceWeft

  1. Open PortlandMaps (Unofficial) in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.GPTNowLLC%2Fportlandmaps-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "portlandmaps-unofficial": {
      "type": "http",
      "url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
    }
  }
}

README

This repository has no README.

Tools

11

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.

ParametersagscitypageunitcachecountexactqueryrequiredunitsaltIdscountystatus+9 more

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.

ParametersfileIddetailIdrequiredfileTypegeometrysectionscacheCleardetailTyperequiredpropertyIdextraParams

get_assessor_data

Get Assessor Data

1:1 wrapper for /api/assessor/. Search assessor records by address, property IDs, geometry, or assessor filters.

ParameterscitypagecachecountcountyaddressprimarystateIdzipCodedownloadgeometrysoldAfter+14 more

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.

ParameterspagecachecountcountydateToaddressstateIddateFromdateTypedownloadccbNumberivrNumber+9 more

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.

ParameterspagecachecountdateTodateFromdownloadivrNumbersortFieldsortOrderextraParamsneighborhoodplanDistrict+7 more

search_sewer_records

Search Sewer Records

1:1 wrapper for /api/sewer/. Search sewer assets, as-builts, and easements.

ParametersbookdatepagetyperequiredcountunitIdcompkeyjobNamepageNumcommentsdownloadlocation+12 more

query_intersects

Query Intersects

1:1 wrapper for /api/intersects/. Spatial intersection against named city layers such as row, taxlot, describe, street, and waterbody.

Parametersbufferdetailincludegeometryrequired

convert_geometry

Convert Geometry

1:1 wrapper for /api/geometry/. Convert geometry between ESRI, WKT, GeoJSON, GPolyline, and EncodedGPolyline.

Parameterstorequiredfromrequiredsridgeometryrequired

lookup_agol

Lookup ArcGIS Online Metadata

1:1 wrapper for /api/agol/. Retrieve City of Portland ArcGIS Online metadata, webmaps, locators, and portal info.

Parametersidtyperequired

list_detail_types

List Detail Types

Return the detail_type values accepted by get_portlandmaps_detail and the identifier each expects.

Takes no parameters.

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.

ParametersringstitlebasemapdetailIddetailTypeincludeContext

Version history

1
  1. v0.2.5LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.