PluginBench
MCP Server
Active
GPL-3.0

io.github.GeiserX/genieacs-mcp MCP Server

io.github.GeiserX/genieacs-mcp

MCP server for GenieACS TR-069 ACS: manage routers, ONTs and CPE devices through natural language

What is the io.github.GeiserX/genieacs-mcp MCP server?

The genieacs-mcp server bridges GenieACS TR-069 ACS instances to LLMs, enabling AI assistants to query and manage CPE devices like routers and ONTs. It exposes 7 resources and 12 tools for searching devices, reading parameters, and executing management tasks such as reboots and firmware updates. The server runs as a single Go binary with no external database, connecting via HTTP to a GenieACS NBI endpoint.

genieacs-mcp lets you interact with your GenieACS deployment through natural language. Ask Claude or Cursor to find devices by tag, model, or firmware; read device parameters and task history; reboot devices; push firmware updates; or manage presets and provisions. It's designed for network operators who want AI-assisted device management without leaving the chat interface.

How to install io.github.GeiserX/genieacs-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • ACS_URL
    required

    GenieACS NBI API URL (e.g. http://genieacs:7557)

  • ACS_USER

    GenieACS NBI basic-auth username

  • ACS_PASS
    secret

    GenieACS NBI basic-auth password

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "genieacs-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "genieacs-mcp"
      ],
      "env": {
        "ACS_URL": "<YOUR_ACS_URL>",
        "ACS_USER": "<YOUR_ACS_USER>",
        "ACS_PASS": "<YOUR_ACS_PASS>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • search_devices — Find devices using MongoDB-style filters by tag, model, firmware, last inform time, or any TR-069 parameter
  • get_parameter — Read a specific TR-069 parameter value from a device
  • reboot_device — Queue a reboot task on a device
  • push_firmware — Queue a firmware push task to a device
  • refresh_parameter — Refresh or refresh all parameters on a device
  • set_parameter — Set a TR-069 parameter value on a device
  • connection_request — Wake a device with a connection request
  • tag_device — Add or remove tags on a device
  • create_preset — Create a preset on the ACS
  • delete_preset — Delete a preset from the ACS
  • create_provision — Create a provision on the ACS
  • delete_provision — Delete a provision from the ACS

Use cases

  • Find all devices that stopped reporting in the last 24 hours and investigate their status
  • Query device firmware versions and push updates to specific device groups tagged as 'pilot'
  • Reboot unresponsive routers or ONTs and monitor their reconnection
  • Read and modify TR-069 parameters (e.g., WiFi settings, DNS) across multiple CPE devices
  • Manage device presets and provisions to automate configuration tasks

io.github.GeiserX/genieacs-mcp MCP server FAQ

What is genieacs-mcp?

It's an MCP server that connects Claude, Cursor, or other MCP clients to a GenieACS TR-069 ACS instance, allowing you to search, query, and manage CPE devices (routers, ONTs, modems) through natural language.

Is genieacs-mcp free?

Yes, it is open-source under the GPL-3.0-or-later license.

How do I install it in Claude Desktop or Cursor?

Add a configuration block to your client's mcpServers config (e.g., in Claude Desktop's claude_desktop_config.json) with command 'npx' and args ['-y', 'genieacs-mcp'], plus the ACS_URL environment variable pointing to your GenieACS NBI endpoint.

What authentication does genieacs-mcp require?

It requires access to a GenieACS NBI endpoint (default port 7557). For HTTP transport, you can optionally set a bearer token and configure DNS rebinding protection.

Can I use genieacs-mcp without an existing GenieACS?

No, you need a running GenieACS instance. The project provides a demo stack via docker-compose that includes GenieACS, MongoDB, and a simulated CPE device for testing.

What are the read-only versus write operations?

Read operations include search_devices, get_parameter, and seven resources (device info, parameter tree, tasks, faults, presets, provisions, files). Write operations include reboot, firmware push, parameter set, tagging, and preset/provision management.

README (reference)

Source of truth, from the repository.

<p align="center"> <img src="https://raw.githubusercontent.com/GeiserX/genieacs-mcp/main/docs/images/banner.svg" alt="genieacs-mcp" width="100%"> </p> <p align="center"> <a href="https://www.npmjs.com/package/genieacs-mcp"><img src="https://img.shields.io/npm/v/genieacs-mcp?style=flat-square&logo=npm" alt="npm"></a> <a href="https://github.com/GeiserX/genieacs-mcp/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/GeiserX/genieacs-mcp/ci.yml?style=flat-square&logo=github&label=CI" alt="CI"></a> <a href="https://github.com/GeiserX/genieacs-mcp/blob/main/LICENSE"><img src="https://img.shields.io/github/license/GeiserX/genieacs-mcp?style=flat-square" alt="License"></a> <a href="https://hub.docker.com/r/drumsergio/genieacs-mcp"><img src="https://img.shields.io/docker/pulls/drumsergio/genieacs-mcp?style=flat-square&logo=docker" alt="Docker Pulls"></a> <a href="https://github.com/GeiserX/genieacs-mcp/stargazers"><img src="https://img.shields.io/github/stars/GeiserX/genieacs-mcp?style=flat-square&logo=github" alt="GitHub Stars"></a> </p>

genieacs-mcp is an MCP server for GenieACS, the open-source TR-069 ACS that manages routers, ONTs and other CPE devices. Add it to Claude Desktop, Cursor or any other MCP client and ask in plain words: which devices stopped informing last night, what firmware serial 000003 runs, reboot the ones tagged pilot. The assistant reads and acts through your GenieACS NBI with 7 resources and 12 tools; one Go binary, no database of its own.

<p align="center"> <img src="https://raw.githubusercontent.com/GeiserX/genieacs-mcp/main/docs/images/screenshots/search-devices.png" alt="MCP Inspector connected to genieacs-mcp: the search_devices tool run with the query _tags residential, and the result listing simulated Huawei BM632w devices with their ids, manufacturer, last inform and tags" width="100%"> </p>

Features

  • Find devices the way you would ask a colleague: by tag, model, firmware, last inform, or any TR-069 parameter (search_devices takes a MongoDB-style filter).
  • Read a device's full parameter tree, its tasks and its faults, plus the presets, provisions and files on the ACS, as resources (genieacs://device/{id}, genieacs://devices/list, ...).
  • Reboot a device, push firmware to it, refresh or set a parameter, or wake it with a connection request, from a chat.
  • Tag devices, create or delete presets and provisions, and delete or retry tasks, so the assistant can fix what it finds.
  • Every tool description says what it does, its limits and an example, so clients pick the right one without a prompt from you.
  • Read versus act: search_devices, get_parameter and the seven resources only read; the other ten tools queue a task on a device or change the ACS.
  • No read-only mode: point it at an ACS you are willing to let an assistant act on, and keep your client's tool-approval prompts on.
  • Safe on a laptop: the HTTP transport listens on loopback only unless you set an address and a bearer token, and checks Host and Origin against DNS rebinding.
  • One static Go binary for Linux, macOS and Windows on amd64 and arm64, also as an npm package (npx genieacs-mcp) and a Docker image.

Quick start

You need a GenieACS whose NBI (port 7557) this machine can reach; without one, the family's demo stack gives you an ACS with a simulated router in about a minute:

curl -fsSLO https://raw.githubusercontent.com/GeiserX/genieacs-container/main/docker-compose.yml
docker compose --profile testing up -d      # GenieACS + MongoDB + one simulated CPE, NBI on localhost:7557

Then add the server to a client that reads an mcpServers block (Claude Desktop, Cursor, Claude Code; in VS Code the .vscode/mcp.json key is servers):

{
  "mcpServers": {
    "genieacs": {
      "command": "npx",
      "args": ["-y", "genieacs-mcp"],
      "env": { "ACS_URL": "http://localhost:7557" }
    }
  }
}

It worked when you ask "which devices does the ACS know about?" and the assistant answers with device ids such as 202BC1-BM632w-000000 (the demo stack) or your own. Docker, the HTTP transport and a local build are in Getting started.

Documentation

The full documentation is at geiserx.github.io/genieacs-mcp.

  • Getting started: npm, Docker Compose, local build, and what the first exchange looks like
  • Configuration: every environment variable, the HTTP transport's security model, client config for stdio and HTTP
  • Usage: the 7 resources and 12 tools with their arguments, which ones act on devices, example prompts
  • Development: tests, trying the server with MCP Inspector, contributing
  • Related projects: the GenieACS family, other MCP servers, where this server is listed

Related projects

Listed in the official MCP Registry as io.github.GeiserX/genieacs-mcp. Part of the GenieACS family: genieacs-container (the ACS itself, Docker and Helm, with this server as a compose profile), genieacs-sim-container, genieacs-ansible, genieacs-ha, genieacs-services, and n8n-nodes-genieacs (archived).

License

GPL-3.0-or-later

Related MCP servers

MCP server for LynxPrompt — browse, search, and manage AI configuration blueprints

1
Go
GPL-3.0
View repository →

MCP server for Pumperly — query fuel prices, find stations, and plan routes

1
Go
GPL-3.0
View repository →

MCP server exposing Spinnaker CD platform via Gate API for pipeline and deployment management

3
Go
GPL-3.0
View repository →

MCP server for Telegram Archive — search messages, browse chats, and access history

3
Go
GPL-3.0
View repository →

Read and change VPN Bypass (macOS) routing: domain lists, services, modes, kernel routes, logs

1
Go
MIT
View repository →

A headless painting engine for AI agents: brushes, paint load, wet blending, canvas texture.

View repository →