mcp-au-nsw
MCP servers for NSW Government APIs.
Ask Claude (or any MCP client) things like "How do I get from UNSW to Circular Quay right now?", "Any crashes on the M4?", "Is electrician licence 241132C current?" or "Where's the cheapest diesel near Parramatta?" and get live answers.
Each server is a separate subcommand, so you only add the ones you need.
Quick start
1. Get API keys (free)
TfNSW Open Data Hub (for transport and roads; one key covers both)
- Register: https://opendata.transport.nsw.gov.au/data/user/register
- Log in: https://opendata.transport.nsw.gov.au/data/user/login
- Click your profile icon → API Tokens, enter a name and click Create API Token.
- Copy the token right away; it can't be viewed again. This is your
NSW_TRANSPORT_API_KEY.
Official guide: https://opendata.transport.nsw.gov.au/developers/userguide
API.NSW (for fuel and licences)
- Register: https://api.nsw.gov.au/Account/Register (log in: https://api.nsw.gov.au/Account/Login)
- Go to My Apps → Add new app: https://api.nsw.gov.au/DeveloperApp/AppCreate
and attach one API product. Each app can have only one API product, so create one app per API you want
(e.g. one for the Fuel API, one for the Trades register).
- Copy each app's API Key and API Secret into the matching environment variables
(
NSW_FUEL_API_KEY / NSW_FUEL_API_SECRET, NSW_TRADES_API_KEY / NSW_TRADES_API_SECRET, ...;
see the licences section for the full list).
The free plan allows 2,500 calls per month per app.
2. Install uv (if you don't have it)
3. Add the servers to your MCP client
Claude Code
For licences, pass the key pair of every register you subscribed to; registers without keys are simply unavailable.
Claude Desktop / Cursor / other clients: add the servers you want to the MCP config file (claude_desktop_config.json, .cursor/mcp.json, etc.):
uvx caches the version it first downloads. To pick up a new release, use uvx mcp-au-nsw@latest ... or run uv cache clean mcp-au-nsw.
How the servers behave
- Places by name. Tools that take a place accept names ("Town Hall", "17 High St Kensington", "Sydney Opera House"), stop IDs, or
lat,lng.
- No guessing. If a name matches several places about equally well (e.g. "UNSW" has two light rail stops, "Sydney Airport" has domestic and international stations), the tool returns the candidates instead of picking one, so the assistant can ask you.
- Live data, no caching. Every call fetches fresh data. Responses include stable IDs (stop IDs, station codes) so you can build your own lookups for analysis.
- Sydney local time. All times are
YYYY-MM-DD HH:MM in Sydney time.
transport server
Example prompts:
- "How do I get from UNSW to Circular Quay right now?"
- "I need to be at Manly Wharf by 6pm. When should I leave Martin Place?"
- "When's the next train from Town Hall?"
- "Any problems on the T1 today?"
- "Are there any spaces left at the Tallawong Park&Ride?"
- "What time did the Tallawong P1 car park fill up yesterday?"
roads server
Example prompts:
- "Anything happening on the M4 right now?"
- "Any roadworks or events near Parramatta this weekend?"
- "How much are the tolls from Parramatta to Sydney International Airport, and how much time do they save?"
Toll amounts are estimates from Transport for NSW and may differ from what is actually charged.
licences server
Checks licences on NSW public registers. All registers work the same way: look up a licence number, search by
person or business name, and get the full public record.
NSW_X_API_* means NSW_X_API_KEY and NSW_X_API_SECRET.
Example prompts:
- "Is electrician licence 241132C current, and does it cover electrical work?"
- "Check whether my builder, Smith Constructions, holds a current licence and has any disciplinary actions."
- "Is this real estate agent licensed?"
Records come straight from the public registers and can include the names, roles and addresses of licence holders
and associated people.
fuel server
Prices are in cents per litre.
Example prompts:
- "Where's the cheapest diesel near UNSW?"
- "What are the prices at BP Redfern right now?"
Development
To try local changes in Claude Code:
Releasing
- Bump
version in pyproject.toml and in every registry/*.json (a test checks they match).
- Create a GitHub Release tagged
v<version>. The workflow publishes to PyPI, then updates the
MCP Registry entries (one per server).
License
MIT. Not affiliated with or endorsed by the NSW Government or Transport for NSW. Data is provided by API.NSW and the TfNSW Open Data Hub under their own terms of use.