Aussie Broadband MCP Server — usage monitoring, outage tracking, and line diagnostics
Project description
aussiebb-blade-mcp
An MCP server that gives AI agents structured access to Aussie Broadband accounts. Built for the Model Context Protocol with token efficiency and operational security as first-class design goals.
Why this exists
Aussie Broadband has no public API program. The MyAussie portal API is undocumented and session-authenticated — not designed for programmatic access. The community-maintained pyaussiebb library (MIT, 6 years, powers the Home Assistant integration) has done the reverse-engineering work. This MCP wraps it with the guardrails that automated agents need:
- Token-efficient output — compact pipe-delimited format. A full service listing in ~50 tokens per service. Usage summaries with human-readable units (GB, %) and billing period context.
- Credential isolation — passwords and session cookies scrubbed from all error output. Bearer token auth for HTTP transport. No credential caching beyond the session.
- Diagnostic safety gate — line tests (connection check, port reset, loopback) require explicit opt-in via
ABB_DIAGNOSTICS_ENABLED=trueand per-callconfirm=true. Port resets and connection kicks briefly interrupt service. - Multi-account — manage home and business accounts from a single MCP instance. Each account authenticates independently.
How this differs from other ISP tools
| aussiebb-blade-mcp | Home Assistant integration | Raw pyaussiebb | |
|---|---|---|---|
| Interface | MCP tools (any LLM agent) | HA entities + automations | Python library |
| Output | Token-optimised text | Sensor values | Raw dicts |
| Multi-account | Native (env var config) | One account per integration | Manual |
| Diagnostic safety | Double-gated (env + confirm) | Exposed as buttons | No gate |
| Auth transport | Bearer token + stdio | HA auth | None |
| Credential handling | Scrubbed from all output | HA secrets | Caller's responsibility |
Quick start
# Install
uv pip install -e .
# Configure
export ABB_USERNAME="your.email@example.com"
export ABB_PASSWORD="your-myaussie-password"
# Run
aussiebb-blade-mcp
12 tools, 5 categories
Account & Services (3 tools)
| Tool | Purpose | Token cost |
|---|---|---|
abb_info |
Health check — accounts, connection status, service count, diagnostics gate | ~40 |
abb_services |
List all services (broadband, VOIP, Fetch TV) with plan, tech, speed | ~50/svc |
abb_service |
Full detail for one service — address, POI, technology type | ~120 |
Usage Monitoring (2 tools)
| Tool | Purpose | Token cost |
|---|---|---|
abb_usage |
Broadband usage: download, upload, remaining, billing period, % used | ~80 |
abb_telephony |
Telephony breakdown: national, mobile, international, SMS, voicemail | ~60 |
Network & Outages (1 tool)
| Tool | Purpose | Token cost |
|---|---|---|
abb_outages |
Network events, ABB outages, NBN outages (current, scheduled, resolved) | ~40/outage |
Billing & Support (3 tools)
| Tool | Purpose | Token cost |
|---|---|---|
abb_billing |
Transactions by month (configurable depth) | ~30/txn |
abb_tickets |
Support tickets: ref, status, subject, date | ~30/ticket |
abb_orders |
Pending orders: ID, status, type | ~30/order |
Diagnostics (3 tools, gated)
| Tool | Purpose | Token cost |
|---|---|---|
abb_boltons |
Service add-ons (data blocks, extras) | ~25/bolton |
abb_tests |
Available diagnostic tests + optional history | ~20/test |
abb_run_test |
Execute a test (loopback, linestate, port reset, etc.) | ~80 |
Output format
id=12345 | NBN: Home Broadband | plan=250/25 Mbps | loc=Sydney | tech=FTTP | speed=TC4
id=67890 | VOIP: Home Phone | plan=VOIP Basic
Downloaded: 146.5GB
Uploaded: 24.4GB
Total used: 170.9GB
Allowance: 976.6GB
Used: 17%
Remaining: 805.7GB
Billing period: 12/30 days remaining
Multi-account support
Manage multiple ABB accounts (household + business, parent + child) from a single MCP instance:
export ABB_ACCOUNTS="home,office"
export ABB_HOME_USERNAME="home@example.com"
export ABB_HOME_PASSWORD="home-password"
export ABB_OFFICE_USERNAME="office@example.com"
export ABB_OFFICE_PASSWORD="office-password"
Pass account="office" to any tool to target a specific account. Omit for the first configured account.
Single-account mode (plain ABB_USERNAME/ABB_PASSWORD) remains fully supported.
Security model
| Layer | Mechanism |
|---|---|
| Credential scrubbing | Passwords, cookies, and tokens stripped from all error output |
| Diagnostics gate | ABB_DIAGNOSTICS_ENABLED=true required for any line test |
| Test confirmation | abb_run_test additionally requires confirm=true |
| Bearer auth | Optional ABB_MCP_API_TOKEN for HTTP transport |
| Session isolation | Each account authenticates independently; no credential sharing |
| No persistence | Credentials read from env at startup, never written to disk |
| Rate limiting | Automatic backoff on 429 responses from ABB API |
| MFA awareness | Documents MFA requirement for plan changes; does not bypass |
Sidereal integration
Add to your MCP config:
{
"mcpServers": {
"aussiebb": {
"type": "stdio",
"command": "uv",
"args": ["--directory", "~/src/aussiebb-blade-mcp", "run", "aussiebb-blade-mcp"],
"env": {
"ABB_USERNAME": "...",
"ABB_PASSWORD": "...",
"ABB_DIAGNOSTICS_ENABLED": "false"
}
}
}
}
Webhook trigger patterns
The outage and usage tools are designed for downstream automation:
- Outage monitoring —
abb_outagesreturns structured outage data suitable for Sidereal WatchPaths triggers or scheduled polling. Detect new outages, scheduled maintenance windows, and resolution events. - Usage threshold alerts —
abb_usagereturns percentage-used and days-remaining, enabling threshold-based alerting (e.g. "notify at 80% usage with 10+ days remaining"). - Service status changes —
abb_servicesreturns service status, enabling detection of suspensions, activations, or plan changes.
Development
make install-dev # Install with dev + test dependencies
make test # Unit tests (mocked API, no ABB account needed)
make check # Lint + format + type-check
make run # Start MCP server (stdio)
Architecture
src/aussiebb_blade_mcp/
├── server.py — FastMCP 2.0 server, 12 @mcp.tool decorators
├── client.py — ABBClient with multi-account, credential scrubbing, session management
├── formatters.py — Token-efficient output (pipe-delimited, null omission, human units)
├── models.py — Account config, diagnostics gate, constants
└── auth.py — Bearer token middleware for HTTP transport
Built with FastMCP 2.0 and pyaussiebb.
Testing
make test # Unit tests (mocked)
make test-cov # With coverage report
make test-e2e # Live account tests (requires ABB_E2E=1 + real credentials)
Acknowledgements
- yaleman/pyaussiebb — the reverse-engineering work that makes this possible
- Home Assistant aussie_broadband — production validation of the underlying API surface
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aussiebb_blade_mcp-0.2.0.tar.gz.
File metadata
- Download URL: aussiebb_blade_mcp-0.2.0.tar.gz
- Upload date:
- Size: 146.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dbc0150061ae7c98c883d13f2e7005ea7e877b0cda44abff98a181a4d620497
|
|
| MD5 |
5168d599e3c6d4963d4545b34eb70245
|
|
| BLAKE2b-256 |
a68ccfdfc864c9e8d20f19f971293a699944c6d24a610eb148baa923ce470510
|
Provenance
The following attestation bundles were made for aussiebb_blade_mcp-0.2.0.tar.gz:
Publisher:
publish.yml on Groupthink-dev/aussiebb-blade-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aussiebb_blade_mcp-0.2.0.tar.gz -
Subject digest:
9dbc0150061ae7c98c883d13f2e7005ea7e877b0cda44abff98a181a4d620497 - Sigstore transparency entry: 1396190446
- Sigstore integration time:
-
Permalink:
Groupthink-dev/aussiebb-blade-mcp@a81b01d18819f1bf86aee5c6edebe82750fa0f60 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Groupthink-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a81b01d18819f1bf86aee5c6edebe82750fa0f60 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aussiebb_blade_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: aussiebb_blade_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f257d33af86e0be14834e8551f3856a9419d261194e0318c6efa25efe649f51
|
|
| MD5 |
d19d91bfe973a5d1ea772c233495f0f7
|
|
| BLAKE2b-256 |
e97e1d29c998cb50ff8eedb3287686493b40a913f8e8c03c09f0e728c4753f16
|
Provenance
The following attestation bundles were made for aussiebb_blade_mcp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Groupthink-dev/aussiebb-blade-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aussiebb_blade_mcp-0.2.0-py3-none-any.whl -
Subject digest:
3f257d33af86e0be14834e8551f3856a9419d261194e0318c6efa25efe649f51 - Sigstore transparency entry: 1396190457
- Sigstore integration time:
-
Permalink:
Groupthink-dev/aussiebb-blade-mcp@a81b01d18819f1bf86aee5c6edebe82750fa0f60 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Groupthink-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a81b01d18819f1bf86aee5c6edebe82750fa0f60 -
Trigger Event:
push
-
Statement type: