Skip to main content

MCP JPPR

Model Context Protocol (MCP) server for accessing Puerto Rico property and GIS data through the Junta de Planificacion de Puerto Rico (JPPR) APIs.

Overview

This MCP server provides tools to interact with Puerto Rico's MIPR (Mapa Interactivo de Puerto Rico) system, allowing you to:

  • Search for properties by address, parcel ID, municipality, or coordinates
  • Get detailed property information including ownership, assessed values, and zoning
  • List all Puerto Rico municipalities
  • Find properties within geographic areas (bounding boxes)
  • Convert between coordinate systems used in Puerto Rico

Deployment Options

ModeDescriptionURL
Cloudflare WorkerOAuth-enabled edge deployment (primary)https://mcp-jppr.alianzacap.com
STDIOClaude Desktop DXT extensionLocal
DXT ExtensionPackaged Claude Desktop installation.dxt file

Available Tools

search_properties

Search for properties using various criteria.

Parameters:

ParameterTypeDescription
addressstringProperty address to search
parcelIdstringProperty parcel ID
municipalitystringMunicipality name (e.g., "San Juan")
latitudenumberLatitude coordinate
longitudenumberLongitude coordinate
limitnumberMax results (default: 10)

Example:

{
"address": "Calle Fortaleza, San Juan",
"limit": 5
}

get_property_details

Get detailed information about a specific property.

Parameters:

ParameterTypeDescription
parcelIdstringProperty parcel ID (e.g., "091-065-487-77")

Returns: Ownership, assessed values, zoning, tax information.

get_municipalities

Get a list of all municipalities in Puerto Rico.

Parameters: None

get_properties_in_area

Find properties within a geographic bounding box.

Parameters:

ParameterTypeDescription
minLatitudenumberMin latitude
minLongitudenumberMin longitude
maxLatitudenumberMax latitude
maxLongitudenumberMax longitude
limitnumberMax properties (default: 20)

convert_coordinates

Convert coordinates between different coordinate systems.

Parameters:

ParameterTypeDescription
latitudenumberLatitude to convert
longitudenumberLongitude to convert
fromSystemstringSource system (WGS84, NAD83, StatePlane)
toSystemstringTarget system

Authentication

OAuth (Consumer Apps)

Configure Claude Desktop:

{
"mcpServers": {
"jppr": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp-jppr.alianzacap.com/mcp"
]
}
}
}

M2M (Server-to-Server)

# 1. Get access token from Auth0
TOKEN=$(curl -s -X POST https://dev-alianzacap.us.auth0.com/oauth/token \
-H "Content-Type: application/json" \
-d '{
"client_id": "YOUR_M2M_CLIENT_ID",
"client_secret": "YOUR_M2M_CLIENT_SECRET",
"audience": "urn:mcp-jppr",
"grant_type": "client_credentials"
}' | jq -r '.access_token')

# 2. Call MCP endpoint
curl -X POST https://mcp-jppr.alianzacap.com/mcp-m2m \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_properties",
"arguments": { "query": "San Juan" }
},
"id": 1
}'

Endpoints

EndpointTransportAuthPurpose
/health-NoneHealth check
/mcpStreamable HTTPOAuthConsumer apps
/sseSSE (legacy)OAuthLegacy clients
/mcp-m2mStreamable HTTPJWT BearerServer-to-server
/authorize--OAuth flow
/callback--OAuth callback

Deployment

Automatic: Push to main triggers GitHub Actions deployment.

Manual:

# Sync secrets from AWS to Cloudflare
./scripts/sync-secrets-from-aws.sh

# Build and deploy
npm run build
npx wrangler deploy

Data Sources