Skip to main content
Glama
dbono711

Cisco NSO MCP Server

by dbono711

Cisco NSO MCP Server

A Model Context Protocol (MCP) server implementation for Cisco NSO (Network Services Orchestrator) that exposes NSO data and operations as MCP primitives (Tools, Resources, etc.) that can be consumed by an MCP-compatible client, enabling AI-powered network automation through natural language interactions.

Sample Custom Client

demo

Related MCP server: Cisco NSO MCP Server

What is MCP?

Model Context Protocol (MCP) is an open protocol that standardizes how AI models interact with external tools and services. MCP enables:

  • Tool Definition: Structured way to define tools that AI models can use

  • Tool Discovery: Mechanism for models to discover available tools

  • Tool Execution: Standardized method for models to call tools and receive results

  • Context Management: Efficient passing of context between tools and models

  • Framework Agnostic: Works across multiple AI frameworks including OpenAI, Anthropic, Google Gemini, and others

  • Interoperability: Provides a common language for AI systems to communicate with external tools

Features

  • Stdio Transport: By default, this MCP server uses stdio transport for process-bound communication

  • Tool-First Design: Network operations are defined as discrete tools with clear interfaces

  • Asynchronous Processing: All network operations are implemented asynchronously for better performance

  • Structured Responses: Consistent response format with status, data, and metadata sections

  • Environment Resources: Provides contextual information about the NSO environment

  • NSO Integration: Uses cisco-nso-restconf library for a clean, Pythonic interface to NSO's RESTCONF API

  • Flexible Logging: Configurable logging to stdout and/or file via environment variables. When the LOG_FILE environment variable is set, logs are sent to both stdout and the specified file. If the log file cannot be created or written to, the server falls back to stdout-only logging with an error message

  • Multiple Client Support: Works with any MCP-compatible client including Windsurf Cascade and custom Python applications

Available Tools and Resources

Tools

Tool Name

Description

Inputs

Returns

get_device_ned_ids

Retrieves Network Element Driver (NED) IDs from Cisco NSO

A dictionary with a list of NED IDs

get_device_groups

Retrieves device groups from Cisco NSO

A dictionary with a list of device groups

get_device_platform

Gets platform information for a specific device in Cisco NSO

'device_name' (string)

A dictionary with platform information for the specified device

get_device_config

Gets full configuration for a specific device in Cisco NSO

'device_name' (string)

A dictionary with configuration for the specified device

get_device_state

Gets state for a specific device in Cisco NSO

'device_name' (string)

A dictionary with state for the specified device

check_device_sync

Checks sync status for a specific device in Cisco NSO

'device_name' (string)

A dictionary with sync status for the specified device

sync_from_device

Syncs from a specific device in Cisco NSO

'device_name' (string)

A dictionary with sync status for the specified device

get_service_types

Gets service types in Cisco NSO

A dictionary with service types

get_services

Gets services for a specific service type in Cisco NSO

'service_type' (string)

A dictionary with services for the specified service type

Resources

  • https://resources.cisco-nso-mcp.io/environment: Provides a curated summary of the NSO environment:

    • Device count, Operating System Distribution, Unique Operating System Count, Unique Model Count, Model Distribution, Device Series Distribution, Device Groups and Members

Requirements

  • Python 3.12+

  • Cisco NSO with RESTCONF API enabled

  • Network connectivity to NSO RESTCONF API

Configuration Options

You can configure the server using command-line arguments or environment variables:

NSO Connection Parameters

Command-line Argument

Environment Variable

Default

Description

--nso-scheme

NSO_SCHEME

http

NSO connection scheme (http/https)

--nso-address

NSO_ADDRESS

localhost

NSO server address

--nso-port

NSO_PORT

8080

NSO server port

--nso-timeout

NSO_TIMEOUT

10

Connection timeout in seconds

--nso-username

NSO_USERNAME

admin

NSO username

--nso-password

NSO_PASSWORD

admin

NSO password

--nso-verify

NSO_VERIFY

True

Verify NSO HTTPS certificate (default: True). Use --no-nso-verify for self-signed certs (dev only).

--nso-ca-bundle

NSO_CA_BUNDLE

None

Path to a CA bundle file to trust for NSO HTTPS. Applicable when -nso-verify is True.

MCP Server Parameters

Command-line Argument

Environment Variable

Default

Description

--transport

MCP_TRANSPORT

stdio

MCP transport type (stdio/http)

HTTP Transport Options (only used when --transport=http)

FastMCP HTTP Server reference: https://gofastmcp.com/deployment/http#http-deployment

Command-line Argument

Environment Variable

Default

Description

--host

MCP_HOST

0.0.0.0

Host to bind to when using HTTP transport

--port

MCP_PORT

8000

Port to bind to when using HTTP transport

Logging Configuration

Environment Variable

Default

Description

LOG_FILE

None

Path to log file. If not set, logs will be sent to stdout only

Environment variables take precedence over default values but are overridden by command-line arguments.

Connecting to the Server with MCP Clients

You can connect to the server using any MCP client that supports the selected transport type. A few options are:

Windsurf Cascade

Windsurf Cascade supports MCP servers through a configuration file. To use the Cisco NSO MCP server with Windsurf, add it to your mcp_config.json file.

When using uv, no specific installation is needed. You can use uvx to directly run the package:

{
  "mcpServers": {
    "nso": {
      "command": "uvx",
      "args": [
        "cisco-nso-mcp-server",
        "--nso-address=127.0.0.1",
        "--nso-port=8080",
        "--nso-username=admin",
        "--nso-password=admin"
      ],
      "env": {
        "LOG_FILE": "/path/to/your/logs/nso-mcp.log"
      }
    }
  }
}

Using with pip installation

Alternatively, you can install cisco-nso-mcp-server via pip:

pip install cisco-nso-mcp-server

Now you can use the direct path to the executable:

{
  "mcpServers": {
    "nso": {
      "command": "/path/to/your/env/bin/cisco-nso-mcp-server",
      "args": [
        "--nso-address=127.0.0.1",
        "--nso-port=8080",
        "--nso-username=admin",
        "--nso-password=admin"
      ],
      "env": {
        "LOG_FILE": "/path/to/your/logs/nso-mcp.log"
      }
    }
  }
}

Replace /path/to/your/env/bin/cisco-nso-mcp-server with the actual path where you installed the package with pip. You can find this by running which cisco-nso-mcp-server if you installed it in your main environment, or by locating it in your virtual environment's bin directory.

In either case, the env section is optional. If you include it, you can specify the LOG_FILE environment variable to enable file logging.

Using in a custom MCP client Python application with stdio transport

A sample Python application is provided in sample_stdio_client.py that demonstrates how to connect to the MCP server locally and execute a tool.

Running the Server as Standalone

While the server is typically used with an MCP client, you can also run it directly as a standalone process:

# Run with default NSO connection and MCP settings (see Configuration Options above for details)
cisco-nso-mcp-server

# Run with custom NSO connection parameters
cisco-nso-mcp-server --nso-scheme=http --nso-address=127.0.0.1 --nso-port=8080 --nso-username=admin --nso-password=admin

When running as a standalone process with stdio transport, you'll need to pipe input/output to the process or use it with an MCP client that supports stdio transport.

License

This project is licensed under the MIT License. This means you can use, modify, and distribute the code, subject to the terms and conditions of the MIT License.

Available Tools

9 tools
check_device_syncCheck Device Sync StatusB
Read-only

Check the sync status for a specific device in Cisco NSO. Requires a 'device_name' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it 'Requires a device_name parameter', which provides some context about authentication or identification needs. However, it doesn't disclose behavioral traits like rate limits, error conditions, or what 'sync status' specifically entails beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that each serve a purpose - stating the tool's function and noting the required parameter. It's front-loaded with the core purpose. There's no unnecessary verbosity, though it could potentially benefit from slightly more detail given the complexity of device synchronization.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's an output schema (which handles return values), the description doesn't need to explain return values. However, for a device synchronization tool with 0% schema description coverage and no behavioral annotations beyond readOnlyHint, the description provides only basic context. It covers the purpose and parameter requirement but lacks details about what 'sync status' means operationally or how this differs from related tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the input schema provides no documentation for the single parameter. The description mentions 'Requires a device_name parameter', which adds basic semantic meaning about what the parameter represents. However, this is minimal compensation for the complete lack of schema documentation - it doesn't specify format, constraints, or examples for the device_name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Check the sync status') and resource ('for a specific device in Cisco NSO'), which provides a specific verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'sync_from_device' or 'get_device_state', which might have overlapping functionality in a device management context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'sync_from_device' or 'get_device_state'. It mentions the required parameter but offers no context about appropriate use cases, prerequisites, or exclusions. This leaves the agent with minimal direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_configGet Device ConfigurationB
Read-only

Retrieve the full configuration for a specific device in Cisco NSO. Requires a 'device_name' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating this is a safe read operation. The description adds minimal context by specifying it retrieves 'full configuration' and requires a device name, but does not disclose additional behavioral traits such as rate limits, authentication needs, or what 'full configuration' entails. With annotations covering safety, this earns a baseline score for adding some value without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the key action and requirement. It avoids unnecessary words, but could be slightly more structured by explicitly naming the tool's scope or limitations, though it earns high marks for brevity and clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has annotations (readOnlyHint) and an output schema (per context signals), the description does not need to explain return values or safety. However, with 1 parameter and 0% schema coverage, the description only partially documents parameters and lacks usage guidelines. It is minimally adequate but has clear gaps in context for a configuration retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter documentation. The description mentions a 'device_name' parameter, which adds meaning for one parameter, but there is 1 parameter total (based on context signals), and it doesn't explain the structure or usage of 'params' as an object with additional properties. This partially compensates but leaves gaps, scoring below the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve' and resource 'full configuration for a specific device in Cisco NSO', making the purpose unambiguous. However, it does not explicitly differentiate this tool from sibling tools like 'get_device_state' or 'get_device_platform', which likely retrieve different aspects of device information, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that it 'Requires a 'device_name' parameter', which is a basic prerequisite, but provides no guidance on when to use this tool versus alternatives like 'get_device_state' or 'sync_from_device'. There is no explicit when/when-not usage context or named alternatives, leaving the agent with minimal direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_groupsGet Device GroupsB
Read-only

Retrieve the available device groups in Cisco NSO.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no behavioral context beyond that—no information about permissions, rate limits, or what 'available' means (e.g., filtered by user access). With annotations covering safety, a 3 is appropriate as the description adds minimal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has annotations (readOnlyHint) and an output schema, the description doesn't need to cover safety or return values. However, for a tool with 1 undocumented parameter and no usage guidance among siblings, the description is minimally adequate but leaves gaps in parameter meaning and contextual application.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no parameter information. The schema shows one optional parameter 'params' that can be an object or null, but its purpose is undocumented. Baseline 3 applies as the schema exists, but the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('available device groups in Cisco NSO'), making the purpose understandable. However, it doesn't explicitly differentiate this tool from its siblings like 'get_device_config' or 'get_device_state', which also retrieve device-related information but focus on different aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_device_config' and 'get_device_state' that retrieve different device data, there's no indication of when device groups are needed versus other device information, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_ned_idsGet Device NED ID'sA
Read-only

Retrieve the available Network Element Driver (NED) IDs in Cisco NSO.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, which the description aligns with by using 'Retrieve' (a read operation). The description adds context about retrieving 'available' NED IDs in Cisco NSO, which hints at scope but doesn't detail behavioral traits like rate limits, auth needs, or output format. With annotations covering safety, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without unnecessary details. It's front-loaded and wastes no words, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 optional parameter, read-only, with an output schema), the description is reasonably complete. It specifies the resource and context (Cisco NSO), and the output schema will handle return values. However, it lacks usage guidelines, which slightly reduces completeness for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter with 0% description coverage and no enums, but the parameter is optional (required: 0) and defaults to null. The description doesn't mention parameters, which is acceptable here since the tool likely requires no inputs for its basic function. This compensates for the low schema coverage by implying simplicity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve') and resource ('available Network Element Driver (NED) IDs'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_device_platform' or 'get_device_state', which might also retrieve device-related information, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, leaving the agent to infer usage based on the name alone. This is a significant gap for effective tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_platformGet Device Platform InformationB
Read-only

Retrieve platform information for a specific device in Cisco NSO. Requires a 'device_name' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, indicating a safe read operation, which the description doesn't contradict. The description adds that it 'requires a device_name parameter', which is useful context beyond annotations, but it doesn't disclose other behavioral traits like rate limits, authentication needs, or what specific platform information is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the purpose and key requirement. It's front-loaded with the main action and resource, with no wasted words, though it could be slightly more detailed without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has annotations (readOnlyHint) and an output schema, the description covers basic purpose and parameter requirement. However, with 0% schema description coverage and no details on output or behavioral context, it's minimally adequate but leaves gaps in understanding how to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only mentions that a 'device_name' parameter is required without explaining its format, constraints, or how it relates to the nested 'params' object in the schema. This adds minimal value beyond the schema's structure, failing to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'retrieve' and the resource 'platform information for a specific device in Cisco NSO', making the purpose understandable. However, it doesn't explicitly differentiate from siblings like get_device_config or get_device_state, which also retrieve device-specific information but different aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the required 'device_name' parameter, which provides some context for usage, but it doesn't specify when to use this tool versus alternatives like get_device_config or get_device_state. No guidance on prerequisites, exclusions, or comparative use cases is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_stateGet Device StateB
Read-only

Retrieve the state for a specific device in Cisco NSO. Requires a 'device_name' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds minimal behavioral context by stating it 'Requires a 'device_name' parameter,' which implies a prerequisite but does not elaborate on permissions, rate limits, or response format. With annotations covering the safety profile, the description adds some value but lacks rich behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded, consisting of two sentences that directly state the purpose and a key requirement. There is no unnecessary information, making it efficient. However, it could be slightly more structured by explicitly separating purpose from usage notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (1 parameter, nested objects in schema) and the presence of an output schema, the description is minimally adequate. It covers the basic purpose but lacks details on parameter usage, behavioral traits beyond annotations, and guidance relative to siblings. The output schema reduces the need to explain return values, but overall completeness is limited.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning parameters are undocumented in the schema. The description only mentions the 'device_name' parameter without explaining its format, constraints, or how it relates to the 'params' object in the schema. This fails to compensate for the schema's lack of documentation, leaving key parameter semantics unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('state for a specific device in Cisco NSO'), making the purpose understandable. However, it does not explicitly differentiate this tool from its siblings like 'get_device_config' or 'check_device_sync', which might retrieve related but different information. This omission prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions the required parameter but does not specify scenarios, prerequisites, or comparisons to sibling tools such as 'get_device_config' for configuration data or 'check_device_sync' for synchronization status. This lack of contextual direction leaves the agent without usage cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_servicesGet ServicesB
Read-only

Retrieve the available services in Cisco NSO. Requires a 'service_type' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, indicating it's a safe read operation. The description adds that it retrieves services and requires a parameter, but doesn't disclose additional behavioral traits like rate limits, authentication needs, or what 'available services' entails (e.g., active, configured). With annotations covering safety, the description adds minimal context, warranting a baseline score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and requirement. It avoids unnecessary words, though it could be slightly more structured by separating purpose from parameter details for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has annotations (readOnlyHint) and an output schema (per context signals), the description covers the basic purpose and parameter need adequately. However, with 0% schema coverage and no details on output or behavioral nuances, it's not fully complete but meets minimal expectations with structured support.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, with one required parameter documented only as 'params' with additionalProperties. The description specifies 'service_type' as a required parameter, adding meaning beyond the generic schema. However, it doesn't explain the parameter's format, constraints, or how it filters services, leaving significant gaps given the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve' and resource 'available services in Cisco NSO', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_service_types', which might retrieve service type metadata rather than services themselves, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that it 'Requires a 'service_type' parameter', which provides a basic prerequisite but no guidance on when to use this tool versus alternatives like 'get_service_types' or other sibling tools. There's no explicit when/when-not or alternative tool recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_service_typesGet Service TypesA
Read-only

Retrieve the available service types in Cisco NSO.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, which the description aligns with by using 'Retrieve' (implying a read operation). The description adds minimal context beyond annotations—it specifies the domain ('Cisco NSO') but doesn't detail behavioral traits like rate limits, authentication needs, or response format, resulting in an adequate but not comprehensive score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It's front-loaded with the core action and resource, making it highly efficient and easy to parse, earning a perfect score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 optional parameter, read-only operation) and the presence of an output schema (which handles return values), the description is reasonably complete. It states what the tool does but lacks usage guidelines and deeper behavioral context, keeping it from a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 1 parameter (optional 'params'), the description doesn't explain parameters at all. However, since there's only one optional parameter and an output schema exists, the baseline is high. The description focuses on the tool's purpose without parameter details, which is acceptable given the low parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('available service types in Cisco NSO'), making the purpose unambiguous. However, it doesn't distinguish this tool from its siblings (like 'get_services'), which are also retrieval operations in the same domain, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, such as how it differs from 'get_services' or when to prefer one over the other, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_from_deviceSync DeviceC

Sync from a specific device in Cisco NSO. Requires a 'device_name' parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false, indicating a write operation, but the description doesn't add behavioral context beyond this. It fails to disclose what 'Sync' does (e.g., whether it triggers a configuration pull, updates device state, or has side effects like network disruption), rate limits, or authentication needs. With annotations covering only the read/write aspect, the description adds minimal value, not compensating for the lack of detailed behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences that directly address the tool's action and a key parameter. It's front-loaded with the main purpose, and there's no wasted text. However, it could be more structured by explicitly separating purpose from requirements, but overall, it's efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity implied by a write operation (readOnlyHint=false), 1 parameter with 0% schema coverage, nested objects, and an output schema, the description is incomplete. It doesn't explain what 'Sync' entails, the expected output, or how it differs from siblings. The presence of an output schema reduces the need to detail return values, but the description lacks sufficient context for safe and effective use, especially for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, with 1 parameter ('params') that is a nested object with no documented properties. The description mentions 'device_name' as a required parameter, adding some meaning, but it doesn't explain the structure or usage of 'params' beyond this. Since schema coverage is low, the description partially compensates but doesn't fully clarify parameter semantics, leaving gaps in understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Sync from a specific device in Cisco NSO' which provides a basic verb ('Sync') and resource ('device'), but it's vague about what 'Sync' entails (e.g., synchronization of configuration, state, or data). It doesn't distinguish from siblings like 'check_device_sync' or 'get_device_state', leaving ambiguity in purpose. This is a tautology that largely restates the name/title without clarifying the specific action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'Requires a 'device_name' parameter', which implies a prerequisite but doesn't provide guidance on when to use this tool versus alternatives. No explicit when/when-not scenarios or comparisons to sibling tools (e.g., 'check_device_sync' for verification vs. 'sync_from_device' for execution) are included. This lack of context leaves usage unclear.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv3.1.0
    • First observedcheck_device_sync
    • First observedget_device_config
    • First observedget_device_groups
    • First observedget_device_ned_ids
    • First observedget_device_platform
    • First observedget_device_state
    • First observedget_service_types
    • First observedget_services
    • First observedsync_from_device

TDQS

B3.3/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Tools are well-organized around specific resources (devices, services) and actions (check, get, sync), making it easy for an agent to select the right one. For example, get_device_config retrieves configuration while get_device_state retrieves state, and they are clearly differentiated.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, with all tools using snake_case. The naming is predictable, such as get_device_config, check_device_sync, and sync_from_device, which enhances readability and agent usability. There are no deviations or mixed conventions.

Tool Count5/5

With 9 tools, the count is well-scoped for managing Cisco NSO devices and services. Each tool earns its place by covering essential operations like configuration retrieval, status checks, and synchronization, without being overly sparse or bloated. This aligns well with the server's purpose of network device management.

Completeness4/5

The tool set provides strong coverage for device and service management in Cisco NSO, including retrieval, status checks, and synchronization. However, there are minor gaps, such as the lack of tools for modifying configurations or creating services, which agents might need to work around for full lifecycle management. Overall, it supports core workflows effectively.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Cisco network devices through the RADKit SDK, allowing users to discover device inventory, fetch device attributes, and execute CLI commands via natural language.
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    Exposes Cisco Network Services Orchestrator (NSO) operations and data as MCP tools and resources, enabling AI-powered network automation through natural language. It supports tasks like retrieving device configurations, checking sync status, and managing services via the NSO RESTCONF API.
    9
    14
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with direct access to multi-vendor network devices for tasks like configuration management, health checks, and topology discovery through 35 specialized tools. It enables natural language control over platforms including Cisco, Juniper, and Nokia using SSH, NETCONF, and SNMP protocols.
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Cisco IOS-XE network devices over SSH using structured tools. Provides read and write capabilities for network management with built-in validation and security.
    -

Latest Blog Posts

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/dbono711/cisco-nso-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server