Cisco NSO MCP Server
Provides integration with Cisco NSO (Network Services Orchestrator) through its RESTCONF API, enabling AI-powered network automation with tools for managing device configurations, syncing device state, retrieving device platform information, managing service types and instances, and accessing device groups and NED IDs.
Click on "Install 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., "@Cisco NSO MCP Serverget the configuration for router-nyc-01"
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.
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

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_FILEenvironment 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 messageMultiple 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 |
| Retrieves Network Element Driver (NED) IDs from Cisco NSO | A dictionary with a list of NED IDs | |
| Retrieves device groups from Cisco NSO | A dictionary with a list of device groups | |
| Gets platform information for a specific device in Cisco NSO | 'device_name' (string) | A dictionary with platform information for the specified device |
| Gets full configuration for a specific device in Cisco NSO | 'device_name' (string) | A dictionary with configuration for the specified device |
| Gets state for a specific device in Cisco NSO | 'device_name' (string) | A dictionary with state for the specified device |
| Checks sync status for a specific device in Cisco NSO | 'device_name' (string) | A dictionary with sync status for the specified device |
| Syncs from a specific device in Cisco NSO | 'device_name' (string) | A dictionary with sync status for the specified device |
| Gets service types in Cisco NSO | A dictionary with service types | |
| 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 |
|
| http | NSO connection scheme (http/https) |
|
| localhost | NSO server address |
|
| 8080 | NSO server port |
|
| 10 | Connection timeout in seconds |
|
| admin | NSO username |
|
| admin | NSO password |
|
| True | Verify NSO HTTPS certificate (default: True). Use |
|
| None | Path to a CA bundle file to trust for NSO HTTPS. Applicable when |
MCP Server Parameters
Command-line Argument | Environment Variable | Default | Description |
|
| 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 |
|
| 0.0.0.0 | Host to bind to when using HTTP transport |
|
| 8000 | Port to bind to when using HTTP transport |
Logging Configuration
Environment Variable | Default | Description |
| 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.
Using uv (recommended)
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-serverNow 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=adminWhen 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 toolscheck_device_syncCheck Device Sync StatusBRead-only
Check the sync status for a specific device in Cisco NSO. Requires a 'device_name' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 ConfigurationBRead-only
Retrieve the full configuration for a specific device in Cisco NSO. Requires a 'device_name' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 GroupsBRead-only
Retrieve the available device groups in Cisco NSO.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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'sARead-only
Retrieve the available Network Element Driver (NED) IDs in Cisco NSO.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 InformationBRead-only
Retrieve platform information for a specific device in Cisco NSO. Requires a 'device_name' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 StateBRead-only
Retrieve the state for a specific device in Cisco NSO. Requires a 'device_name' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 ServicesBRead-only
Retrieve the available services in Cisco NSO. Requires a 'service_type' parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 TypesARead-only
Retrieve the available service types in Cisco NSO.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v3.1.0- First observed
check_device_sync - First observed
get_device_config - First observed
get_device_groups - First observed
get_device_ned_ids - First observed
get_device_platform - First observed
get_device_state - First observed
get_service_types - First observed
get_services - First observed
sync_from_device
TDQS
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.
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.
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.
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
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
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseBqualityDmaintenanceExposes 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.914MIT
- AlicenseNot gradedqualityDmaintenanceProvides 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.11MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dbono711/cisco-nso-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server