Docs · Connect & troubleshoot

Connected, or close to it.

Everything between "I have an account" and "my client is returning planning data" — including what to do when it isn't.

The connection itself is one URL. This page is the rest: which client needs which step, what each error message actually means, and where our coverage stops.

One URL · Every client · Real error messages

Step one

Get a key.

Free tier is 20 lookups a month, every month, no credit card. You don't need to create a key by hand — registering makes one for you.

K. 01

Register.

Sign up at app.feasibly.com.au/register with an email address. A key named Dashboard (default) is created automatically on signup, so the dashboard and the API both work immediately.

K. 02

Copy it from the keys page.

Your keys live at app.feasibly.com.au/keys. A key looks like feasibly_sk_ followed by 32 hexadecimal characters — 44 characters in total. If what you pasted is shorter than that, it's truncated.

K. 03

Treat it as a secret.

The key travels in the MCP server URL, so anyone who can read that URL can spend your credits. Revoking a key from the dashboard stops it working immediately — issue a separate key per client rather than sharing one everywhere.

Step two

One URL. Every MCP client.

This is the whole connection string. Replace the token with your own key.

MCP server URL

https://mcp.feasibly.com.au/mcp?key=YOUR_API_KEY

The /mcp endpoint reads the key from the ?key= query string. An Authorization: Bearer header works on the REST API but not on the MCP endpoint — if you configure a header instead of the query parameter, the connection fails with a 401.

Each client has a full walkthrough. Claude Code is the one you can do in a single command.

Claude Code (CLI)

One command, no config file. Quote the URL — the ? and & characters are shell metacharacters and an unquoted URL will be mangled by your shell before Claude Code ever sees it.

claude mcp add --transport http feasibly "https://mcp.feasibly.com.au/mcp?key=YOUR_API_KEY"

That registers the server for the current project. Add --scope user to make it available in every project on the machine. Confirm it landed with claude mcp list, then ask about any Australian address.

Plain REST, for stacks that don't speak MCP

Every tool is also an HTTPS endpoint under https://mcp.feasibly.com.au/api/v1/. All of them are POST with a JSON body, and here the Authorization: Bearer header is the preferred form.

curl -X POST "https://mcp.feasibly.com.au/api/v1/lookup" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"12 Smith Street, Brunswick VIC 3056"}'

Full endpoint list, request shapes and the OpenAPI 3.1 spec are in the REST API reference.

What you get

Eight tools, three tiers.

Tier gating is identical across MCP and REST. Only two operations spend credits: a site lookup costs one, and a multi-site comparison costs one per site that actually resolved. Everything else is free to call.

ToolWhat it returnsTierCredits
lookup_siteThe primary lookup: zone, council schedule controls, overlays, permit triggers, envelope, source links.Free1
get_zone_rulesStructured rules for a zone code at a given council, without the spatial lookup.Free
explain_overlayWhat an overlay does, its clause reference, and the permit triggers it typically carries.Free
get_usageYour plan, remaining monthly credits, daily cap, and when the period resets.Free
check_subdivision_potentialYield indicator from the resolved envelope, schedule minimum lot size and lot geometry.Pro
compare_overlaysTwo or more overlays side by side — which permit triggers compound.Pro
compare_sitesUp to five sites in one structured response. Pipeline triage.Pro1 / site
generate_reportBranded PDF screening report, returned as a signed URL.Scale

Starter's advantage over Free is quota and saved history in the dashboard, not extra tools — its tool set is the same four. The REST-only /api/v1/batch endpoint (up to 20 addresses in one call, one credit each) is Pro and above.

Troubleshooting

What went wrong, and why.

Each row starts with what you actually see. The error text is quoted from what the server sends, so you can match on it.

The client connected, but no Feasibly tools appear.

Cause

Three usual suspects: the URL is missing ?key=, the path isn't /mcp, or the client is still running the old config.

Fix

Check the URL ends in /mcp?key=YOUR_KEY, then restart the client properly — quit Claude Desktop rather than closing the window, and use Reload Window in Cursor. In claude.ai and ChatGPT the connector is off by default in each new chat: open the tools menu and switch Feasibly on.

“Unauthorized: valid API key required.”

Cause

The MCP endpoint could not resolve the key: it's been revoked, it's mistyped, a trailing space or line break came along with it, or the account was created seconds ago and the key hasn't finished syncing to the edge.

Fix

Re-copy the key from the keys page and check it's the full 44 characters. If you registered moments ago, simply loading the keys page re-syncs any key that didn't make it — open it once, then retry the connection.

REST returns 401: “Pass API key as: Authorization: Bearer YOUR_KEY (or ?key=YOUR_KEY).”

Cause

No credential reached the endpoint. Often the header was sent as Bearer: or the key alone, without the Bearer  prefix.

Fix

Send Authorization: Bearer YOUR_KEY, or fall back to ?key=YOUR_KEY in the query string. Both are accepted on REST. On the /mcp endpoint, only the query parameter is.

“The ‘compare_sites’ tool requires a Pro or Agency plan.”

Cause

Tier gating, not a fault. Subdivision, overlay comparison and site comparison are Pro; PDF reports are Scale.

Fix

Use the free tools, or upgrade at app.feasibly.com.au/billing. The tier table above is the authoritative mapping.

“Rate limit exceeded: 20 tool calls/day on the free plan.”

Cause

The daily burst cap, which is a separate guard from your monthly allowance. Free 20, Starter 50, Pro 300, Scale 1,000 tool calls a day. It exists to bound abuse, not to ration normal work.

Fix

It resets at midnight UTC. Only actual tool calls count — connecting, listing tools and other protocol traffic are free, so a merely-connected client never burns the cap.

“Monthly credit limit reached (200 lookups on the starter plan). Resets 2026-09-01.”

Cause

The monthly ledger — the entitlement you actually bought. It resets on your billing anniversary, not on the first of the month.

Fix

Wait for the reset, upgrade, or buy a top-up. Purchased credits never expire, and your monthly allowance is always spent first. Note that both counters are per account: issuing more keys does not multiply the quota.

A zone came back, but a hazard layer is listed as a gap.

Cause

A government layer didn't answer — an outage, a retired endpoint, a timeout. We refuse to render an unanswered query as clear land, so the response degrades loudly instead of quietly.

Fix

Read the data_gaps entries and treat those layers as unchecked, not as clear. Retry shortly; most outages are brief. Live per-state currency is published on the amendments page.

A Queensland address returns “planning scheme — not yet covered”.

Cause

Queensland has no statewide zoning layer: each council publishes its own scheme, and we hold the South-East Queensland councils plus Toowoomba. Outside those, we don't have that council's scheme — a routine outcome, not an error.

Fix

There's no workaround, and we say so rather than guessing. This is deliberately distinct from “zone could not be determined for this parcel”, which means we do hold the scheme and the query missed — usually a road reserve or a cadastral disagreement about which lot you're on. See coverage.

“NT support is on the roadmap.”

Cause

The Northern Territory is not covered. It has no workable public spatial planning API, and we would rather return nothing than fabricate a zone.

Fix

None for now. The other seven states and territories are live.

The answer describes the wrong property, or a general area.

Cause

Geocoding. An address string that resolves to a street centreline or a suburb rather than a parcel produces a screening of the land next door — and a clause-cited answer about the wrong site is worse than no answer.

Fix

Pass lat and lng instead of an address string when you have them; that removes the ambiguity entirely. Otherwise give the full street address with suburb and state. Watch for the response's own warning that it could not resolve to a specific street address.

Still stuck.

Cause

Something we haven't documented, which we'd like to know about.

Fix

Email hello@feasibly.com.au with the address you tried and the exact error text. Replies inside 24 hours; setup problems go to the front of the queue.

Before you rely on it

Coverage is national. Depth is not uniform.

Roughly 455 councils across seven states and territories answer, but they don't all answer with the same grade of data. Three tiers, and we don't collapse them — you'd find out anyway, and you'd find out at the worst moment.

Tier 1 — verified schedule

Victoria

79 councils, 620+ council-specific zone schedules read by hand from the source planning scheme and human-verified, with daily amendment monitoring and the ResCode Clause 55 envelope. Every value is linked to its clause. This is the depth the rest of the country is being built up to.

Tier 2 — machine-extracted controls

NSW and QLD (SEQ)

On top of the state APIs, the detailed dwelling controls the LEP layer omits — setbacks, site coverage, landscaped area, private open space — are codified from council DCPs for 116 NSW councils and 8 SEQ schemes, and surfaced as dcp_controls. These are screening-grade, machine-extracted values, a subset independently verified. They are not the same tier as Victoria's verified schedules and are labelled accordingly in every response.

Tier 3 — state API

NSW, SA, QLD (SEQ), WA, ACT, TAS

Zone and overlay data straight from the authoritative government spatial APIs — NSW Standard Instrument LEP, the SA Planning & Design Code, QLD council endpoints, WA SLIP, ACTmapi and theLIST. Authoritative for what it covers, without a manual per-council schedule interpretation layer behind it.

Read the confidence tag, not just the number. Every parameter carries its own confidence and source clause, and an empty overlay array means checked-and-clear — not unknown. Anything we could not check appears in data_gaps.

The accuracy guarantee covers the zone. If a lookup returns the wrong zone, that lookup is free and we credit ten more, and the claim becomes a permanent correction to the dataset. It is a guarantee about the zone specifically — not a warranty over every derived control, envelope figure or yield indicator. See the claims process and the methodology behind it.

All of it is screening and preliminary research. It is not planning, legal or architectural advice, and you should verify with the relevant council before making a decision.

Still not connected?

Send us the address you tried and the error you got — setup problems are a bug on our side of the line, not a puzzle for you to solve.

If we get the zone wrong, that lookup is free and we credit ten more.