The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the LibreNMS MCP listing page.
LibreNMS MCP Server is a Python-based Model Context Protocol (MCP) server designed to provide advanced, programmable access to LibreNMS network monitoring data and management features. It exposes a modern API for querying, automating, and integrating LibreNMS resources such as devices, ports, alerts, inventory, locations, logs, and more. The server supports both read and write operations, robust security features, and is suitable for integration with automation tools, dashboards, and custom network management workflows.
The easiest way to get started is to install from PyPI:
Remember to configure the environment variables for your LibreNMS instance before running the server:
For more details, visit: https://pypi.org/project/librenms-mcp/
A Docker images are available on GitHub Packages for easy deployment.
For development with additional tools:
devices_list: List all devices (with optional filters)device_get: Get details for a specific devicedevice_add: Add a new devicedevice_update: Update device metadatadevice_delete: Remove a devicedevice_ports: List all ports for a devicedevice_ports_get: Get details for a specific port on a devicedevice_fdb: List the forwarding database (learned MACs) for a devicedevice_nac: List network access control (802.1X / MAB) sessions on a devicedevice_availability: Get device availabilitydevice_outages: Get device outagesdevice_set_maintenance: Set device maintenance modedevice_discover: Discover or add a device using provided credentialsdevice_rename: Rename an existing devicedevice_maintenance_status: Get the maintenance status for a devicedevice_vlans: List VLANs for a devicedevice_links: List links for a devicedevice_eventlog_add: Add an event log entry for a deviceinventory_device: Get inventory for a deviceinventory_device_flat: Get flat inventory for a devicedevicegroups_list: List device groupsdevicegroup_add: Add a device groupdevicegroup_update: Update a device groupdevicegroup_delete: Delete a device groupdevicegroup_devices: List devices in a device groupdevicegroup_set_maintenance: Set maintenance for a device groupdevicegroup_add_devices: Add devices to a device groupdevicegroup_remove_devices: Remove devices from a device grouplocations_list: List all locationslocation_add: Add a locationlocation_edit: Edit a locationlocation_delete: Delete a locationlocation_get: Get details for a locationlocation_set_maintenance: Set maintenance for a locationports_list: List all ports (with optional filters)ports_search: Search ports (general search)ports_search_field: Search ports by a specific fieldports_search_mac: Search ports by MAC addressport_get: Get details for a specific portport_fdb: List MAC addresses learned on a portport_ip_info: Get IP address information for a portport_transceiver: Get transceiver information for a portport_description_get: Get a port descriptionport_description_update: Update a port descriptionport_groups_list: List port groupsport_group_add: Add a port groupport_group_list_ports: List ports in a port groupport_group_assign: Assign ports to a port groupport_group_remove: Remove ports from a port groupport_security_list: List port security configuration across all devicesport_security_device: Get port security configuration for a deviceport_security_port: Get port security configuration for a single portGraphs are returned as MCP images. LibreNMS serves SVG on current releases and PNG on older ones; the MIME type is taken from the response.
device_graphs_list: List the graph types available for a devicedevice_graph: Render a device-level graph (e.g. device_icmp_perf)port_graph: Render a per-port graph by interface name (bits, upkts, errors, etherlike)port_group_graph: Render a traffic graph for one or more ports by port IDport_graph falls back to the port-group endpoint for bits when the per-port
endpoint fails, which works around LibreNMS releases that return a 500 naming an
empty graph type.
alerts_get: List current and historical alertsalert_get_by_id: Get details for a specific alertalert_acknowledge: Acknowledge an alertalert_unmute: Unmute an alertalert_rules_list: List alert rulesalert_rule_get: Get details for a specific alert rulealert_rule_add: Add an alert rulealert_rule_edit: Edit an alert rulealert_rule_delete: Delete an alert rulealert_templates_list: List all alert templatesalert_template_get: Get a specific alert templatealert_template_create: Create a new alert templatealert_template_edit: Edit an alert templatelogs_eventlog: Get event log for a devicelogs_syslog: Get syslog for a devicelogs_alertlog: Get alert log for a devicelogs_authlog: Get auth log for a devicelogs_syslogsink: Add a syslog sinkbills_list: List billsbill_get: Get details for a billbill_graph: Render a bill graph as an imagebill_graph_data: Get bill graph databill_history: Get bill historybill_history_graph: Render a bill history graph as an imagebill_history_graph_data: Get bill history graph databill_create_or_update: Create or update a billbill_delete: Delete a billoxidized_list: List devices tracked by Oxidized for config backupoxidized_config_get: Get the stored configuration for a specific deviceoxidized_config_search: Search all stored device configurations for a stringarp_search: Search ARP entries
poller_group_get: Get poller group(s)
routing_ip_addresses: List all IP addresses from LibreNMS.
services_list: List all services from LibreNMS.
services_for_device: Get services for a device from LibreNMS.
service_add: Add a service to LibreNMS
service_edit: Edit an existing service
service_delete: Delete a service
bgp_sessions: List BGP sessions
bgp_session_get: Get details for a specific BGP session
bgp_session_edit: Edit a BGP session
fdb_lookup: Lookup forwarding database (FDB) entries
nac_list: List network access control (802.1X / MAB) sessions across all devices
ospf_list: List OSPF instances
ospf_ports: List OSPF ports
vrf_list: List VRFs
ping: Ping the LibreNMS system
health_list: List health sensors
health_by_type: List health sensors by type
health_sensor_get: Get details for a health sensor
sensors_list: List sensors
switching_vlans: List all VLANs from LibreNMS.
switching_links: List all links from LibreNMS.
system_info: Get system info from LibreNMS.
Flexible filtering and search for all major resources (devices, ports, alerts, logs, inventory, etc.)
To prevent overloading LLM contexts when querying large LibreNMS production instances, all list, search, and log tools support pagination.
limit: The maximum number of results to return (defaults to 100, minimum 1).offset (or start for log tools): The number of results to skip.limit: The active limit.offset (or start): The active offset.count: The number of items returned in the current page.total: The total number of items available (for log tools, this is provided if returned by the LibreNMS API).The server supports a read-only mode that disables all write operations for safe monitoring:
You can disable specific categories of tools by setting disabled tags:
FastMCP tool search can reduce prompt size for servers with many tools.
When enabled, list_tools returns two synthetic tools:
search_tools: Finds matching tools and returns their full schemascall_tool: Executes any discovered tool by nameEnable it with:
bm25 supports natural language queries, while regex uses a regex pattern input for deterministic matching.
Tool search respects existing visibility controls (read-only mode and disabled tags).
The server supports rate limiting to control API usage and prevent abuse. If enabled, requests are limited per client using a sliding window algorithm.
Enable rate limiting by setting the following environment variables in your .env file:
If RATE_LIMIT_ENABLED is set to true, the server will apply rate limiting middleware. Adjust RATE_LIMIT_MAX_REQUESTS and RATE_LIMIT_WINDOW_MINUTES as needed for your environment.
The server optionally supports Sentry for error tracking, performance monitoring, and debugging. Sentry integration is completely optional and only initialized if configured.
To enable Sentry monitoring, install the optional dependency:
Enable Sentry by setting the SENTRY_DSN environment variable in your .env file:
When enabled, Sentry automatically captures:
.env fileSentry is completely optional. If you don't set SENTRY_DSN, the server will run normally without any Sentry integration, and no monitoring data will be collected.
The server supports SSL certificate verification and custom timeout settings:
The server supports multiple transport mechanisms for the MCP protocol:
The default transport uses standard input/output for communication. This is ideal for local usage and integration with tools that communicate via stdin/stdout:
For network-based deployments, you can use HTTP with Server-Sent Events. This allows the MCP server to be accessed over HTTP with real-time streaming:
When using SSE transport with a bearer token, clients must include the token in their requests:
The HTTP Streamable transport provides HTTP-based communication with request/response streaming. This is ideal for web integrations and tools that need HTTP endpoints:
When using streamable transport with a bearer token:
Note: The HTTP transport requires proper JSON-RPC formatting with jsonrpc and id fields. The server may also require session initialization for some operations.
For more information on FastMCP transports, see the FastMCP documentation.
git checkout -b feature/amazing-feature)uv run pytest && uv run ruff check .)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)MIT License - see LICENSE file for details.