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
| Mode | Description | URL |
|---|---|---|
| Cloudflare Worker | OAuth-enabled edge deployment (primary) | https://mcp-jppr.alianzacap.com |
| STDIO | Claude Desktop DXT extension | Local |
| DXT Extension | Packaged Claude Desktop installation | .dxt file |
Available Tools
search_properties
Search for properties using various criteria.
Parameters:
| Parameter | Type | Description |
|---|---|---|
address | string | Property address to search |
parcelId | string | Property parcel ID |
municipality | string | Municipality name (e.g., "San Juan") |
latitude | number | Latitude coordinate |
longitude | number | Longitude coordinate |
limit | number | Max results (default: 10) |
Example:
{
"address": "Calle Fortaleza, San Juan",
"limit": 5
}
get_property_details
Get detailed information about a specific property.
Parameters:
| Parameter | Type | Description |
|---|---|---|
parcelId | string | Property 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:
| Parameter | Type | Description |
|---|---|---|
minLatitude | number | Min latitude |
minLongitude | number | Min longitude |
maxLatitude | number | Max latitude |
maxLongitude | number | Max longitude |
limit | number | Max properties (default: 20) |
convert_coordinates
Convert coordinates between different coordinate systems.
Parameters:
| Parameter | Type | Description |
|---|---|---|
latitude | number | Latitude to convert |
longitude | number | Longitude to convert |
fromSystem | string | Source system (WGS84, NAD83, StatePlane) |
toSystem | string | Target 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
| Endpoint | Transport | Auth | Purpose |
|---|---|---|---|
/health | - | None | Health check |
/mcp | Streamable HTTP | OAuth | Consumer apps |
/sse | SSE (legacy) | OAuth | Legacy clients |
/mcp-m2m | Streamable HTTP | JWT Bearer | Server-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
- MIPR: Mapa Interactivo de Puerto Rico
- Junta de Planificacion de Puerto Rico: Official planning and zoning data
Related Documentation
- MCP Framework
- Auth0 Configuration
- Source:
mcp-jppr/