librenms-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Logging level | INFO |
| SENTRY_DSN | No | Sentry DSN for error tracking (optional) | |
| LIBRENMS_URL | Yes | URL of the LibreNMS instance (e.g., https://domain.tld:8443) | |
| DISABLED_TAGS | No | Comma-separated list of tags to disable tools for | |
| MCP_HTTP_HOST | No | Host to bind the HTTP server | 0.0.0.0 |
| MCP_HTTP_PORT | No | Port to bind the HTTP server | 8000 |
| MCP_TRANSPORT | No | Transport type: stdio, sse, or http | stdio |
| LIBRENMS_TOKEN | Yes | API token for LibreNMS authentication | |
| READ_ONLY_MODE | No | Set true to disable all write operations | false |
| LIBRENMS_TIMEOUT | No | Connection timeout in seconds | 30 |
| RATE_LIMIT_ENABLED | No | Enable rate limiting | false |
| LIBRENMS_VERIFY_SSL | No | Enable SSL certificate verification | true |
| TOOL_SEARCH_ENABLED | No | Replace full tool listings with search_tools + call_tool | false |
| TOOL_SEARCH_STRATEGY | No | Search strategy: bm25 or regex | bm25 |
| MCP_HTTP_BEARER_TOKEN | No | Optional bearer token for HTTP authentication | |
| RATE_LIMIT_MAX_REQUESTS | No | Maximum requests allowed per window | 100 |
| TOOL_SEARCH_MAX_RESULTS | No | Maximum number of tools returned by search_tools | 5 |
| RATE_LIMIT_WINDOW_MINUTES | No | Window size in minutes | 1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| alerts_getB | Get alerts from LibreNMS with optional filters. |
| alert_get_by_idA | Get a specific alert from LibreNMS by ID. |
| alert_acknowledgeA | Acknowledge an alert in LibreNMS by ID. |
| alert_unmuteA | Unmute an alert in LibreNMS by ID. |
| alert_rules_listC | List all alert rules from LibreNMS. Returns: dict: The JSON response from the API. |
| alert_rule_getA | Get details for a specific alert rule by ID. |
| alert_rule_addB | Add a new alert rule to LibreNMS. |
| alert_rule_editB | Edit an existing alert rule in LibreNMS. |
| alert_rule_deleteA | Delete an alert rule from LibreNMS by ID. |
| alert_templates_listB | List all alert templates from LibreNMS. Returns: dict: The JSON response from the API. |
| alert_template_getA | Get a specific alert template from LibreNMS by ID. |
| alert_template_createB | Create a new alert template in LibreNMS. |
| alert_template_editA | Edit an existing alert template in LibreNMS. |
| bills_listB | List bills from LibreNMS with optional filters. |
| bill_getA | Get a specific bill from LibreNMS by ID. |
| bill_graphA | Render a bill graph as an image. For the underlying numbers rather than a picture, use bill_graph_data. |
| bill_graph_dataB | Get bill graph data from LibreNMS. |
| bill_historyB | Get bill history from LibreNMS. |
| bill_history_graphA | Render a graph for a past billing period as an image. For the underlying numbers rather than a picture, use bill_history_graph_data. |
| bill_history_graph_dataB | Get bill history graph data from LibreNMS. |
| bill_create_or_updateA | Create or update a bill in LibreNMS. |
| bill_deleteA | Delete a bill from LibreNMS by ID. |
| devices_listA | List devices from LibreNMS with optional filters. |
| device_addB | Add a new device to LibreNMS. |
| device_getA | Get device details from LibreNMS by hostname. |
| device_deleteA | Delete a device from LibreNMS by hostname. |
| device_updateA | Update device fields in LibreNMS. |
| device_portsB | List ports for a device from LibreNMS. |
| device_ports_getB | Get port info for a device by interface name. |
| device_availabilityA | Get device availability from LibreNMS. |
| device_outagesC | Get device outages from LibreNMS. |
| device_set_maintenanceB | Set device maintenance in LibreNMS. |
| devicegroups_listA | List all device groups from LibreNMS. Returns: dict: The JSON response from the API. |
| devicegroup_addA | Add a new device group to LibreNMS. |
| devicegroup_updateB | Update a device group in LibreNMS. |
| devicegroup_deleteB | Delete a device group from LibreNMS by name. |
| devicegroup_devicesB | List devices in a device group from LibreNMS. |
| devicegroup_set_maintenanceC | Set maintenance for a device group in LibreNMS. |
| devicegroup_add_devicesA | Add devices to a device group in LibreNMS. |
| devicegroup_remove_devicesA | Remove devices from a device group in LibreNMS. |
| device_discoverB | Trigger device rediscovery in LibreNMS. |
| device_renameB | Rename a device in LibreNMS. |
| device_maintenance_statusA | Check if a device is currently in maintenance mode. |
| device_vlansB | Get VLANs configured on a specific device. |
| device_linksB | Get network links for a specific device. |
| device_eventlog_addB | Add a custom event log entry for a device. |
| device_fdbA | List the forwarding database (learned MAC addresses) for a device. Each entry carries the port_id it was learned on, so this is the device-wide view of what is plugged into a switch. |
| device_nacA | List network access control (802.1X / MAB) sessions on a device. Shows authenticated endpoints per port, including the authentication method and the assigned VLAN where the device reports it. |
| device_graphs_listA | List the graph types available for a device. Use this to discover the values accepted by the |
| device_graphA | Render a device-level graph as an image. |
| port_graphA | Render a per-port graph as an image, for example interface traffic. Some LibreNMS releases fail to render through the per-port endpoint and answer 500 with an empty graph type in the message. For 'bits' this tool then falls back to the port-group endpoint, which renders the same traffic data, so callers still get a graph without needing a port ID. |
| port_group_graphA | Render a traffic graph for one or more ports, by port ID. Plots every supplied port on the same axes, which makes it useful for comparing members of a LAG. Unlike port_graph this takes numeric port IDs rather than interface names. |
| health_listA | List available health graphs for a device. |
| health_by_typeA | Get health data by sensor type for a device. |
| health_sensor_getA | Get a specific sensor by ID for a device. |
| sensors_listA | List all sensors across all devices. |
| inventory_deviceC | Get inventory for a device from LibreNMS. |
| inventory_device_flatA | Get flattened inventory for a device from LibreNMS. |
| locations_listB | List locations from LibreNMS. |
| location_addA | Add a new location to LibreNMS. |
| location_deleteA | Delete a location from LibreNMS by identifier. |
| location_editB | Edit a location in LibreNMS. |
| location_getB | Get a specific location from LibreNMS by identifier. |
| location_set_maintenanceB | Set maintenance mode for all devices in a location. |
| logs_eventlogA | Get event logs for a device from LibreNMS. |
| logs_syslogB | Get syslogs for a device from LibreNMS. |
| logs_alertlogA | Get alert logs for a device from LibreNMS. |
| logs_authlogA | Get authentication logs from LibreNMS. Auth logs are server-wide rather than per-device, so this takes no hostname. |
| logs_syslogsinkC | Add a syslog entry to LibreNMS via API sink. |
| arp_searchB | Retrieve ARP entries from LibreNMS by search query. |
| bgp_sessionsA | List BGP sessions from LibreNMS with optional filters. Returns: dict: The JSON response from the API. |
| bgp_session_getA | Get BGP session from LibreNMS by ID. |
| bgp_session_editA | Edit BGP session in LibreNMS by ID. |
| routing_ip_addressesA | List all IP addresses from LibreNMS. Returns: dict: The JSON response from the API. |
| switching_vlansB | List all VLANs from LibreNMS. Returns: dict: The JSON response from the API. |
| switching_linksB | List all links from LibreNMS. Returns: dict: The JSON response from the API. |
| fdb_lookupB | Look up a MAC address in the forwarding database. |
| ospf_listB | List all OSPF instances from LibreNMS. Returns: dict: The JSON response from the API. |
| ospf_portsC | List all OSPF ports/interfaces from LibreNMS. Returns: dict: The JSON response from the API. |
| vrf_listA | List all VRF (Virtual Routing and Forwarding) instances from LibreNMS. Returns: dict: The JSON response from the API. |
| nac_listA | List network access control (802.1X / MAB) sessions across all devices. Note that LibreNMS answers with a 404 and "Nac entry does not exist" rather than an empty list when nothing matches. |
| oxidized_listA | List devices tracked by Oxidized for config backup. |
| oxidized_config_getA | Get the stored device configuration from Oxidized for a specific device. |
| oxidized_config_searchA | Search all Oxidized device configurations for a string. |
| poller_group_getB | Get poller group(s) from LibreNMS. |
| port_security_listA | List port security configuration across all devices. Covers switchport port-security state such as the maximum number of learned MAC addresses, violation mode and current status. |
| port_security_deviceA | Get port security configuration for every port on a device. |
| port_security_portA | Get port security configuration for a single port. |
| ports_listA | Get all ports from LibreNMS with optional filters. |
| ports_searchA | Search ports in LibreNMS by search string. |
| ports_search_fieldB | Search ports in LibreNMS by specific field. |
| ports_search_macA | Search ports in LibreNMS by MAC address. |
| port_getA | Get port info from LibreNMS by port ID. |
| port_ip_infoA | Get port IP info from LibreNMS by port ID. |
| port_transceiverA | Get port transceiver info from LibreNMS by port ID. |
| port_description_getA | Get port description from LibreNMS by port ID. |
| port_description_updateB | Update port description in LibreNMS by port ID. |
| port_groups_listB | List port groups from LibreNMS. Returns: dict: The JSON response from the API. |
| port_group_addB | Add a port group to LibreNMS. |
| port_group_list_portsA | List ports in a port group from LibreNMS. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mhajder/librenms-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server