Connect UK planning data to ChatGPT, Claude, or any AI assistant
Ask real questions about UK planning applications, appeals and enforcement, answered from live council records — not the AI's general knowledge.
Quickest way to connect
Works with ChatGPT and Claude. No coding, no downloads, no API key to copy — you just sign in with your email.
ChatGPT
- Open ChatGPT → Settings → Connectors → Create.
- Paste this in as the server address:
https://ukplanningapi.co.uk/mcp
- ChatGPT will ask you to sign in — enter your email, then click the link we send you. No password to create or remember.
- Approve the connection. That's it — ask it a planning question.
Works as-is. If you also turn on Developer Mode (ChatGPT Settings → Advanced), it gets all 35 tools below instead of general search — better for detailed questions about officers, appeals or approval rates, but not needed to get started.
Claude
- Open Claude → Settings → Customize → Connectors → Add custom
connector (or go straight to
claude.ai/settings/customize-connectors). - Paste the same address:
https://ukplanningapi.co.uk/mcp
- Sign in with your email when asked. If you see boxes for Client ID or Client Secret, leave them empty — they're not needed here.
Free to try — 500 questions a month, no card required. The connection shows up as a key in your dashboard, where you can remove it at any time. Prefer building a shareable Custom GPT instead? See GPT Actions further down.
Try asking it…
- "What planning applications have been submitted near NW3 6UP?"
- "What's the approval rate for house extensions in Camden?"
- "Is NW3 6UP in a conservation area or under an Article 4 direction?"
- "Show me planning appeals decided in Leeds this year"
- "What's the full planning history of this property?"
Get your free API key — 500 requests/month, no credit card, shared across REST and MCP.
Get free access →
Developer setup
The rest of this page is for building an integration directly — config files, the REST API, and the full list of 35 tools — rather than using ChatGPT or Claude as-is. One API key works across REST and MCP, sharing the same monthly quota.
Transport
Streamable HTTP hosted at https://ukplanningapi.co.uk/mcp. No local
install required — add the URL and your API key to your client's MCP config.
Pass your key via the X-Api-Key header on the connection. Stdio (local subprocess)
transport is also supported for clients that launch a local process and inject environment
variables directly — set UK_PLANNING_API_KEY in that case instead of a header.
Every request needs a credential — API key or OAuth — including
tools/list. There's no anonymous session; an unauthenticated
request gets 401. To browse the tool catalogue without either, read
/.well-known/mcp.json instead — a
free, always-open snapshot of every tool's name and description.
Claude Desktop
~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"uk-planning": {
"url": "https://ukplanningapi.co.uk/mcp",
"headers": { "X-Api-Key": "YOUR_API_KEY" }
}
}
}
Cursor / VS Code Copilot
.cursor/mcp.json or workspace settings:
{
"mcp": {
"servers": {
"uk-planning": {
"url": "https://ukplanningapi.co.uk/mcp",
"headers": { "X-Api-Key": "YOUR_API_KEY" }
}
}
}
}
ChatGPT via Custom GPT Actions
An alternative to the ChatGPT connector in the quick-start section above.
Not MCP — a Custom GPT built from an OpenAPI schema, talking to the plain REST API with a regular API key. Useful if you're building a Custom GPT to share, or just prefer pasting a key over signing in.
- In ChatGPT: Explore GPTs → Create (or open an existing GPT you own) → Configure → Create new action.
- Import from URL and paste:
https://ukplanningapi.co.uk/openapi.json
- Authentication → API Key. If you're offered a choice of
Bearer or Custom: either works — for
Custom, set the header name to
X-Api-Key. Paste your API key as the value. - Save. The GPT can now call every
/v1/…endpoint this API has — the same data as the MCP tools below, shaped as REST operations instead of named tools.
One API key, one quota, shared across REST, MCP and the ChatGPT/Claude connectors — nothing about using it from a Custom GPT costs differently.
Python / LangChain agent
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client(
"https://ukplanningapi.co.uk/mcp",
headers={"X-Api-Key": "YOUR_API_KEY"},
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("search_applications", {"postcode": "NW3"})
ChatGPT connector tools (2)
| Tool | What an AI can ask |
|---|---|
search | Search UK planning applications from one plain-English query. |
fetch | Fetch one planning application in full by the id returned from `search`. |
Core tools (9)
| Tool | What an AI can ask |
|---|---|
search_applications | “Show refused householder applications in NW3 in the last 6 months” |
get_application | “Get the full detail for application 14-26/00123/FUL” |
get_site_history | “What's the full planning history of this property?” |
get_location_constraints | “Is NW3 6UP in a conservation area or under an Article 4 direction?” |
get_officer | “What is officer Sarah Ahmed's refusal rate for extensions?” |
get_agent | “What is this planning agent's approval rate in Camden?” |
list_councils | “Which councils do you have data for?” |
get_council_stats | “What is the approval rate for householder applications in Ealing?” |
get_changes | “What new applications were submitted in Tower Hamlets today?” |
Summary tools (11)
| Tool | What an AI can ask |
|---|---|
get_country_stats | “What is the approval rate in Wales?” |
get_country_trends | “Has Wales's approval rate changed over 3 years?” |
get_county_stats | “What is the approval rate in Lancashire?” |
get_county_trends | “Is Lancashire approving more or fewer applications than 2 years ago?” |
get_council_summary | “What application types get approved most in Camden?” |
get_council_trends | “Show Camden's quarterly approval rate over time” |
get_ward_stats | “What planning activity is there in Ealing Broadway ward?” |
get_district_stats | “What planning activity is there in SE1?” |
get_postcode_stats | “What planning activity has there been at NW3 6UP?” |
get_officer_history | “Show me this officer's quarterly caseload over time” |
get_appeal_stats | “What's the householder appeal success rate at Ealing?” |
Appeals & enforcement tools (6)
| Tool | What an AI can ask |
|---|---|
search_enforcement | “Are there enforcement notices near SE1 9SG?” |
get_enforcement | “What happened with enforcement notice 4821 — was it complied with?” |
search_appeals | “Show allowed appeals in Camden this year” |
get_appeal | “Get the inspector's decision for appeal APP/X5210/W/26/1234567” |
get_application_appeals | “Was application 123-2026/0123/P taken to appeal?” |
get_council_fields | “Which fields does Leeds actually publish before I query it?” |
Area & directory tools (6)
| Tool | What an AI can ask |
|---|---|
list_postcodes | “List every postcode in Hampstead Town ward” |
list_addresses | “What addresses are on Church Row, NW3?” |
list_properties | “List Victorian houses in the Hampstead conservation area” |
search_officers | “Find officer Sarah Ahmed — which councils has she worked for?” |
search_agents | “Find agents from ‘Smith Planning Associates’” |
list_wards | “Which wards does Camden have data for?” |
Account tools (1)
| Tool | What an AI can ask |
|---|---|
get_my_usage | “How much of my monthly API allowance is left?” |
Appeal coverage
get_appeal_stats
and the appeal figures in get_ward_stats/get_district_stats/
get_officer_history reflect that linked subset, not every appeal filed
against a council.
Get your free API key — 500 requests/month, no credit card, shared across REST and MCP.
Get free access →