Click on "Install 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
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 installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.