NEWOneGoodArea is live as an MCP server. Use it inside Claude Desktop, Cursor, and Claude Code.MCP server is live for Claude Desktop, Cursor, and Claude Code.Read the docs
MCP servernpm · @oga-mcp/server

OneGoodArea inside Claude Desktop, Cursor, and any MCP-compatible client.

Score UK areas, query signals in natural language, watch portfolios for material change, and generate audience-shaped briefs, all inline in your AI workflow. Eleven tools across six product surfaces. The server is distributed as an npm package and spawned by your MCP client over stdio.

  • 11 tools
  • Bearer auth
  • stdio transport
  • npm package
01Install

Two steps to onegoodarea inside your client.

One API key, one config edit. The client will spawn the server as a subprocess and the tools appear in your next conversation.

Step 01

Get an API key from your dashboard. Keys start with oga_.

Step 02

Add the server to your MCP client config.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or %APPDATA%\Claude\claude_desktop_config.json on Windows. Add the onegoodarea server:

JSONclaude_desktop_config.json
{
  "mcpServers": {
    "onegoodarea": {
      "command": "npx",
      "args": ["-y", "@oga-mcp/server"],
      "env": {
        "OOGA_API_KEY": "oga_..."
      }
    }
  }
}

Restart Claude Desktop. The eleven tools appear when you start a conversation about UK locations.

Cursor

Add to .cursor/mcp.json in your project (or the global Cursor MCP config):

JSON.cursor/mcp.json
{
  "mcpServers": {
    "onegoodarea": {
      "command": "npx",
      "args": ["-y", "@oga-mcp/server"],
      "env": { "OOGA_API_KEY": "oga_..." }
    }
  }
}
02Tools

Eleven tools across six product surfaces.

Every tool calls the same v1 API under the hood. The MCP server is a thin protocol bridge. Auth, rate-limits, quota, methodology pinning, all enforced on the API side. Every brief and summary the LLM sees is composed server-side from real engine state. No client-side text synthesis.

Scores

Composite scoring per area for one of four decision presets.

score_postcode(area, preset)

Score a UK postcode or place name for a preset (moving, business, investing, research). Returns a 0-100 score, five weighted dimensions with engine-grounded reasoning and confidence, a server-composed summary, recommendations, and data sources.

TryScore SW1A 1AA for moving.
compare_postcodes(areas[], preset)

Score 2-8 areas side-by-side for the same preset. Returns a sorted comparison table with per-area summaries. Partial failures surface inline rather than failing the call.

TryCompare M1 1AE, SW4 0LG, and EH1 1BB for business.

Signals

Raw addressable signals: the primitive underneath every other product.

get_area_signals(area)

Full signals catalog for an area across all seven categories (crime, deprivation, property, schools, amenities, transport, environment). Each signal carries value + unit, percentile when store-backed, confidence with engine-grounded reason, source attribution, and observation period.

TryGet all signals for M1 1AE.
get_signals_by_category(area, category)

Same signal shape as get_area_signals, narrowed to one category. Use when the LLM needs to focus on a single data domain.

TryShow me the crime signals for SW1A 1AA.

Intelligence

Natural-language query plane + peer discovery over the moat.

find_areas(question)

Ask in natural language. A planner translates the question into a typed plan (one of seven ops: rank_areas, get_area, score_area, compare_areas, find_peers, find_insights, find_forecast); the database executes it. The response carries the emitted plan + results so every answer is reproducible.

TryAreas under £250k median price and rising YoY in England.
find_peers(area, k?)

k-nearest-neighbour peers for a UK area by normalized signal values. Returns the target's geo_code + signals_used + a ranked peers list with distance (0 = identical, 1 = maximally distant) and n_dims_used.

TryFind 10 areas similar to M1 1AE.

Monitor

Portfolio tracking and material-change detection.

watch_portfolio(name, areas[])

Set up a Monitor portfolio in one step: creates the portfolio and adds the tracked areas. Returns the new portfolio_id and the area list. If the add step fails after the create, the response surfaces the partial state so the LLM can act.

TryWatch portfolio 'North Manchester' with M1 1AE, M4 5DR, M8 8QR.
get_portfolio_changes(portfolio_id, threshold_pct?, baseline?, min_transactions?)

Check a portfolio for material signal changes between two time-series periods. Returns scope, counts, and a per-area table of material moves with direction, from/to values, delta, and percent change. Probe calls don't fire customer webhooks.

TryWhat's changed in portfolio ptf_abc with a 5% threshold?

Brief (marquee)

One audience-shaped advisory document per area. The wow-factor composite.

area_brief(area, audience)

Audience ∈ {lender, insurer, retailer, investor}. Fans out to the full signals catalog + the audience's scoring preset (with explain mode), then renders an audience-specific markdown brief: overall verdict, audience-relevant dimensions, audience-relevant signals with provenance, recommendations, data sources. Every value is real engine output.

TryGive me a lender brief on SW1A 1AA.

Reference

Static lookups, no quota cost.

methodology_for(dimension)

Methodology for any scoring dimension: data source, scoring function summary, per-preset weights. Useful for procurement and model-risk review.

TryHow does OneGoodArea score Cost of Living?
engine_version((no args))

Current engine version, release date, and changelog excerpt. The live engine version is also stamped on every score_postcode and get_area_signals response.

TryWhat engine version is in production?
03Local development

Run against your own backend.

For local testing against a development API instance, point the server at any base URL via OOGA_API_BASE. The server validates the key prefix but does not validate the host.

JSONdev config
{
  "mcpServers": {
    "onegoodarea-dev": {
      "command": "npx",
      "args": ["-y", "@oga-mcp/server"],
      "env": {
        "OOGA_API_KEY": "oga_dev",
        "OOGA_API_BASE": "http://localhost:4000"
      }
    }
  }
}
Issues, feature requests, and support: operation@onegoodarea.co.uk
04Plans

The MCP server is free.

Open source, no per-call MCP fee. Tool invocations make real calls to the OneGoodArea API and consume your account quota the same way any other integration does. Current tiers and any MCP-specific terms live on the pricing page.

UK area intelligence as a Claude-native tool.

Get a key, paste a config block, restart your client. The eleven tools appear in your next conversation.