NDIS Provider Feed

io.github.benno303由 GitHub 帳號 benno303 發布v1.0.1更新於 Oct 25, 2026

Agent-readable search over the NDIS Provider Register (CC BY 4.0 AU) by location and service.

已驗證Streamable HTTP可網頁執行位置與生活網頁搜尋與抓取

概覽

AI 產生的概覽

一個遠端 MCP 伺服器,讓助理依總部所在地與服務類別搜尋澳洲 NDIS 服務提供者登記冊,並依 ABN 查詢單一提供者的完整紀錄。

可以做什麼
依郊區、州、郵遞區號與服務類別搜尋提供者,預設只回傳目前核准的提供者,可選擇納入已撤銷者並限制結果數量。依 ABN 取得單一提供者的完整紀錄,包括註冊狀態、到期日、服務類別、網站與下屬據點。列出 38 個有效的 NDIS 服務類別,作為搜尋篩選條件。
適用情境
適合在需要尋找澳洲某地或某服務類別的已註冊 NDIS 身心障礙支持提供者,或從公開登記冊核實某提供者的註冊狀態與詳細資料時使用。
執行需求
遠端 streamable HTTP 端點;不需要身分驗證、API 金鑰或環境變數。任何支援 streamable HTTP 的 MCP 用戶端皆可連線。端點閒置時會縮容至零,安靜期後首次呼叫可能需要數秒。
安裝前請注意
並非官方來源,與 NDIS 委員會或 NDIA 無關;它鏡像公開登記冊,可能落後最多一週,依註冊狀態做決定前應核對官方登記冊。位置篩選只比對總部,而非實際提供服務的地點,且據點地址經常缺漏。未出現在登記冊中不代表提供者不合法。每次工具呼叫會記錄時間戳、工作階段 ID、使用者代理與搜尋參數,Cloud Run 日誌另會記錄 IP 位址,日誌保留 30 天。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 NDIS Provider Feed,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.benno303%2Fndis-provider-feed/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "ndis-provider-feed": {
      "type": "http",
      "url": "https://ndis-provider-feed-125475360011.australia-southeast1.run.app/mcp"
    }
  }
}

README

NDIS Provider Feed

An MCP server that makes Australia's NDIS Provider Register, the official register of disability support providers, available as clean, structured data that AI assistants and agents can query directly.

The register is public, but the only official way to search it is a web form and a bulk CSV with one row per outlet. This feed turns it into one record per provider, keyed by ABN, with search by location and service category.

  • Free, no sign-up. The register feed is free and will stay free.
  • Refreshed weekly from the official register by an automated job, with checks that block a bad refresh from going live.
  • Hosted in Sydney on Google Cloud Run.
  • Listed on the official MCP Registry as io.github.benno303/ndis-provider-feed.

Not an official source. This project isn't affiliated with or endorsed by the NDIS Quality and Safeguards Commission or the NDIA. It mirrors their public register and can lag it by up to a week. Check the official register before relying on a provider's registration status for any decision.

Quick start

Endpoint (streamable HTTP, no auth):

https://ndis-provider-feed-125475360011.australia-southeast1.run.app/mcp

This is an MCP endpoint, not a web page. Opening it in a browser shows a "Bad Request" error. That's expected.

Claude Code:

claude mcp add --transport http ndis-provider-feed https://ndis-provider-feed-125475360011.australia-southeast1.run.app/mcp

Claude Desktop / claude.ai: add a custom connector with the endpoint URL above.

Any other MCP client: point it at the endpoint URL using the streamable HTTP transport.

Then ask something like "Find NDIS providers offering Supported Independent Living in Cardiff, NSW".

Tools

ToolWhat it does
search_providersSearch by head office location and/or service category. Returns currently Approved providers by default, sorted by business name.
get_providerFull record for one provider, by ABN.
list_service_categoriesThe 38 valid NDIS registration groups to use as service_category.

search_providers parameters (all optional):

ParameterMatch
suburbCase-insensitive partial match on head office suburb
stateExact, e.g. NSW, VIC
postcodeExact 4-digit postcode
service_categoryExact, one of list_service_categories()
include_revokedInclude providers whose registration was revoked (default false)
limitMax results (default 20)

Example

Request:

json
{ "tool": "search_providers",  "arguments": { "suburb": "Cardiff", "state": "NSW", "service_category": "Supported Independent Living", "limit": 1 } }

Each result is a provider record like this (shortened):

json
{  "provider_id": "60632514455",  "business_name": "ADRASTEIA SERVICES PTY LTD",  "legal_name": "ADRASTEIA SERVICES PTY LTD",  "entity_type": "organisation",  "registration_status": "Approved",  "registration_expiry": "2027-10-29",  "service_categories": ["Behaviour Support", "Support Coordination", "Supported Independent Living", "..."],  "has_registration_conditions": true,  "website": "https://www.adrasteia.com.au",  "head_office": { "suburb": "CARDIFF", "state": "NSW", "postcode": "2285", "country": "AU" },  "outlets": [ { "name": "Head Office", "address": "10 Harrison Street, CARDIFF, NSW, 2285, AU", "phone": "..." } ],  "last_verified": "2026-10-12T22:54:37Z",  "source": { "register": "NDIS Provider Register", "licence": "CC BY 4.0 AU", "retrieved_at": "2026-10-12T22:54:37Z" }}

Full field definitions are in schema/ndis-provider.schema.json, and the reasoning behind each mapping is in schema/ndis-provider-schema-notes.md.

The data

  • Source: the NDIS Provider Register bulk CSV, published by the NDIS Quality and Safeguards Commission.
  • Coverage (13 Oct 2026): 29,574 providers. 27,359 are currently Approved; 2,215 have had their registration revoked and are kept for history, but are only returned when you ask for them.
  • Freshness: every record carries last_verified, the time it was last pulled from the register. feed-status.json shows the date and counts of the latest refresh.
  • Shape: the source has one row per outlet. Here those rows are grouped into one record per provider (ABN), with outlets nested. Where a provider's outlets list different service categories, the record includes all of them.

Known limitations

  • Location means head office only. It doesn't cover where a provider actually delivers services. Outlet addresses are present for only about half of outlets in the source, and service areas aren't in the register at all.
  • Registered providers only. Unregistered providers aren't on the register, and plan-managed and self-managed participants can use them. "Not found" means "not on the register", not "not legitimate".
  • Only what the register publishes. There are no reviews, availability, pricing or specialisations. The website is blank for about a quarter of providers.
  • Registration conditions are a yes/no flag (has_registration_conditions). The source text is long and inconsistently encoded, so it isn't republished yet.
  • Results are sorted alphabetically, not by relevance.

Privacy

  • Sole traders: many are registered under their own personal name. For these records (entity_type: "individual"), the personal legal name is withheld and only the trading name is shown. The licence would allow republishing it, but finding a provider doesn't need it.
  • What's logged: each tool call logs a timestamp, the MCP session ID, the client's user-agent and the search parameters. Cloud Run's standard request logs also record IP addresses. Logs are used only to tell real usage apart from automated crawlers, and are deleted after 30 days.

Corrections

This feed mirrors the official register. If a provider's details are wrong, the fix has to be made with the NDIS Commission, and it will flow through at the next weekly refresh.

Licence and attribution

  • Code: MIT © 2026 Ben Armstrong.
  • Data: contains information from the NDIS Provider Register, © NDIS Quality and Safeguards Commission, used under Creative Commons Attribution 4.0 Australia (CC BY 4.0 AU). The data has been restructured (grouped by provider, fields parsed, sole traders' legal names withheld). If you reuse data from this feed, keep that attribution.

Status and feedback

This is an early-stage project, built and run by Ben Armstrong (@benno303). There's no uptime guarantee, and the endpoint scales to zero when idle, so the first call after a quiet period can take a few seconds.

I'm exploring whether there's a sustainable business in keeping provider information reliable for AI assistants. Anything paid would sit on top of this feed; the register feed itself stays free.

Feedback, bug reports and "this would be useful if…" ideas are very welcome. Please open an issue.

Running it yourself

Requires Python 3.10+.

pip install -r requirements.txt
# Run locally over stdio against the bundled 10-record samplepython mcp_server/server.py
# Build the full feed from a fresh download of the registercurl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -o register.csv https://www.ndiscommission.gov.au/provider-registration/find-registered-provider/download-csvpython ingest/ingest_ndis.py register.csv mcp_server/data/ndis_providers.jsonlpython ingest/validate_feed.py mcp_server/data/ndis_providers.jsonlpython mcp_server/server.py --data mcp_server/data/ndis_providers.jsonl
# Serve over HTTP (binds 0.0.0.0, port from $PORT, default 8000)python mcp_server/server.py --data mcp_server/data/ndis_providers.jsonl --transport streamable-http
# End-to-end check over the real MCP protocolpython mcp_server/test_server.py mcp_server/data/ndis_providers.jsonl

The register download is about 40 MB and takes a minute or two to generate. The Commission's server doesn't respond to non-browser user-agents (curl's default just hangs), hence the -A flag.

Notes on the MCP Python SDK (2.x)

  • Tools raise ToolError for expected failures (e.g. ABN not found), so the client gets a readable is_error=True result. Any other exception is treated as a server crash.
  • Tools returning a list come back in structured_content. Tools returning a dict (like get_provider) come back as JSON text in content[0].text, so clients should handle both.

來源:README.md,提交 002b654

工具

3

search_providers

Search NDIS providers by head office location and/or service category. Location filters match the provider's head office, not individual outlets — outlet addresses are inconsistently populated in the source register (~54%), so head office is the more reliable location signal for Phase 0. Args: suburb: Case-insensitive substring match against head office suburb. state: Exact match, e.g. "NSW", "VIC". postcode: Exact 4-digit postcode match. service_category: Exact match against one of the known NDIS registration groups — call list_service_categories() for the valid values. include_revoked: If false (default), only "Approved" providers are returned. limit: Max results to return (default 20).

輸入參數limitstatesuburbpostcodeinclude_revokedservice_category

get_provider

Get the full record for a single provider by its ABN (provider_id).

輸入參數provider_id必填

list_service_categories

List the valid NDIS service category values usable in search_providers().

無需輸入參數。

版本歷史

2
  1. v1.0.1最新Oct 13, 2026
  2. v1.0.0Sep 17, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。