GenieACS-MCP Server

1

Add it to Claude Code

Run this in a terminal.

Run in terminal
claude mcp add genieacs-mcp -- npx genieacs-mcp
README.md

A tiny bridge that exposes any GenieACS instance as an MCP v1 server

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

Type What for MCP URI / Tool id
Resources Consume GenieACS data read-only genieacs://device/{id}``genieacs://file/{name}``genieacs://tasks/{id}``genieacs://devices/list
Tools Invoke actions on a CPE through GenieACS reboot_device``download_firmware``refresh_parameter

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-docker, 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

# (optional) create .env from the sample
cp .env.example .env && $EDITOR .env

go run ./cmd/server

🔧 Configuration

Variable Default Description
ACS_URL http://localhost:7557 GenieACS NBI endpoint (without trailing /)
ACS_USER admin GenieACS username
ACS_PASS admin GenieACS password
TRANSPORT (empty = HTTP) Set to stdio for stdio transport

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": "Read data from GenieACS and run actions on CPEs (reboot, firmware update, parameter refresh).",
  "description_for_model": "Interact with an Auto-Configuration-Server (ACS) that manages routers. 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://. Use listTools to discover available actions and callTool to execute them.",
  "auth": { "type": "none" },
  "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-docker/master/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 Cove

Tools (3)

reboot_deviceInvoke a reboot action on a specific CPE through GenieACS
download_firmwareTrigger a firmware download on a CPE
refresh_parameterRefresh a specific parameter on a CPE

Environment Variables

ACS_URLGenieACS NBI endpoint (without trailing /)
ACS_USERGenieACS username
ACS_PASSGenieACS password
TRANSPORTSet to stdio for stdio transport

Configuration

claude_desktop_config.json
{"mcpServers": {"genieacs": {"command": "npx", "args": ["-y", "genieacs-mcp"], "env": {"ACS_URL": "http://localhost:7557", "ACS_USER": "admin", "ACS_PASS": "admin"}}}}

Try it

List all devices currently connected to the GenieACS instance.
Reboot the device with ID '12345-Router-ABC'.
Refresh the 'InternetGatewayDevice.DeviceInfo.SoftwareVersion' parameter for device '12345-Router-ABC'.
Check the status of the latest firmware download task for my router.

Frequently Asked Questions

What are the key features of GenieACS-MCP?

Exposes GenieACS device data as read-only MCP resources. Supports remote CPE actions including reboot and firmware download. Allows parameter refreshing via JSON-RPC. Written in Go for high performance and portability. Supports both HTTP and stdio transport modes.

What can I use GenieACS-MCP for?

Automating router maintenance tasks like reboots during off-peak hours. Querying device firmware versions across a fleet of CPEs via LLM. Troubleshooting connectivity issues by refreshing specific TR-069 parameters. Managing firmware deployment workflows through natural language commands.

How do I install GenieACS-MCP?

Install GenieACS-MCP by running: npx genieacs-mcp

What MCP clients work with GenieACS-MCP?

GenieACS-MCP works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep GenieACS-MCP docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare