WAC510 MCP
A local FastMCP server for one NETGEAR WAC510 access point. It talks directly to the stock firmware's local HTTPS interface and keeps one asynchronous connection pool open for efficient calls.
The WAC510 protocol is undocumented. This implementation was validated against production firmware V9.9.6.8.
The server targets one AP per process. It does not use NETGEAR Insight, SSH, or SNMP.
Requirements
- Python 3.14.7
- uv
- A WAC510 reachable through its local management URL
Expected startup failures are rendered as concise Rich panels with corrective guidance. Unexpected programming errors retain their tracebacks.
Install the locked environment:
uv sync
After the first PyPI release, run the server without cloning the repository:
uvx wac510-mcp
Run
Start the local OAuth-protected HTTP server:
uv run wac510-mcp
Connect your MCP client to:
http://127.0.0.1:8000/mcp
The MCP client's OAuth flow opens a page titled WAC510 MCP. Enter the access point URL, username, password, and optional connection settings. The server verifies that the device is a WAC510 before authorization completes.
Example URL-based MCP configuration:
{
"mcpServers": {
"wac510": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
The server always hides FastMCP's startup banner. No environment variable or launch flag is required.
Add to Codex
First, keep the server running in a terminal:
uvx wac510-mcp@latest
In another terminal, add its Streamable HTTP endpoint and start OAuth:
codex mcp add wac510 --url http://127.0.0.1:8000/mcp
codex mcp login wac510 --oauth-client-registration dcr
Your browser opens the WAC510 MCP setup page. Enter the AP connection settings and authorize the client. Confirm the connection with:
codex mcp list
You can also enter /mcp inside Codex to inspect the server and its tools. Codex CLI, the IDE extension, and the desktop app share the same MCP configuration. See the official OpenAI MCP documentation.
Add to Claude Code
Keep uvx wac510-mcp@latest running, then add the server at user scope so it is available in every project:
claude mcp add \
--transport http \
--scope user \
wac510 \
http://127.0.0.1:8000/mcp
Open Claude Code and enter:
/mcp
Select wac510, authenticate, and complete the setup page in your browser. Verify the saved configuration with:
claude mcp get wac510
See the official Claude Code MCP documentation.
The OAuth transport is HTTP, not stdio. Both clients connect to the running URL; they do not launch uvx through a command entry. The server listens only on this machine by default.
Stored settings
Settings are saved under the platform's user configuration directory. On Linux, the default location is:
~/.config/wac510-mcp/
settings.enc contains the encrypted AP configuration, oauth.enc contains OAuth client registrations and tokens, and settings.key contains their local encryption key. All files use owner-only permissions, and the password is never rendered back into the setup page. OAuth access and refresh tokens survive server restarts while retaining expiration, client binding, rotation, and revocation behavior.
TLS verification defaults to off because the AP normally uses a self-signed certificate. The setup page can enable verification or specify a private CA bundle.
Safety
Read tools run immediately. Configuration writes require confirm=true. Disruptive operations require the exact tokens returned in their tool descriptions:
REBOOTRESTORE_CONFIGURATIONUPGRADE_FIRMWAREFACTORY_RESET
The raw tools make the server maximally capable. They expose the AP's private JSON protocol, so inspect a read payload before applying it.
For example, read an arbitrary firmware field with raw_query:
{
"payload": {
"system": {
"basicSettings": {
"apName": ""
}
}
}
}
Pass the returned hierarchy with changed leaf values to apply_configuration first without confirmation. Review its redacted preview, then repeat the call with confirm=true.
Tools
list_capabilitiesandlist_endpointsdescribe the reverse-engineered surface.device_info,list_clients,radio_status, andtraffic_statisticsprovide common reads.query_capabilitiesreads any selection of 18 management domains with bounded concurrency.raw_queryaccepts any/socketCommunicationread selector.apply_configurationapplies arbitrary configuration after a preview and confirmation.raw_requestcalls any discovered JSON endpoint with endpoint-specific confirmation.download_fileandupload_filesupport logs, configuration, packet captures, ACL files, restore, and firmware files.rebootandfactory_resetrequire exact confirmation tokens.
Development
uv run pytest
uv run mypy src tests
Releasing
The release workflow publishes a new version to PyPI, creates a matching GitHub Release, attaches the wheel and source archive, and adds provenance attestations. Start a patch release from any clean checkout with:
just release
Choose another semantic version increment when needed:
just release minor
just release major
The recipe updates main, runs the local gate, bumps pyproject.toml and uv.lock, pushes main, fast-forwards and pushes release, then switches the checkout back to main. Use just sync-release to synchronize the branches without changing the version.
The live test suite is read-only and opt-in. Its environment variables exist only for automated testing; normal users configure the server through OAuth:
WAC510_LIVE_TEST=1 uv run pytest tests/test_live_readonly.py -q
Metadata
Release files for wac510-mcp 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wac510_mcp-0.1.4.tar.gz | 21.7 kB | With provenance | Details for wac510_mcp-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wac510_mcp-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for wac510_mcp-0.1.4-py3-none-any.whl |
Total release size: 48.6 kB
Release files / wac510_mcp-0.1.4.tar.gz
| Download URL | wac510_mcp-0.1.4.tar.gz |
|---|---|
| Size | 21.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b545db229b4089c8ce9b87191bab90a0d482c268cd49c50a766415f069752229
|
|
BLAKE2b-256 checksum How to use checksums |
e617f0d317ec253fa5ff06bebfaa6626fb906d5aada220c213be21ec3afb775a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / wac510_mcp-0.1.4-py3-none-any.whl
| Download URL | wac510_mcp-0.1.4-py3-none-any.whl |
|---|---|
| Size | 26.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6848a71cf5265a84b93b1f03f4d3842b3e8b970ead1856dc6c2674b4e201d82b
|
|
BLAKE2b-256 checksum How to use checksums |
7493ce7c648a78c603b63bb1611cfea29201283240c57f056db7d55d552183e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logSecurity for wac510-mcp 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for wac510_mcp-0.1.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.