Home / Blog / Building a Cursor extension on top of ausdata-mcp
2026-05-20 · Harry Vass
Building a Cursor extension on top of ausdata-mcp
A working recipe for wiring ausdata-mcp into Cursor so your IDE can fetch live AU economic data while you write code. Full config, two real workflows, and the gotchas nobody mentions.
Cursor added native MCP support in late 2025. That means any Model Context Protocol server you can run locally, ausdata-mcp included, can become a first-class tool inside Cursor's agent panel. Your IDE can now ask for the live RBA cash rate, the latest CPI print, or a 10-year wage series mid-edit, and pipe the answer straight into the file you're writing.
If you're a developer at an AU fintech, broker platform, super fund, or policy shop, this is meaningful. Most of your day-job code touches at least one government data series. Until now you had three options: hardcode a stale number, scrape the source on every dev cycle, or task-switch to a notebook. None of those compose with how you actually work in 2026 (in an agent-loop IDE, beside your code).
This post walks through wiring ausdata-mcp into Cursor, then shows two real workflows: a mortgage-affordability backtest and a CPI-aware unit-test fixture generator.
<!-- IMG: hero screenshot, Cursor agent panel responding to "what's the current cash rate" with cited RBA data -->
Step 1, install the MCP
ausdata-mcp ships as an npm package and is invoked via npx. You don't need to clone anything.
# verify your key first
curl -H "x-api-key: $AUSDATA_API_KEY" https://api.ausdata.io/v1/whoami
If you don't have a key yet, grab the free 500-calls/month tier at ausdata.io. The key is what scopes your Cursor session to your account quota.
Step 2, register the MCP in Cursor
Cursor reads MCP servers from ~/.cursor/mcp.json. Create or edit that file:
{
"mcpServers": {
"ausdata": {
"command": "npx",
"args": ["-y", "ausdata-mcp@latest"],
"env": {
"AUSDATA_API_KEY": "ak_live_xxxxxxxxxxxxxxxx"
}
}
}
}
Restart Cursor. Open the agent panel (Cmd+L on macOS, Ctrl+L on Windows/Linux) and you should see ausdata listed under available tools. The first invocation will spin up the MCP server on demand; subsequent calls reuse the process.
<!-- IMG: screenshot, Cursor settings panel showing ausdata MCP listed as Connected -->
Step 3, verify with a smoke test
Ask the Cursor agent:
> "What's the current RBA cash rate? Cite the source."
The agent should call ausdata.series("AU.CASHRATE") and reply with something like:
> The RBA cash rate is 4.35% (as of 2026-05-06).
> Source: Reserve Bank of Australia, CC-BY 4.0.
If the agent answers without citing, your MCP wiring isn't connected. Recheck the JSON config and restart.
Workflow 1, mortgage-affordability backtest
You're an AU fintech building a mortgage origination flow. You want a backtest harness that asks: for a $500k loan at the prevailing 3-year fixed rate, what % of median household disposable income was the monthly repayment, each quarter for the last 10 years?
In Cursor, open tests/test_affordability.py and prompt the agent:
> "Write a pytest fixture that pulls 10 years of quarterly disposable-income data and 3-year fixed mortgage rate data from ausdata, then computes monthly P&I repayment as a % of disposable income. Use real dataset IDs."
The agent will call:
# what Cursor's agent generates after asking ausdata
import pytest
from ausdata import Ausdata
@pytest.fixture(scope="session")
def affordability_series():
api = Ausdata()
rates = api.get_data("rba", "F5", filters={"series": "3-year fixed"}, period="2016-Q1/2026-Q1")
income = api.get_data("abs", "5206.0", filters={"measure": "household disposable income"}, period="2016-Q1/2026-Q1")
series = []
for r, i in zip(rates["records"], income["records"]):
monthly_rate = (r["value"] / 100) / 12
n = 12 * 30
repayment = 500_000 * monthly_rate * (1 + monthly_rate) ** n / ((1 + monthly_rate) ** n - 1)
series.append({
"period": r["period"],
"rate_pct": r["value"],
"monthly_repayment": repayment,
"share_of_income": repayment / (i["value"] / 12),
})
return series
def test_affordability_peaked_2023(affordability_series):
by_period = {row["period"]: row for row in affordability_series}
assert by_period["2023-Q4"]["share_of_income"] > by_period["2019-Q4"]["share_of_income"]
What's notable: the agent picked real dataset IDs (5206.0, F5) because the MCP exposes describe_dataset and search_datasets tools it can call iteratively. You didn't have to know the codes.
<!-- IMG: chart, mortgage repayment as % of disposable income, 2016-2026, generated from the fixture above -->
Workflow 2, CPI-aware test fixtures
Your codebase has hardcoded inflation assumptions scattered across 40 unit tests. They were correct in 2021 and now silently encode 2.5% YoY into a world where the actual print is 3.6%.
Ask Cursor:
> "Grep for hardcoded CPI assumptions in tests/, then write a conftest.py fixture that pulls the latest annual CPI from ausdata and exposes it as a session-scoped fixture. Replace the hardcodes with the fixture."
The agent calls ausdata.latest("abs", "CPI") to pin the current value, generates:
# conftest.py
import pytest
from ausdata import Ausdata
@pytest.fixture(scope="session")
def current_cpi_yoy():
"""Latest ABS CPI All Groups YoY. CC-BY 4.0 © ABS."""
return Ausdata().latest("abs", "CPI", filters={"measure": "All groups CPI"})["records"][0]["value"]
…then walks the test files replacing 0.025 with the fixture. You review the diff in Cursor's review pane, accept the parts that compile, reject anywhere the agent over-reached.
This is the workflow shape MCPs make possible: the IDE asks the data source what's true today, and writes that into your test surface.
Gotchas
A few non-obvious things that bit early users:
npx -yre-downloads the package on every cold start. That's fine for a developer machine; for a CI container, pin a version:"args": ["-y", "[email protected]"]. The bundle is ~2MB so cold start is sub-second on a warm npm cache.- The MCP holds your API key in env. Cursor's MCP config lives in plaintext under
~/.cursor/. Don't commit it. Add it to.gitignoreif you mirror dotfiles. - Rate limits are per key, not per IDE. If Cursor and Claude Desktop both use the same key, they share your monthly quota. For team setups, mint per-developer keys via
/v1/whoami. - The agent will sometimes confabulate dataset IDs if you don't first ask it to call
search_datasets. The fix is a one-liner in your prompt: *"Use search_datasets first to confirm IDs before calling get_data."*
What this isn't
This is not a "Cursor plugin" in the Marketplace sense, there's no extension to install. MCP is Cursor's tool-protocol surface, and ausdata-mcp is one of many possible MCPs you can wire in. The same config works in Claude Desktop, Cline, Continue, Zed, and any other MCP-aware client. The recipe is portable.
Nor does this turn Cursor into a finance terminal. The agent retrieves data; it doesn't decide whether your test asserts the right invariant. You're still the engineer.
Pricing
- Free: 500 calls/month, covers one developer doing occasional CPI / cash-rate lookups
- Analyst: $29/mo, 10k calls, covers a working developer building an AU-data-aware codebase
- Pro: $99/mo, 100k calls, covers a small team or a customer-facing app
Grab a key at ausdata.io.