oxidized-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 to enable error tracking and performance monitoring. | |
| OXIDIZED_URL | Yes | Base URL of oxidized-web (include the url_prefix if one is configured). Required for the server to connect to Oxidized. | |
| MCP_HTTP_HOST | No | Host to bind the HTTP server when using sse or http transport. | 127.0.0.1 |
| MCP_HTTP_PORT | No | Port to bind the HTTP server when using sse or http transport. | 8000 |
| MCP_TRANSPORT | No | Transport type: stdio, sse, or http. | stdio |
| READ_ONLY_MODE | No | Set to true to disable operations (trigger_node_backup, reload_nodes). | false |
| SENTRY_RELEASE | No | Sentry release version (auto-detected from package if not set). | |
| OXIDIZED_TIMEOUT | No | Request timeout in seconds. | 30 |
| OXIDIZED_PASSWORD | No | Optional HTTP Basic auth password for oxidized-web behind a reverse proxy. | |
| OXIDIZED_USERNAME | No | Optional HTTP Basic auth username for oxidized-web behind a reverse proxy. | |
| RATE_LIMIT_ENABLED | No | Set to true to enable rate limiting. | false |
| SENTRY_ENABLE_LOGS | No | Enable Sentry log capture as breadcrumbs and events. | true |
| SENTRY_ENVIRONMENT | No | Sentry environment name (e.g. production, staging). | |
| OXIDIZED_VERIFY_SSL | No | Whether to enable SSL certificate verification. | true |
| TOOL_SEARCH_ENABLED | No | Set to true to replace full tool listings with search_tools + call_tool. | false |
| TOOL_SEARCH_STRATEGY | No | Search strategy: bm25 (natural language) or regex (pattern match). | bm25 |
| MCP_HTTP_BEARER_TOKEN | No | Optional bearer token for HTTP transport authentication. | |
| OXIDIZED_DISABLED_TAGS | No | Comma-separated list of tags to disable tools for. | |
| OXIDIZED_SEARCH_TIMEOUT | No | Timeout for search_configs (oxidized-web reads every configuration). | 300 |
| RATE_LIMIT_MAX_REQUESTS | No | Maximum requests allowed per rate limit window. | 60 |
| SENTRY_SEND_DEFAULT_PII | No | Include personally identifiable information in Sentry. | false |
| TOOL_SEARCH_MAX_RESULTS | No | Maximum number of tools returned by search_tools. | 5 |
| SENTRY_PROFILE_LIFECYCLE | No | Sentry profiling lifecycle mode: all, continuation, or trace. | trace |
| OXIDIZED_REDACT_NODE_VARS | No | Redact node vars (often device credentials) in tool output. | true |
| RATE_LIMIT_WINDOW_MINUTES | No | Rate limit window size in minutes. | 1 |
| SENTRY_TRACES_SAMPLE_RATE | No | Sentry performance monitoring sample rate (0.0-1.0). | 1.0 |
| SENTRY_PROFILE_SESSION_SAMPLE_RATE | No | Sentry continuous profiling sample rate (0.0-1.0). | 1.0 |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_nodesA | List nodes (network devices) managed by Oxidized. Returns each node's name, full name (group/name), IP, group, model, last run status and time, and last run details. Node vars are redacted unless redaction is disabled in the server configuration. Pass a group or model on large installations: they are filtered by Oxidized itself, so only matching nodes are transferred. The group must match exactly; use find_nodes when unsure of the name. |
| get_nodeA | Get details of a single Oxidized node. Returns the node's name, full name, IP, group, model, vars and details of its last backup run (start, end, status, duration). |
| find_nodesA | Find nodes by partial name, full name or IP address. Useful to resolve an ambiguous device name before calling other tools. Exact matches are listed first, then prefix matches, then other substring matches (all case-insensitive). |
| get_backup_statsA | Summarise backup health across Oxidized nodes. Computed from the node list (oxidized-web's own stats JSON is not usable): counts per last-run status, per group and per model, the success rate, and lists of failed nodes, nodes never backed up and stale nodes. Optionally limited to one group or model, filtered by Oxidized itself. "Stale" means Oxidized has not attempted a backup within the threshold (e.g. it is not polling the node); nodes that are attempted but keep failing are listed under failed_nodes instead. Oxidized does not expose the time of the last successful backup, and its run history is kept in memory only (reset on restart). Right after trigger_node_backup a node briefly shows as never backed up, because Oxidized clears its last run while it is queued. |
| get_node_configA | Get the latest backed-up configuration of a node. Large configurations are paged by lines: when 'truncated' is true, call again with offset set to 'next_offset' to read the rest. |
| search_configsA | Search the latest configurations of all nodes for a pattern. oxidized-web first finds the nodes whose configuration matches, then those configurations are fetched to return the matching lines with line numbers. Use this to answer questions such as "which devices still have telnet enabled" or "where is VLAN 42 configured". The pattern must be valid in both Ruby (oxidized-web) and Python regular expressions - stick to common syntax. Lines are matched one at a time, so patterns spanning several lines find nodes but no lines. |
| list_node_versionsA | List the stored configuration versions of a node, newest first. Each version has its git oid, date, author and commit message. Requires the Oxidized 'git' (or 'gitcrypt') output. |
| get_node_versionA | Get the configuration of a node as it was at a specific version. Large configurations are paged by lines: when 'truncated' is true, call again with offset set to 'next_offset' to read the rest. |
| diff_node_versionsA | Show what changed in a node's configuration between two versions. Returns a unified diff from 'base_oid' (older) to 'oid' (newer). With no arguments besides the node it shows the most recent change. |
| trigger_node_backupA | Queue an immediate configuration backup of a node. Oxidized moves the node to the head of its queue; the backup itself runs asynchronously. Check get_node afterwards for the run result, and list_node_versions for a new version if the configuration changed. Oxidized picks the node by name or IP only (no group), so node names must be unique - otherwise the first node with that name is queued. |
| reload_nodesA | Reload the Oxidized node list from its source (router.db, SQL, HTTP, ...). Use after devices were added, removed or changed in the source so Oxidized picks up the change without waiting for its next refresh. Always reloads every node: oxidized-web's per-node reload (/reload?node=X) replaces the whole in-memory node list with just the matching nodes, so it is deliberately not offered. Returns: Dictionary with Oxidized's response message |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: listing vs searching nodes, fetching node metadata vs configuration, viewing versions vs diffs, and explicit actions like triggering backups and reloading. Even overlapping tools like get_node and get_node_config are separated by their outputs (device details vs configuration content).
All 11 tools follow a consistent verb_noun snake_case pattern (e.g., list_nodes, get_node_config, diff_node_versions). Verbs are descriptive and uniform, with no style mixing or vague generic names.
11 tools is well-scoped for an Oxidized MCP server. Each tool serves a distinct function in the backup management workflow—discovery, inspection, search, versioning, and operational triggers—without redundancy or excessive granularity.
The surface covers the full lifecycle of Oxidized operations: discovering nodes (list/find), checking backup health (stats), retrieving configs (current and historical), comparing versions, triggering backups, and refreshing the node list. No obvious dead ends or missing operations for the stated purpose.