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

  1. Open ChatGPT → Settings → Connectors → Create.
  2. Paste this in as the server address:
    https://ukplanningapi.co.uk/mcp
  3. ChatGPT will ask you to sign in — enter your email, then click the link we send you. No password to create or remember.
  4. 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

  1. Open Claude → Settings → Customize → Connectors → Add custom connector (or go straight to claude.ai/settings/customize-connectors).
  2. Paste the same address:
    https://ukplanningapi.co.uk/mcp
  3. 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…

Ready to connect?
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.

  1. In ChatGPT: Explore GPTs → Create (or open an existing GPT you own) → Configure → Create new action.
  2. Import from URL and paste:
    https://ukplanningapi.co.uk/openapi.json
  3. 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.
  4. 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)

ToolWhat an AI can ask
searchSearch UK planning applications from one plain-English query.
fetchFetch one planning application in full by the id returned from `search`.

Core tools (9)

ToolWhat 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)

ToolWhat 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)

ToolWhat 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)

ToolWhat 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)

ToolWhat an AI can ask
get_my_usage“How much of my monthly API allowance is left?”

Appeal coverage

Appeals are linked to a specific application via the Planning Inspectorate's own reference numbers and address matching — not every appeal matches. Only around 10.4% of Planning Inspectorate appeal cases link to a specific application in this database; the rest either matched to a property only or didn't match at all. 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.
Ready to connect?
Get your free API key — 500 requests/month, no credit card, shared across REST and MCP.
Get free access →