API DocsProperty Market Intel
Getting StartedServiced AccommodationPricing
API Reference
1. Property Identity & Lookup
2. Valuations & Pricing
3. Rental Market Intelligence
4. Serviced Accommodation
5. Listings & Sourcing
6. Location Intelligence
7. Environmental & Risk
8. Planning & Regulatory
9. Account & Platform
Free Tier

Get 100 credits free, no card required. Try every endpoint with your own key.

Get a free keyNo credit card · cancel anytime

Claude Setup

Live

Connect PMI to Claude in three flavours: Claude Desktop for personal analyst use, Cursor IDE for code-side integration, and the Claude API for production agents you build yourself. All three use the same MCP URL.

MCP endpointhttps://pmi-api-beta-7tvvt.ondigitalocean.app/mcp
AuthBearer pmi_live_…
Free tier100 credits/month, all 28 tools
Setup timeAbout 30 seconds

Pick your flavour

Same URL, same key. The difference is just where the conversation lives.

See it in action

If you've never connected an MCP server to Claude before, these public walkthroughs show what the experience looks like. PMI works the same way.

Option A: Claude Desktop

Claude's Mac and Windows app supports remote MCP servers natively. About 30 seconds to connect.

1

Open the config file

Easiest route: open Claude Desktop, go to Settings → Developer → Edit Config. That opens the file in your default editor and creates it if it doesn't exist.

Or open it directly:

OSPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json
2

Add the PMI block

If the file is empty, paste the whole thing. If you've already got other MCP servers, just add the pmi entry inside the existing mcpServers object.

claude_desktop_config.json
{
  "mcpServers": {
    "pmi": {
      "type": "http",
      "url": "https://pmi-api-beta-7tvvt.ondigitalocean.app/mcp",
      "headers": {
        "Authorization": "Bearer pmi_live_YOUR_KEY_HERE"
      }
    }
  }
}

Replace pmi_live_YOUR_KEY_HERE with your actual key from the dashboard.

3

Fully quit and reopen Claude Desktop

Cmd+Q on macOS, then relaunch. Closing the window isn't enough. The app needs a clean restart to load the new config.

4

Confirm it loaded

Click the plug icon at the bottom of the chat input box, then select Connectors. You should see “pmi” listed with 28 tools.

If you don't see it, jump to the troubleshooting section at the bottom of this page.

5

Try a real question

Open a new chat and try one of these:

“What's the rental yield in LS6, and what's the live for-sale market like there?”
“How many PMI credits do I have left this month?”
“Pull the AVM for UPRN 100023336956 and list 5 sold comparables within 1km.”

Each tool call appears in the chat with an expandable JSON pane so you can verify the inputs and the response.

Option B: Cursor IDE

Cursor has first-class MCP support. Ideal if you're doing data analysis in notebooks, building a property dashboard, or maintaining integration code against PMI.

1

Open Cursor MCP settings

Three options, same end result:

  • UI: Open Settings → Tools & MCP → New MCP Server.
  • Project-level config: Create .cursor/mcp.json in your project root.
  • Global config: Create ~/.cursor/mcp.json for use across all projects.

Project-level config takes precedence if both exist.

2

Add the PMI block

.cursor/mcp.json
{
  "mcpServers": {
    "pmi": {
      "url": "https://pmi-api-beta-7tvvt.ondigitalocean.app/mcp",
      "headers": {
        "Authorization": "Bearer pmi_live_YOUR_KEY_HERE"
      }
    }
  }
}
3

Restart Cursor and verify

Open Settings → Tools & MCP. A green dot next to “pmi” means it's connected. Red means the connection failed (check the Authorization header, then check the URL has no trailing slash).

4

Use it in chat

Open Cursor's chat panel (Cmd/Ctrl+L) and try:

“Use the pmi tools to pull the AVM for UPRN 100023336956 and show me 5 sold comparables within 1km, then write a Python function that does the same lookup for any UPRN I pass in.”
“For each outcode in [LS4, LS6, LS11, LS28], call pmi_rents_yields and put the results in a pandas DataFrame.”

Option C: Claude API (Messages API)

For production agents. Slack bots, customer support flows, internal tooling, anything where you're calling Claude programmatically. Use the Anthropic Messages API with an mcp_servers parameter.

Python

Python \u00B7 anthropic SDK
from anthropic import Anthropic

client = Anthropic()  # ANTHROPIC_API_KEY from env

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=2048,
    mcp_servers=[{
        "type": "url",
        "url": "https://pmi-api-beta-7tvvt.ondigitalocean.app/mcp",
        "name": "pmi",
        "authorization_token": "pmi_live_YOUR_KEY_HERE",
    }],
    messages=[{
        "role": "user",
        "content": "What's the projected STR revenue for a 2-bed flat in BA1 1?"
    }],
)

# Each tool use + result is a content block in response.content
for block in response.content:
    print(block)

TypeScript

TypeScript \u00B7 @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const response = await client.messages.create({
  model: "claude-sonnet-4-6",
  max_tokens: 2048,
  mcp_servers: [{
    type: "url",
    url: "https://pmi-api-beta-7tvvt.ondigitalocean.app/mcp",
    name: "pmi",
    authorization_token: "pmi_live_YOUR_KEY_HERE",
  }],
  messages: [{
    role: "user",
    content: "What's the projected STR revenue for a 2-bed flat in BA1 1?"
  }],
});

console.log(response.content);

What you get back

response.content is an array of typed blocks: text, mcp_tool_use, and mcp_tool_result. Iterate them in order to reconstruct what Claude did. Most apps just need the final text block.

Multi-turn conversations

To continue a conversation (the agent might want to call follow-up tools after seeing a result), feed response.content back as the assistant message and add a new user message:

Python \u00B7 multi-turn
messages = [
    {"role": "user", "content": "What's the yield in LS6?"},
    {"role": "assistant", "content": response.content},
    {"role": "user", "content": "Now show me listings under £200k there."},
]
response2 = client.messages.create(model=..., mcp_servers=..., messages=messages)

Cost considerations

Each tool call is a separate Anthropic API turn. Anthropic charges for the model tokens used to formulate the call and parse the result. PMI bills separately based on which tools were called (same as REST). For a typical agentic interaction, expect 2 to 4 tool calls per user question.

Option D: Other Anthropic-powered clients

Anything that wraps Claude with MCP support (Continue, Cline, Aider plugins, etc.) uses the same URL and Bearer token. Look for an “HTTP MCP server” or “Remote MCP” config option and paste:

Generic config
URL:    https://pmi-api-beta-7tvvt.ondigitalocean.app/mcp
Header: Authorization: Bearer pmi_live_YOUR_KEY_HERE

Best practices

  • Don't put your master key in client configs. Create a sub-key per client (e.g. pmi_live_claude_desktop_macos) so you can revoke it without breaking other integrations.
  • Set a credit cap on each sub-key. Limits how badly an agent gone wild can drain your allowance.
  • Use dry_run=true when prototyping. PMI tools accept this query param. The response shape mirrors the real call but no credits are spent.
  • Watch the connector panel in Claude Desktop. The tool log shows exactly which tools the model picked. If it consistently picks the wrong one, get in touch and we'll tune the description.
  • Pair MCP with a short system prompt. Telling Claude things like “always quote the median, not the mean, when discussing rents” helps it format answers consistently.

Troubleshooting

Connector panel shows "pmi: 0 tools"

You're connected but the tools didn't enumerate. Almost always: the Authorization header isn't being passed. Re-check the JSON in claude_desktop_config.json, common typo is "Header" instead of "Authorization". Then quit and relaunch Claude Desktop fully.

Tool calls return "Authentication failed"

The token is being sent but PMI rejected it. Confirm the key starts with pmi_live_, that it's marked active in the dashboard, and that there's no leading or trailing space in the config.

Tool calls return "Monthly credit limit reached"

You’ve spent your allowance. Upgrade your tier in the dashboard, or wait until the next billing cycle starts.

Claude says "I tried to call pmi but the tool isn't available"

The MCP server isn’t connected. Click the connector panel; if "pmi" isn’t listed at all, the URL is wrong or the file isn’t being read. Re-do the config step.

Latency is bad on tool calls

First call from a fresh Claude Desktop session warms up the MCP connection, expect about 500ms to 1s overhead. Subsequent calls in the same session are sub-200ms beyond the underlying endpoint’s latency.

JSON config edits aren't taking effect

Common causes: invalid JSON (a trailing comma is the usual culprit), saved the wrong file, or didn't fully quit Claude Desktop. Validate your JSON with jq or paste it into an online JSON validator.