aussiebb-mcp
MCP server for Aussie Broadband NBN diagnostics, enabling AI assistants to run connection tests, check outages, speed tests, and fault tickets via the MyAussie API.
README
aussiebb-mcp
An MCP server for Aussie Broadband NBN diagnostics — the same tests the MyAussie portal offers under "All Service Tests" (Check/Kick Connection, Loopback, NTD Status/Reset), plus test history, NBN outages, speed test results, and fault tickets. Give your AI assistant the other half of the "is the internet down?" question: when the LAN view says the WAN is dead, these tools say whether it's the ISP/NBN side.
Unofficial API — use at your own risk. This project is not affiliated with or endorsed by Aussie Broadband. It talks to the undocumented MyAussie JSON API (
myaussie-api.aussiebroadband.com.au) — the same API the portal SPA and the Home Assistant integration (pyaussiebb) use — which can change or break without notice. Two tools (kick_connection,ntd_reset) deliberately disconnect your service; they refuse to run withoutconfirm=true, but understand what they do before granting it. Your portal credentials go into an env file — protect it accordingly, and use the API respectfully.
Tools
Services are addressed by a site alias (optional, from
AUSSIEBB_SERVICES), a raw numeric service_id, or 'all'. Read-only
tools default to all; test-running tools require exactly one service.
| Tool | Params | Notes |
|---|---|---|
list_services |
service_type='NBN' |
ids, aliases, plan/speed/POI, WAN IPs |
list_diagnostics |
service='all' |
what AussieBB offers, destructive flags |
check_connection |
service='all' |
instant ISP-side "is it connected" — run this first |
ntd_status |
service, wait=True, timeout_s=180 |
~2 min; link state, uptime, flap count (dropout evidence) |
loopback_test |
service, wait=True, timeout_s=180 |
~2 min; two-way data proof to the NBN box/node |
test_result |
service, test_id |
fetch one run's status/result (for wait=False flows) |
test_history |
service='all', limit=10 |
recent runs with pass/fail summaries |
service_outages |
service='all' |
current + scheduled + resolved NBN/ABB outages |
speed_test_results |
service='all' |
ABB-recorded speed tests |
list_faults |
include_details=True |
open fault tickets (account-wide) |
kick_connection |
service, confirm=False |
DESTRUCTIVE — drops the session (modem swaps); refuses without confirm=true |
ntd_reset |
service, confirm=False, wait, timeout_s |
DESTRUCTIVE — reboots the NBN box; refuses without confirm=true |
run_diagnostic |
test, service, wait, timeout_s, confirm |
escape hatch for any test by name; destructive names still gated |
Failed or unfinished tests carry AussieBB's own "report a fault if" guidance in the response — the API's failure payloads are otherwise bare.
Quick start (stdio)
Most users need exactly two env vars — services are discovered live from the account:
// e.g. Claude Desktop claude_desktop_config.json / Claude Code .mcp.json
{
"mcpServers": {
"aussiebb": {
"command": "uv",
"args": ["run", "--project", "/path/to/aussiebb-mcp", "aussiebb-mcp", "--stdio"],
"env": {
"AUSSIEBB_USERNAME": "you@example.com",
"AUSSIEBB_PASSWORD": "..."
}
}
}
}
Prefer an env file over inline credentials where your client supports it
(uv run --env-file ...). stdio mode has no network surface and skips
bearer auth — the client owns the process.
Configuration
| Env var | Default | Purpose |
|---|---|---|
AUSSIEBB_USERNAME / AUSSIEBB_PASSWORD |
(empty) | MyAussie portal login. Tools error clearly when unset. |
AUSSIEBB_SERVICES |
(empty) | Optional alias=id map, e.g. home=1000001,office=1000002. Aliases become tool vocabulary (and are baked into the server instructions); without it, services are discovered live. |
AUSSIEBB_SESSION_FILE |
~/.local/state/aussiebb-mcp/session.json |
Where the ~1-year login cookie persists (0600, dir 0700). |
PORT |
8329 |
HTTP listen port. |
MCP_BEARER_TOKEN |
(empty) | Required in HTTP mode; server refuses to start without it. Not used in --stdio mode. |
HTTP mode (container)
The bundled Containerfile builds a Streamable HTTP server at /mcp
(stateless). HTTP mode refuses to start without MCP_BEARER_TOKEN;
clients authenticate with Authorization: Bearer <token>.
podman build -t aussiebb-mcp . # or: docker build -t aussiebb-mcp .
podman run -d --name aussiebb-mcp -p 8329:8329 -v abb-state:/data \
-e AUSSIEBB_USERNAME=you@example.com -e AUSSIEBB_PASSWORD=... \
-e AUSSIEBB_SESSION_FILE=/data/session.json \
-e MCP_BEARER_TOKEN=some-long-random-token \
aussiebb-mcp
Persist the session file across restarts (the volume above) — the login
endpoint rate-limits hard, and the cookie lives about a year.
aussiebb_mcp.healthcheck does a full HTTP round-trip to /mcp (the 401
counts as alive); wire it to your container healthcheck. Terminate TLS at
a reverse proxy — the server itself speaks plain HTTP.
API notes (hard-won)
- Login (
POST myaussie-auth.../login) returns amyaussie_cookievalid ~1 year. The endpoint is aggressively rate-limited (429) — the client persists the session to disk, logs in lazily, re-logs-in at most once per request on 401/419 (invalidating in memory only, so a failed re-login can't destroy a persisted cookie), and serializes login behind a lock. Never retry-loop a 429. - Check and Kick share one URL (
/broadband/{sid}/connection): GET = harmless check, POST = drops the session. Dispatch is strictly name → (path, method) via theTESTSregistry; thelinkfield from the available-tests response is never blind-POSTed. - Async tests return a record immediately
(
status: WaitingToBeQueued) and are polled atGET /tests/{sid}/{test_id}throughInProgresstoCompleted(result: Passed|Failed), ~115 s total in practice.
Testing
# Tier 1+2 — pure units + mocked-transport client/server logic
# (no network, no credentials — fully fabricated fixtures)
uv run --extra test pytest tests/ --ignore=tests/test_integration.py -v
# Tier 3 — live read-only API tests (login, services, check_connection,
# history, outages; starts no test runs, changes nothing)
AUSSIEBB_TEST=1 AUSSIEBB_USERNAME=... AUSSIEBB_PASSWORD=... \
uv run --extra test pytest tests/test_integration.py -v
# optional: one live NTD Status run (~2 min, shows up in portal history)
AUSSIEBB_TEST=1 AUSSIEBB_TEST_RUN=1 AUSSIEBB_USERNAME=... AUSSIEBB_PASSWORD=... \
uv run --extra test pytest tests/test_integration.py -v
kick_connection and ntd_reset are never exercised by any automated
tier.
License
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。