GenieACS-MCP
A tiny bridge that exposes any GenieACS instance as an MCP v1 (JSON-RPC for LLMs) server written in Go.
✨ What you get
| Resources | Consume GenieACS data read-only | genieacs://device/{id}
genieacs://file/{name}
genieacs://tasks/{id}
genieacs://devices/list
genieacs://presets/list
genieacs://provisions/list
genieacs://faults/{id} |
| Tools | Invoke actions on a CPE through GenieACS | reboot_device
download_firmware
refresh_parameter
set_parameter
get_parameter
manage_preset
manage_provision
search_devices
tag_device
connection_request
delete_task
retry_task |
Everything is exposed over a single JSON-RPC endpoint (/mcp).
LLMs / Agents can: initialize → readResource → listTools → callTool … and so on.
🚀 Quick-start (Docker Compose)
Follow instructions from https://github.com/GeiserX/genieacs-container, it is included in the docker compose file there.
📦 Install via npm (stdio transport)
npx genieacs-mcp
Or install globally:
npm install -g genieacs-mcp
genieacs-mcp
This downloads the pre-built Go binary for your platform and runs it with stdio transport, compatible with any MCP client.
🛠 Local build
git clone https://github.com/GeiserX/genieacs-mcp
cd genieacs-mcp
cp .env.example .env && $EDITOR .env
go run ./cmd/server
🔧 Configuration
ACS_URL | http://localhost:7557 | GenieACS NBI endpoint (without trailing /) |
ACS_USER | (empty) | GenieACS NBI basic-auth username |
ACS_PASS | (empty) | GenieACS NBI basic-auth password |
TRANSPORT | (empty = HTTP) | Set to stdio for stdio transport |
DEVICE_LIMIT | 500 | Max devices returned by genieacs://devices/list |
MCP_LISTEN_ADDR | 127.0.0.1:8080 | HTTP listen address (only used when TRANSPORT is not stdio) |
MCP_AUTH_TOKEN | (empty) | Bearer token for HTTP transport auth. Required when MCP_LISTEN_ADDR is non-loopback |
MCP_ALLOWED_HOSTS | (empty) | Comma-separated extra Host header values to accept (e.g. a reverse-proxy domain). Loopback names on the listen port are always allowed |
MCP_ALLOWED_ORIGINS | (empty) | Comma-separated extra browser Origin values to accept (e.g. https://my-ai-app.com) |
Security — HTTP transport. The HTTP transport validates the Host and
Origin headers on every request to prevent DNS rebinding
from a malicious web page reaching a local listener. Requests with an
untrusted Host, or a present-but-untrusted Origin, are rejected with
403. Loopback access works with no configuration; if you expose the server
through a reverse proxy or a hostname, add that name to MCP_ALLOWED_HOSTS
(and MCP_ALLOWED_ORIGINS for browser clients). The stdio transport is
unaffected and remains the recommended mode for local MCP clients.
Put them in a .env file (from .env.example) or set them in the environment.
Testing
Tested with Inspector and it is currently fully working. Before making a PR, make sure this MCP server behaves well via this medium.
Lacks Testing with actual MCP clients (client LLMs), so please, submit your PRs to improve descriptions in case it fails to adequately match the services offered by this MCP server.
Example configuration for client LLMs:
{
"schema_version": "v1",
"name_for_human": "GenieACS-MCP",
"name_for_model": "genieacs_mcp",
"description_for_human": "Full CPE management through GenieACS — parameter read/write, presets, provisions, firmware, tags, search, and task lifecycle.",
"description_for_model": "Interact with a GenieACS TR-069 Auto-Configuration-Server (ACS) that manages CPE devices (routers, ONTs, gateways). First call initialize, then reuse the returned session id in header \"Mcp-Session-Id\" for every other call. Use readResource to fetch URIs that begin with genieacs:// (devices, presets, provisions, faults). Use listTools to discover available actions (parameter read/write, presets, provisions, tags, search, task management) and callTool to execute them.",
"auth": { "type": "bearer", "token": "<MCP_AUTH_TOKEN value>" },
"api": {
"type": "jsonrpc-mcp",
"url": "http://localhost:8080/mcp",
"init_method": "initialize",
"session_header": "Mcp-Session-Id"
},
"logo_url": "https://raw.githubusercontent.com/GeiserX/genieacs-container/main/extra/logo.png",
"contact_email": "acsdesk@protonmail.com",
"legal_info_url": "https://github.com/GeiserX/genieacs-mcp/blob/main/LICENSE"
}
Credits
GenieACS – the best open-source ACS
MCP-GO – modern MCP implementation
GoReleaser – painless multi-arch releases
Maintainers
@GeiserX.
Contributing
Feel free to dive in! Open an issue or submit PRs.
GenieACS-MCP follows the Contributor Covenant Code of Conduct.
GenieACS Ecosystem
This project is part of a broader set of tools for working with GenieACS:
Other MCP Servers by GeiserX