Planning MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Planning MCP ServerWhat's the zoning and land size for 1 Spring Street, Melbourne?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Planning MCP Server v2.0
Model Context Protocol (MCP) server for Australian Planning Property Reports - Cloudflare Workers Edition.
Features
š Global Edge Deployment - Runs on Cloudflare's 300+ edge locations
ā” High Performance - Parallel API requests and intelligent caching
š Comprehensive Data - Property details, zones, overlays, electorates, utilities, and land information
š Production Ready - Rate limiting, authentication, structured logging
š Real-time Progress - Progress updates during long-running operations
š HTTP-based MCP - Works with Claude, ChatGPT, and other AI assistants
Related MCP server: Dilix MCP
Quick Start
Prerequisites
Node.js 18+
Cloudflare Workers account
Wrangler CLI (
npm install -g wrangler)
Installation
# Clone the project
cd planning-mcp
# Install dependencies
npm install
# Login to Cloudflare
wrangler login
# Create KV namespace for caching
wrangler kv:namespace create "CACHE"
# Copy the ID and add to wrangler.toml
# Start development server
npm run devConfiguration
Update
wrangler.tomlwith your KV namespace ID(Optional) Set API key for authentication:
wrangler secret put API_KEY
Deployment
# Build the project
npm run build
# Deploy to Cloudflare Workers
npm run deployUsage
MCP Tool: vic_planning_property_report
Retrieves comprehensive Victorian planning property reports. (Additional state tools coming soon.)
Input:
{
"address": "1 Spring Street, Melbourne VIC 3000",
"includePdfBase64": false,
"includeZoneHtml": false,
"includeOverlayHtml": false
}Output:
{
"success": true,
"address": "1 SPRING STREET MELBOURNE VIC 3000",
"propertyPfi": "12345",
"propertyDetails": {
"address": "1 SPRING STREET MELBOURNE VIC 3000",
"councilName": "Melbourne City Council",
"landSize": 842,
"landSizeHectares": 0.0842,
"standardParcelIdentifier": "1\\PS123456",
"registeredAboriginalParty": "Bunurong Land Council",
...
},
"electorates": {
"federal": "Melbourne",
"legislativeAssembly": "Melbourne District",
"legislativeCouncil": "Southern Metropolitan Region"
},
"utilities": {
"powerDistributor": "AusNet Services",
"gas": "AusNet Services",
"melbourneWater": "Melbourne Water",
"melbourneWaterRetailer": "South East Water"
},
"zones": [...],
"overlays": [...]
}HTTP API
Health Check:
GET /healthMCP Endpoint:
POST /mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "vic_planning_property_report",
"arguments": {
"address": "1 Spring Street, Melbourne VIC 3000"
}
}
}Architecture
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Cloudflare Edge Network ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā Worker (HTTP MCP Endpoint) ā ā
ā ā - Hono.js Framework ā ā
ā ā - Rate Limiting ā ā
ā ā - Authentication ā ā
ā ā - CORS ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā Services Layer ā ā
ā ā - Address Resolution ā ā
ā ā - Property Data Fetching ā ā
ā ā - Progress Reporting ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā Workers KV (Caching) ā ā
ā ā - 60%+ Cache Hit Rate ā ā
ā ā - 24hr TTL for addresses ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāDevelopment
Project Structure
planning-mcp/
āāā src/
ā āāā index.ts # Main entry point
ā āāā types/ # TypeScript types
ā āāā services/ # Business logic
ā āāā middleware/ # HTTP middleware
ā āāā handlers/ # MCP handlers
ā āāā lib/ # Utilities
ā āāā schemas/ # Validation schemas
āāā test/ # Tests
āāā wrangler.toml # Cloudflare config
āāā tsconfig.json # TypeScript config
āāā package.json # DependenciesTesting
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Type check
npm run type-checkEnvironment Variables
Configure in wrangler.toml:
Variable | Description | Default |
| Rate limit per IP | 100 |
| Cache TTL in hours | 24 |
| Enable analytics | true |
| CORS origins | * |
Secrets (use wrangler secret put):
Secret | Description | Required |
| Bearer token for auth | No |
Performance
Latency: <5s P50, <8s P95
Cache Hit Rate: >60% after warmup
Throughput: 1000+ req/sec with auto-scaling
Cold Start: <100ms
Memory: <128MB per request
Security
ā Input validation with Zod
ā Rate limiting (100 req/min per IP)
ā Optional API key authentication
ā CORS configuration
ā No secrets in logs
Monitoring
Structured Logging
All requests are logged in JSON format with correlation IDs:
{
"timestamp": "2024-01-30T10:00:00.000Z",
"level": "info",
"message": "Tool call started",
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"tool": "vic_planning_property_report",
"metadata": {
"address": "1 Spring St"
}
}Analytics
Enable Cloudflare Analytics Engine for:
Request counts and latency
Cache hit/miss rates
Error tracking
API performance metrics
Deployment Options
Option 1: Cloudflare Workers (Recommended)
300+ edge locations
$5/month base + usage
Lowest latency globally
Option 2: Vercel Edge Functions
See Vercel deployment guide for migration instructions.
Option 3: Oracle Server
Traditional Node.js deployment - see v1.0 branch.
Troubleshooting
Common Issues
KV Namespace not found:
# Create namespace and update wrangler.toml
wrangler kv:namespace create "CACHE"Rate limit errors:
# Increase limit in wrangler.toml
RATE_LIMIT_PER_MINUTE = "200"Authentication failures:
# Check API key is set
wrangler secret list
wrangler secret put API_KEYContributing
Fork the repository
Create a feature branch
Make your changes
Add tests
Submit a pull request
License
MIT
Support
Documentation: PRD
Issues: GitHub Issues
Discussions: GitHub Discussions
Changelog
v2.0.0 (2024-01-30)
⨠Rewritten for Cloudflare Workers
⨠HTTP-based MCP protocol
⨠Enhanced property data with land size
⨠Real-time progress updates
⨠Parallel API requests
⨠Intelligent caching with Workers KV
⨠Complete field coverage (15+ fields)
š Production-ready security
š Structured logging and metrics
v1.0.0
Initial Node.js stdio implementation
Built with ā¤ļø for Australian planning research
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Cloudflare Workers MCP server: ai-model-router
Cloudflare Workers MCP server: ai-agent-scratchpad
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA production-ready MCP server for AI agents, providing deep web research and RAG capabilities via Cloudflare Workers.-
- AlicenseAqualityDmaintenanceOpen-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.129 npmMIT
- AlicenseNot gradedqualityBmaintenanceUK property data MCP server for AI hosts (Claude, ChatGPT). Wraps Land Registry, Rightmove, EPC, rental yields, stamp duty, and Companies House into 13 tools.2MIT
- AlicenseAqualityDmaintenanceAn MCP server that gives AI agents clean, token-efficient access to US civic & property data ā geocoding, census tracts, Opportunity Zones, ACS demographics, and FEMA flood zones ā sourced entirely from free federal open data.527 npm1MIT