mcp-oxidized
The mcp-oxidized server integrates with Oxidized to provide network device configuration management via MCP, allowing you to query, compare, analyze, and retrieve configurations. Key capabilities include:
List all devices: Retrieve all managed devices with details like name, model, group, IP, last backup time, and status.
Find devices: Search by partial/full name or IP (case-insensitive).
Get device status: Backup status and last run for a specified device.
Get device versions: List historical configuration versions with timestamps.
Prepare & retrieve configurations: Stage current configs with
prepare_config, then fetch viaoxidized://config/get_content(prepare-then-read pattern for large outputs).Prepare & retrieve blame: Stage and retrieve annotated configuration blame with
prepare_blameandoxidized://config/get_blame.Inline diff:
get_config_with_inline_diffdisplays current config with inline change markers against a historical version.Unified diff:
get_diff_between_versionsgenerates a diff between any two historical versions with configurable context.
Key behaviors: case-insensitive device matching, bearer token authentication linking prepare and read calls, live data fetching from Oxidized with no caching.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-oxidizedList all devices and show which failed their last backup."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-oxidized
MCP server for Oxidized, a network device configuration backup tool.
It exposes Oxidized data as MCP tools and resources, allowing assistants to query, compare, analyze, and retrieve network device configurations.
Features
Capability | Description |
| List all devices managed by Oxidized |
| Find devices by exact or partial name, full name, or IP address |
| Show backup status and last run details for a device |
| List stored configuration versions for a device |
| Select one or more devices for the current-config resource |
| Retrieve all current configurations selected by |
| Select a device for the static blame resource |
| Retrieve the configuration blame prepared by |
| Show current config with inline change markers against a version |
| Unified diff between two historical versions with configurable context |
All device-specific tools accept an exact device name or a unique partial name. Matching is case-insensitive. If a partial name matches multiple devices, the server returns candidates and asks for a more specific name or group.
Related MCP server: io.github.AIops-tools/network-aiops
Prepared configuration resources
Current configurations can be too large for a tool response. Use prepare_configs
to resolve one or more devices, then read the static multi-content resource. The
prepare tool returns device metadata only and does not load configuration data.
prepare_configs(nodes=["router01"], group="Core")
read oxidized://config/get_contents
prepare_configs(nodes=["router01", "switch02"], group="Core")
read oxidized://config/get_contentsThe resource returns a separate content item for every prepared device. Each item
has a unique oxidized://config/<group>/<node> URI and uses this MIME type:
text/plain; charset=utf-8The client must send the same Bearer token with both the prepare call and the later resource read:
Authorization: Bearer <long-random-token>The server hashes this token and uses the hash only as an in-memory lookup key. The original token is not stored or logged, and it is not validated as an identity credential. This allows selections to survive a client opening different MCP transport sessions for tool calls and resource reads.
Current configuration and blame selections are separate, so both resources can refer to different devices for the same Bearer token. Resource reads fetch the current configuration and required historical versions live from Oxidized. No configuration, version, or blame result is cached or written to a database.
If a resource is read before its matching prepare tool, it returns instructions for the required prepare call. A server restart clears all prepared selections. Run one server worker because prepared selections are intentionally held only in that process memory.
Requirements
Python 3.11+
Oxidized with oxidized-web running and its REST API enabled
Docker, recommended
Quick start
cp .env.example .env
# Edit .env with your Oxidized URL and credentials
docker compose up -dThe MCP server listens on port 8000 using Streamable HTTP transport.
Configuration
Variable | Description | Default |
| Base URL of the Oxidized instance | required |
| Basic Auth username | required |
| Basic Auth password | required |
| MCP server port | 8000 |
MCP client configuration
Configure the client to send a stable Bearer token on every MCP request:
Authorization: Bearer <long-random-token>The token associates prepare_configs and prepare_blame calls with later
resource reads. Treat it as a secret because a caller using the same token can
access and replace that token's prepared selections.
Example prompts
"List all devices and show which ones failed their last backup."
"Find the device containing
HFGBF253in its name.""Show the status of the device matching
253-IT.""List stored versions for
HFGBF253-ITin theFirewallsgroup.""Prepare the current configuration of router01."
"Prepare the current configurations of router01, switch02, and firewall03."
"Prepare configuration blame for switch02."
"Show the current config of switch02 and highlight changes against version 12."
"Show the diff between version 12 and version 14 for firewall01 with 10 lines of context."
Development
pip install -e ".[dev]"
python -m mcp_oxidized.serverLicense
MIT
Available Tools
8 toolsfind_devicesA
Find Oxidized devices by exact or partial name, full name, or IP address. Matching is case-insensitive. Use this before other device tools when only part of a device name is known.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | optional Oxidized device group filter | |
| query | Yes | part of a device name, full device name, full group/name, or IP |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses relevant behavior: 'Matching is case-insensitive' and search by exact/partial name or IP. While it doesn't mention no-match behavior or pagination, the output schema exists and this is a low-risk read-only search, making the disclosure adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and includes the key behavioral detail (case-insensitive) plus usage context. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with two parameters, an output schema, and clear usage guidance, the description is complete. It explains what the tool does, when to use it, and a key matching behavior. No missing critical information that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal semantic value beyond the schema: it clarifies 'exact or partial' matching, but the schema already lists query as 'part of a device name, full device name, full group/name, or IP.' The 'group' parameter is only in the schema, not the description, so no new meaning is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find Oxidized devices by exact or partial name, full name, or IP address.' It uses a specific verb ('find'), identifies the resource ('devices'), and specifies search criteria, distinguishing it from sibling tools like 'list_devices' which likely lists all devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this before other device tools when only part of a device name is known.' This clearly signals the tool's role in the workflow and differentiates it from alternatives like listing all devices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_config_with_inline_diffA
Return the complete current configuration with inline change markers relative to a reference version number. The node may be an exact name or a unique partial name.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, full name, or unique part of the name | |
| group | No | device group in Oxidized (optional) | |
| ref_version | Yes | version number to compare against (1 = oldest, higher = newer) | |
| context_lines | No | if > 0, only show this many unchanged lines around changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It adds behavioral detail like 'inline change markers' and 'node may be an exact name or a unique partial name,' which is useful. However, it does not disclose read-only implications, error behavior, or what happens with invalid reference versions, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the primary functionality and free of unnecessary detail. Every phrase contributes to understanding the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and 100% parameter schema coverage, the description provides enough context for selecting and invoking the tool. It covers the main behavior and node matching but lacks explicit comparison to sibling tools, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description only partially restates the node parameter's matching behavior already documented in the schema, adding no new semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the complete current configuration with inline change markers relative to a reference version, using a specific verb and resource. It conveys the core function but does not explicitly differentiate itself from siblings like get_diff_between_versions, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: when you need the current config with inline diff against a reference version. However, there is no explicit mention of when to use this tool over alternatives such as get_diff_between_versions or prepare_config, and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusA
Return status details for a single device. The node may be an exact name or a unique partial name.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, IP, full name, or unique part of the name | |
| group | No | optional Oxidized device group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses the partial-name matching behavior but does not detail error handling for ambiguous or unmatched names, nor clarify what 'status details' include. This is a useful but limited behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the core purpose and adding a relevant usage nuance. Every word earns its place with no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-device status lookup, the description covers purpose and the key input behavior. The output schema presumably documents the return value. It lacks explicit failure behavior for ambiguous partial names, making it just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (node and group), and the tool description only restates the node matching semantics present in the schema. No additional parameter-level meaning is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return status details for a single device,' using a specific verb and resource. The note about partial name matching distinguishes this from sibling tools that list or find devices, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when status details for a single device are needed, and the partial-name note provides a usage hint. However, it does not explicitly contrast with alternatives like list_devices or find_devices, nor specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_versionsA
Return all available configuration versions for a device. The node may be an exact name or a unique partial name. Versions are numbered oldest-first: version 1 is the oldest and the highest number is the newest. Each entry includes its timestamp and OID.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, full name, or unique part of the name | |
| group | No | device group in Oxidized (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on full responsibility for behavioral disclosure. It adds meaningful details: versions are ordered oldest-first, version numbering semantics, and that each entry includes timestamp and OID. This goes beyond a simple 'returns versions' statement, though it does not cover permission requirements or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, then provides essential details in a structured order. Every sentence carries useful information without redundancy. It is highly concise and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's modest complexity, the description covers the key aspects: what is returned, how the node is interpreted, ordering, and content of each entry. An output schema exists, so detailed return-value documentation is not strictly needed. Missing details like the exact output schema or edge-case behavior are minor, and the description is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters (node, group) with high coverage. The description adds value by explaining that node can be an exact name or a unique partial name, which clarifies the matching behavior beyond the schema's 'full name or unique part'. The group parameter is not mentioned, but the schema covers it, so the description supplements rather than repeats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'all available configuration versions for a device'. It also clarifies partial-name matching, which distinguishes it from sibling tools like list_devices or get_device_status that deal with device lists or status rather than version history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case: retrieve configuration versions for a device by name. It provides context about node matching (exact or unique partial) but does not explicitly mention when to choose this over sibling tools like get_diff_between_versions. There is no exclusions or alternative guidance, but the context is sufficient for a straightforward listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diff_between_versionsA
Return a unified diff between two historical versions of a device configuration. The node may be an exact name or a unique partial name.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, full name, or unique part of the name | |
| group | No | device group in Oxidized (optional) | |
| version_a | Yes | first version number (older) | |
| version_b | Yes | second version number (newer) | |
| context_lines | No | number of unchanged lines to show around each change block |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the output format (unified diff) and mentions that node matching allows partial names, but it does not address error handling, version ordering, or ambiguous matches. This adds some context but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and immediately states the primary purpose in the first sentence. The second sentence adds one key constraint about node matching. Every word earns its place, with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and output schema cover parameters and return format, so the description is adequate for a basic call. However, it lacks guidance on edge cases like version ordering, ambiguous partial-name matches, or how the group parameter affects the lookup. Given the tool's moderate complexity and lack of annotations, the description is only moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well described. The tool description only repeats the node-matching detail already present in the schema and adds no new parameter semantics. Thus, it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a unified diff between two historical versions of a device configuration, which is a specific action with a clear resource. This distinguishes it from sibling tools like get_device_versions (which lists versions) and get_config_with_inline_diff (which likely compares against current config).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly state when to use it versus alternatives, nor does it provide exclusions or prerequisites. The usage context is implied by the action, but no direct comparison to sibling tools is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
Return all devices managed by Oxidized. Each entry includes: name, model, group, ip, last backup time, status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It discloses that the tool returns all devices and enumerates the output fields, but it does not mention potential pagination, sorting, response size, or explicitly confirm read-only behavior. The absence of such details when there are no annotations leaves a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences: the first states the action, the second lists the returned fields. It is front-loaded, free of redundant information, and every sentence contributes meaning, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool, the description adequately specifies the return structure and scope. It could be more complete by referencing sibling tools for filtered queries or noting any pagination/performance characteristics, but these are not essential for correct invocation. The presence of an output schema (even though not explicitly shown) and explicit field listing makes it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there are no parameter specifics to elaborate. The description instead adds value by explaining the output structure (fields), which is the relevant semantic content for a no-input list tool. Baseline of 4 for zero-param tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'all devices managed by Oxidized', which explicitly defines the tool's scope. It lists the included fields (name, model, group, ip, last backup time, status), making it unambiguous and distinguishing it from sibling tools that target specific devices or configurations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for retrieving the complete device list, which implies its use case. However, it does not explicitly contrast with alternatives like find_devices for filtered queries or get_device_status for single-device status, so it lacks explicit when-not/exclusions guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_blameA
Prepare one device's configuration blame for the static get_blame resource. The node may be an exact name or a unique partial name. This tool returns only device metadata; read oxidized://config/get_blame for the annotated config.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, IP, full name, or unique part of the name | |
| group | No | optional Oxidized device group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the tool returns only device metadata and points to another resource for the annotated config, but it does not clarify whether 'prepare' has side effects, requires specific permissions, or is idempotent. This is partial but not full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the tool's purpose, and every sentence contributes: what it does, node flexibility, and where to get the final result. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, full schema coverage, and an output schema, the description is adequately complete. It tells the user what to expect (metadata only) and directs to the follow-up resource, though it could briefly explain why this preparation step is needed versus calling get_blame directly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to restate parameters. It adds the nuance that 'node' can be a unique partial name, but this is already present in the schema description. No additional parameter-level meaning is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Prepare one device's configuration blame' and identifies the target resource ('static get_blame'). It clearly distinguishes from siblings by focusing on blame preparation rather than configuration retrieval or diffing, and notes it returns only metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: as a preparation step for get_blame, with node as exact or unique partial name. It directs the user to read oxidized://config/get_blame for the annotated config, effectively indicating the follow-up resource, though it does not name alternative sibling tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_configA
Prepare one device's current configuration for the static get_content resource. The node may be an exact name or a unique partial name. This tool returns only device metadata; read oxidized://config/get_content for the configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | device hostname, IP, full name, or unique part of the name | |
| group | No | optional Oxidized device group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns only device metadata and not the configuration, and that node can be an exact or unique partial name. Yet it does not explain side effects (if any), failure modes, or permission needs, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, node matching rule, and return type/next step. Front-loaded and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not detail return fields. It clearly explains the tool's role relative to get_content, but omits error behavior and when group might be needed. Still, it is sufficient for a simple preparatory tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description repeats the node matching behavior already in the schema ('exact name or a unique partial name') but does not add meaning beyond it, such as how group interacts with partial names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: preparing one device's current configuration for the static get_content resource. It uses a specific verb ('prepare'), identifies the resource ('device's current configuration'), and distinguishes itself from siblings by tying to get_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is a preparatory step for get_content and directs users to read the actual configuration from oxidized://config/get_content. However, it does not explicitly mention alternatives or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
find_devices - First observed
get_config_with_inline_diff - First observed
get_device_status - First observed
get_device_versions - First observed
get_diff_between_versions - First observed
list_devices - First observed
prepare_blame - First observed
prepare_config
TDQS
Scored across 8 tools
Tools are mostly distinct: list/find/status cover device discovery and health, while version/config/diff tools focus on configuration history. Some overlap exists between get_device_versions, get_config_with_inline_diff, and get_diff_between_versions, but descriptions clarify their specific purposes.
All tool names follow a consistent verb_noun pattern in lowercase snake_case (list_devices, find_devices, get_device_status, prepare_config, etc.). The pattern is predictable and uniform across the set.
8 tools is well within the ideal range for a network device configuration management server. Each tool addresses a distinct aspect of device listing, status, versioning, and configuration diffing without unnecessary redundancy.
Core operations are covered: device discovery, status, version listing, current config, and diffs. However, there is no direct way to retrieve a full historical config version (as opposed to a diff), which is a notable gap for a configuration backup tool.
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Manage CloudPepper servers, Odoo instances, backups, and deployments over MCP.
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides tools to view operational state and change configuration of Nokia SR OS devices using pySROS SDK and FastMCP.1MIT
- AlicenseAqualityAmaintenanceProvides MCP tools for governed multi-vendor network device operations, including configuration management (backup, diff, merge, replace, rollback) and read-only queries (facts, interfaces, BGP, LLDP, ARP) via NAPALM, with optional NetBox source-of-truth integration.33MIT
- FlicenseNot gradedqualityCmaintenanceProvides MCP tools for Cisco Meraki Dashboard API, enabling management of networks, configuration templates, and health checks via natural language commands.-
- AlicenseNot gradedqualityCmaintenanceEnables safe interaction with Juniper Junos devices (SRX firewalls) via MCP, providing operational read tools and a configuration change flow with device-side diff preview and automated rollback.Apache 2.0