MCP server

Use DataQuoll from your AI tools

One remote MCP server, the same data as the API, your own key. Paste the configuration for your client and ask about any place in Australia from inside Claude, Cursor, VS Code, Codex, Windsurf or Zed.

Endpoint
https://dataquoll.io/api/mcp
Transport
Streamable HTTP
Authentication
Your API key as a Bearer header, sent by your client on every call
Tools
19, generated from the same OpenAPI spec as the REST API
Version
1.1.0

Connect your client

Pick your client. Each block is complete; replace the placeholder with your key where one appears.

Claude Code

Where: .mcp.json (project) or ~/.claude.json

One command. Add --scope project to commit the server to a repo for a team, or --scope user to have it in every project.

Terminal
claude mcp add --transport http dataquoll https://dataquoll.io/api/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Cursor

Where: .cursor/mcp.json (project) or ~/.cursor/mcp.json

Cursor reads ${env:...} from your shell, so export DATAQUOLL_API_KEY before launching it and the key never sits in a file.

JSON
{
  "mcpServers": {
    "dataquoll": {
      "url": "https://dataquoll.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:DATAQUOLL_API_KEY}"
      }
    }
  }
}

VS Code and GitHub Copilot

Where: .vscode/mcp.json

The key is servers, not mcpServers. The inputs block prompts for the key once and keeps it in the secret store, which is what the VS Code docs recommend over a literal.

JSON
{
  "inputs": [
    {
      "type": "promptString",
      "id": "dataquoll-key",
      "description": "DataQuoll API key",
      "password": true
    }
  ],
  "servers": {
    "dataquoll": {
      "type": "http",
      "url": "https://dataquoll.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${input:dataquoll-key}"
      }
    }
  }
}

Codex CLI

Where: ~/.codex/config.toml

Codex takes the NAME of an environment variable, not the key. Export DATAQUOLL_API_KEY before starting Codex; it reads the variable at launch, not per call.

TOML
[mcp_servers.dataquoll]
url = "https://dataquoll.io/api/mcp"
bearer_token_env_var = "DATAQUOLL_API_KEY"

Windsurf

Where: ~/.codeium/windsurf/mcp_config.json

Windsurf names the URL key serverUrl. It interpolates ${env:...} the same way Cursor does.

JSON
{
  "mcpServers": {
    "dataquoll": {
      "serverUrl": "https://dataquoll.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:DATAQUOLL_API_KEY}"
      }
    }
  }
}

Zed

Where: settings.json

Zed calls them context_servers. With the header set it connects directly; without one it would try an OAuth flow this server does not have.

JSON
{
  "context_servers": {
    "dataquoll": {
      "url": "https://dataquoll.io/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Claude Desktop

Where: claude_desktop_config.json

Claude Desktop cannot attach a header to a remote server itself (its connector UI takes a URL and OAuth only), so it goes through the mcp-remote bridge. The header is written with NO space after the colon; that is how mcp-remote splits it.

JSON
{
  "mcpServers": {
    "dataquoll": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://dataquoll.io/api/mcp",
        "--header",
        "Authorization:Bearer YOUR_API_KEY"
      ]
    }
  }
}

Any other MCP client

Where: the client's MCP configuration

The shape every Streamable HTTP client understands. The endpoint goes in url and the key in an Authorization header; that is the whole configuration.

JSON
{
  "url": "https://dataquoll.io/api/mcp",
  "headers": {
    "Authorization": "Bearer YOUR_API_KEY"
  }
}

What you can ask

Once connected, the assistant chooses tools itself. These are the kinds of questions it can answer, and what each one needs on the key.

Try askingNeeds
What is happening in South Australia right now? Group the active incidents by type.any key
Which river gauges in Queensland are above their minor flood level today?any key
Has postcode 2480 been covered by a disaster declaration since 2019? List each one.the declarations entitlement
What has been recorded within 5 km of -28.81, 153.28, and which declarations covered that area?the hazard-history entitlement

Every tool

Generated from the OpenAPI spec, so this list is the API. A tool that needs an entitlement your key lacks returns a clear error rather than an empty result, so an empty answer never means not entitled.

ToolWhat it doesNeeds
list_incidentsList all current incidentsany key
get_incidentGet a single incidentany key
nearby_incidentsFind incidents near a locationany key
incident_snapshotAudit trail snapshotany key
list_historical_incidentsHistorical incident data (paid tier)any key
list_statesFeed health by stateany key
declarations_by_postcodeDisaster declaration status for a postcodethe declarations entitlement
declarations_by_pointDisaster declaration status for an exact pointthe declarations entitlement
hazard_history_by_pointObserved record and declared status for an exact pointthe hazard-history entitlement
list_declarationsList/filter declarationsthe declarations entitlement
declaration_by_agrnOne disaster event by AGRN (across sources)the declarations entitlement
get_attributionData source attributionsany key
list_eventsList clustered events (incident intelligence)any key
get_eventGet a single event with optional linked incidentsany key
get_schemaAPI schema and valid enum valuesany key
list_gaugesRiver gauge stations with live flood statusany key
get_gaugeOne gauge with a 6-hour recent windowany key
list_gauge_readingsGauge reading history (paid tier)any key
get_gauge_summaryFlood status counts by state or LGAany key

Limits

Two limits apply. Your key has the monthly quota shown on pricing, and every tool call counts against it exactly as a REST call would. On top of that the MCP endpoint allows 60 calls a minute per IP address, because an agent that misreads a result will happily retry it fifty times; a 429 from that guard tells the client how long to wait.