PortlandMaps (Unofficial) is an MCP server with 11 tools an agent can call, among them convert_geometry, get_assessor_data, get_permit_data. It answers at https://portlandmaps-mcp.vercel.app/mcp/v2 over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 11 September 2026; the last check, on 19 October 2026, succeeded.
Unofficial MCP server for the public PortlandMaps property/permit/zoning API. Not city-affiliated.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
convert_geometry | 1:1 wrapper for /api/geometry/. Convert geometry between ESRI, WKT, GeoJSON, GPolyline, and EncodedGPolyline. Inputs: from, to, geometry, srid |
get_assessor_data | 1:1 wrapper for /api/assessor/. Search assessor records by address, property IDs, geometry, or assessor filters. Inputs: address, city, county, propertyId, stateId, parentStateId |
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 Inputs: ivrNumber, applicationNumber, address, propertyId, stateId, searchTypeId |
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-busine Inputs: detailType, detailId, sections, geometry, propertyId, fileType |
list_detail_types | Return the detail_type values accepted by get_portlandmaps_detail and the identifier each expects. |
lookup_agol | 1:1 wrapper for /api/agol/. Retrieve City of Portland ArcGIS Online metadata, webmaps, locators, and portal info. Inputs: type, id |
query_intersects | 1:1 wrapper for /api/intersects/. Spatial intersection against named city layers such as row, taxlot, describe, street, and waterbody. Inputs: geometry, include, buffer, detail |
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 Inputs: detailType, detailId, rings, title, includeContext, basemap |
search_landuse_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 resi Inputs: searchTypeId, neighborhood, neighborhoodDistrict, historicDistrict, conservationDistrict, planDistrict |
search_sewer_records | 1:1 wrapper for /api/sewer/. Search sewer assets, as-builts, and easements. Inputs: type, unitId, compkey, workOrderNumber, tvInspectionNumber, serviceRequestNumber |
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 resi Inputs: query, city, county, jurisdiction, unit, units |
Every block below points at https://portlandmaps-mcp.vercel.app/mcp/v2. Pick your client and copy.
claude mcp add --transport http portlandmaps-unofficial https://portlandmaps-mcp.vercel.app/mcp/v2
{
"mcpServers": {
"portlandmaps-unofficial": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://portlandmaps-mcp.vercel.app/mcp/v2"]
}
}
}{
"mcpServers": {
"portlandmaps-unofficial": {
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"servers": {
"portlandmaps-unofficial": {
"type": "http",
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"context_servers": {
"portlandmaps-unofficial": {
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"mcpServers": {
"portlandmaps-unofficial": {
"serverUrl": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"mcpServers": {
"portlandmaps-unofficial": {
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}name: PortlandMaps (Unofficial)
version: 0.0.1
schema: v1
mcpServers:
- name: PortlandMaps (Unofficial)
type: streamable-http
url: https://portlandmaps-mcp.vercel.app/mcp/v2{
"mcpServers": {
"portlandmaps-unofficial": {
"httpUrl": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"mcpServers": {
"portlandmaps-unofficial": {
"type": "http",
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}{
"mcpServers": {
"portlandmaps-unofficial": {
"url": "https://portlandmaps-mcp.vercel.app/mcp/v2"
}
}
}goose://extension?url=https%3A%2F%2Fportlandmaps-mcp.vercel.app%2Fmcp%2Fv2&type=streamable_http&id=portlandmaps-unofficial&name=PortlandMaps%20%28Unofficial%29
It answered our last check on 19 October 2026 in 206 ms. Over 6 checks since 11 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
11, as returned by the server's own tools/list on 12 September 2026: convert_geometry, get_assessor_data, get_permit_data, get_portlandmaps_detail, list_detail_types, lookup_agol, query_intersects, render_parcel_shape, and 3 more.
It answered our last check on 19 October 2026 in 206 ms. Over 6 checks since 11 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://portlandmaps-mcp.vercel.app/mcp/v2. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: io.github.gptnowllc. Endpoint host: portlandmaps-mcp.vercel.app. ARD identifier: urn:air:io.github.gptnowllc:mcp:portlandmaps-mcp.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.