A production-ready TypeScript MCP (Model Context Protocol) server for Cisco Support APIs with comprehensive security and dual transport support. This extensible server provides access to multiple Cisco Support APIs including Bug Search, Case Management, and End-of-Life information.
The server supports the following Cisco Support APIs (configurable via SUPPORT_API environment variable):
| API | Status | Tools | Description |
|---|---|---|---|
Enhanced Analysis (enhanced_analysis) |
โญ RECOMMENDED | 6 tools | Advanced analysis tools for comprehensive product assessment |
Bug (bug) |
โ Complete | 14 tools | Bug Search, Details, Product-specific searches + Enhanced tools |
Case (case) |
โ Complete | 4 tools | Support case management and operations |
EoX (eox) |
โ Complete | 4 tools | End of Life/Sale information and lifecycle planning |
PSIRT (psirt) |
โ Complete | 8 tools | Product Security Incident Response Team vulnerability data |
Product (product) |
โ Complete | 3 tools | Product details, specifications, and technical information |
Software (software) |
โ Complete | 6 tools | Software suggestions, releases, and upgrade recommendations |
Serial (serial) |
โ Complete | 3 tools | Serial number to coverage, warranty, and product information |
RMA (rma) |
โ Complete | 3 tools | Return Merchandise Authorization tracking and management |
Smart Bonding (smart_bonding) |
โ ๏ธ EXPERIMENTAL | 8 tools | Complete ticket lifecycle management and TSP codes (UNTESTED - requires special credentials) |
Implementation Status: 8/8 Core APIs complete (100%) with 46 total tools + 1 experimental API (8 tools)
Configuration Examples:
SUPPORT_API=enhanced_analysis - Enhanced analysis tools only (6 tools) โ RECOMMENDED for most usersSUPPORT_API=bug - All Bug API tools including enhanced analysis (14 tools)SUPPORT_API=bug,case,eox,psirt - Core support APIs (28 tools)SUPPORT_API=bug,case,eox,psirt,product,software - All implemented APIs (39 tools)SUPPORT_API=all - All available APIs (includes 2 placeholder APIs)Start in stdio mode for Claude Desktop:
npx mcp-cisco-support
Start HTTP server with authentication:
npx mcp-cisco-support --http
# Token displayed in console for authenticationGenerate Bearer token for HTTP mode:
npx mcp-cisco-support --generate-token
Get help and see all options:
npx mcp-cisco-support --help
Generate authentication token (for HTTP mode):
npx mcp-cisco-support --generate-token export MCP_BEARER_TOKEN=<generated_token>
Set Cisco API credentials:
export CISCO_CLIENT_ID=your_client_id_here export CISCO_CLIENT_SECRET=your_client_secret_here export SUPPORT_API=bug,case,eox,psirt,product,software # All implemented APIs (recommended)
Start the server:
# For Claude Desktop (stdio mode) npx mcp-cisco-support # For HTTP access (with authentication) npx mcp-cisco-support --http
git clone https://github.com/sieteunoseis/mcp-cisco-support.git
cd mcp-cisco-support
npm install
npm run build
npm startGet Cisco API Credentials:
Install Claude Desktop:
Locate Claude Desktop Config File:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonCreate or Edit the Config File:
{
"mcpServers": {
"cisco-support": {
"command": "npx",
"args": ["-y", "mcp-cisco-support"],
"env": {
"CISCO_CLIENT_ID": "your_client_id_here",
"CISCO_CLIENT_SECRET": "your_client_secret_here",
"SUPPORT_API": "bug,product"
}
}
}
}Note: The
-yflag automatically accepts package installation, which is required for Claude Desktop since it runs in the background without user interaction.
Optional Environment Variables:
Configure which APIs to enable with SUPPORT_API:
"enhanced_analysis" - Enhanced analysis tools only (recommended for most users)"bug" - Bug API only (default)"bug,product" - Bug + Product APIs (enables product autocomplete)"all" - All available APIs"bug,case,eox" - Multiple specific APIsProduct Autocomplete (optional, requires SUPPORT_API to include product):
"env": { "CISCO_CLIENT_ID": "your_client_id_here", "CISCO_CLIENT_SECRET": "your_client_secret_here", "SUPPORT_API": "bug,product", "CISCO_WEB_COOKIE": "JSESSIONID=...; OptanonConsent=..." }
See the Product Autocomplete section for setup instructions.
Replace Your Credentials:
your_client_id_here with your actual Cisco Client IDyour_client_secret_here with your actual Cisco Client SecretRestart Claude Desktop:
After setup, you should be able to:
Ask Claude about Cisco bugs:
"Search for bugs related to memory leaks in Cisco switches"
Get specific bug details:
"Get details for Cisco bug CSCab12345"
Search by product:
"Find bugs affecting Cisco Catalyst 3560 switches"
Once configured, you can ask Claude questions like:
Basic Bug Search:
Product-Specific Searches:
Bug Details:
Advanced Filtering:
Claude will use the appropriate MCP tools to fetch real-time data from Cisco's Bug API and provide comprehensive responses with the latest information.
The server includes 10+ specialized prompts for guided Cisco support workflows:
Serial Number Support: Most prompts now accept either a product name OR a serial number. When you provide a serial number (e.g., "SAL09232Q0Z"), the server automatically looks up the product details and uses them for the search. This makes it easy to investigate issues when you have a device serial number but don't know the exact product model.
Each prompt provides structured investigation plans and expert recommendations.
The cisco-interactive-search prompt demonstrates MCP's elicitation feature, allowing the server to dynamically request additional information from users during tool execution. This makes searches more natural and helps gather missing parameters without restarting requests.
Example Usage:
Use the "cisco-interactive-search" prompt with:
- initial_query: "memory leak"
- use_elicitation: true
See examples/elicitation-example.md for detailed usage examples and โก MCP Prompts for complete prompt documentation.
The server exposes Cisco data as MCP Resources for direct client access. This includes a new Product Autocomplete feature that lets you search Cisco's internal product catalog using your browser session cookie.
When SUPPORT_API includes product, the following resources are available:
Resource Templates (dynamic URIs):
cisco://products/{product_id} - Get product details by ID (e.g., C9300-24P, ISR4431)cisco://products/autocomplete/{search_term} - โจ NEW: Search product catalog by name or modelStatic Resources:
cisco://products/catalog - Product catalog overviewcisco://products/autocomplete-help - โจ NEW: Setup instructions for product autocompleteThe product autocomplete feature requires your Cisco.com session cookie to access Cisco's internal API.
Quick Setup:
Log in to Cisco:
Extract Your Cookie:
https://bst.cloudapps.cisco.comSet Environment Variable:
export CISCO_WEB_COOKIE="JSESSIONID=...; OptanonConsent=...; ..."
Query Products:
cisco://products/autocomplete/4431
cisco://products/autocomplete/catalyst
cisco://products/autocomplete/ASA
Cookie Lifecycle:
For detailed setup instructions, query the help resource:
cisco://products/autocomplete-help
Query: cisco://products/autocomplete/4431
{
"autoPopulateHMPProductDetails": [{
"parentMdfConceptId": 286281708,
"parentMdfConceptName": "Cisco 4000 Series Integrated Services Routers",
"mdfConceptId": 284358776,
"mdfConceptName": "Cisco 4431 Integrated Services Router",
"mdfMetaclass": "Model"
}]
}Ask Claude:
See docs/PRODUCT_AUTOCOMPLETE_SOLUTIONS.md for implementation details and docs/CISCO_COOKIE_ANALYSIS.md for cookie lifecycle information.
The server includes experimental support for Cisco's Smart Bonding Customer API for ticket management and problem code classification. This feature is UNTESTED and requires special credentials obtained through your Cisco Account Manager.
Available Tools (8 total):
get_smart_bonding_tsp_codes - Retrieve TSP (Technology, Sub-Technology, Problem Code) details for ticket classificationpull_smart_bonding_tickets - Retrieve ticket updates from Cisco that haven't been pulled yetcreate_smart_bonding_ticket - Create a new support ticket (returns upload credentials in response)update_smart_bonding_ticket - Add work notes and update ticket statusupload_file_to_smart_bonding_ticket - Upload files using credentials from ticket creation (HTTPS PUT to cxd.cisco.com)escalate_smart_bonding_ticket - Escalate critical issues to Ciscoresolve_smart_bonding_ticket - Mark tickets as resolved with resolution notesclose_smart_bonding_ticket - Close completed tickets with diagnosis and solutionSmart Bonding uses a separate upload mechanism from the REST API:
upload_file_to_smart_bonding_ticket tool or curlUpload credentials provided in ticket creation response:
Files cannot be modified after upload - submit new files for corrections.
Smart Bonding API uses a different authentication system than standard Cisco Support APIs:
| Feature | Standard Support APIs | Smart Bonding API |
|---|---|---|
| OAuth2 Endpoint | https://id.cisco.com/oauth2/default/v1/token |
https://cloudsso.cisco.com/as/token.oauth2 |
| Token Validity | 12 hours | 1 hour |
| Credentials | Self-service via Cisco Developer Portal | Contact Cisco Account Manager |
| Environment Variables | CISCO_CLIENT_ID, CISCO_CLIENT_SECRET |
SMART_BONDING_CLIENT_ID, SMART_BONDING_CLIENT_SECRET |
Obtain Credentials - Contact your Cisco Account Manager to request Smart Bonding API access
Set Environment Variables:
export SMART_BONDING_CLIENT_ID=your_smart_bonding_client_id export SMART_BONDING_CLIENT_SECRET=your_smart_bonding_client_secret export SMART_BONDING_ENV=production # or 'staging' for test environment export SUPPORT_API=smart_bonding # Enable Smart Bonding API
Use Smart Bonding Tools:
SUPPORT_API=all - Must be explicitly enabled with SUPPORT_API=smart_bonding# With Claude Desktop - add to claude_desktop_config.json { "mcpServers": { "cisco-smart-bonding": { "command": "npx", "args": ["-y", "mcp-cisco-support"], "env": { "SMART_BONDING_CLIENT_ID": "your_id", "SMART_BONDING_CLIENT_SECRET": "your_secret", "SMART_BONDING_ENV": "production", "SUPPORT_API": "smart_bonding" } } } }
For complete implementation details and API architecture, see SMART_BONDING_IMPLEMENTATION.md.
Claude Desktop successfully connected to the Cisco Support MCP server, demonstrating the bug search functionality with real-time responses from Cisco's Bug API.
MCP Inspector v0.14.0+ showing the available tools and server connectivity testing capabilities.
If you prefer to install globally instead of using npx:
npm install -g mcp-cisco-support
Then use this config:
{
"mcpServers": {
"cisco-support": {
"command": "mcp-cisco-support",
"env": {
"CISCO_CLIENT_ID": "your_client_id_here",
"CISCO_CLIENT_SECRET": "your_client_secret_here",
"SUPPORT_API": "bug"
}
}
}
}For development or custom setups:
git clone https://github.com/sieteunoseis/mcp-cisco-support.git
cd mcp-cisco-support
npm install
npm run buildThen use this config:
{
"mcpServers": {
"cisco-support": {
"command": "node",
"args": ["/path/to/mcp-cisco-support/dist/index.js"],
"env": {
"CISCO_CLIENT_ID": "your_client_id_here",
"CISCO_CLIENT_SECRET": "your_client_secret_here",
"SUPPORT_API": "bug"
}
}
}
}"Command not found" errors:
npm install -g mcp-cisco-supportAuthentication failures:
MCP server not loading:
Permission errors:
chmod 644 claude_desktop_config.jsonTest the server manually:
npx mcp-cisco-support
This should start the server in stdio mode without errors.
Validate your config:
Use a JSON validator to ensure your config file is properly formatted.
Check Claude Desktop logs:
Monitor logs in real-time (macOS):
# Follow logs in real-time tail -n 20 -F ~/Library/Logs/Claude/mcp*.log
On Windows:
# Check logs directory
%APPDATA%\Claude\logs\# Use pre-built image docker pull ghcr.io/sieteunoseis/mcp-cisco-support:latest docker run -p 3000:3000 \ -e CISCO_CLIENT_ID=your_id \ -e CISCO_CLIENT_SECRET=your_secret \ -e SUPPORT_API=bug \ ghcr.io/sieteunoseis/mcp-cisco-support:latest --http # Or build locally docker-compose up -d
# Generate secure token npx mcp-cisco-support --generate-token # Use token for HTTP mode export MCP_BEARER_TOKEN=your_token npx mcp-cisco-support --http
See ๐ Security Guide for complete security documentation.
Create a .env file with your configuration:
# ๐ Cisco API OAuth2 Configuration (REQUIRED) CISCO_CLIENT_ID=your_client_id_here CISCO_CLIENT_SECRET=your_client_secret_here # ๐ Server Configuration PORT=3000 NODE_ENV=development # ๐ API Support Configuration # Enable specific Cisco Support APIs you have access to # Options: bug, case, eox (plus planned: product, serial, rma, software, asd) SUPPORT_API=bug,case,eox # Multiple APIs # SUPPORT_API=all # All available APIs # SUPPORT_API=bug # Single API (default) # ๐ HTTP Authentication Configuration (HTTP mode only) # Custom Bearer token for HTTP authentication (optional - generates random if not set) MCP_BEARER_TOKEN=your_custom_secure_token_here # โ ๏ธ SECURITY WARNING: Only use in development/testing # DANGEROUSLY_OMIT_AUTH=true # Disables HTTP authentication entirely
For production-grade authentication with fine-grained access control, use OAuth 2.1 mode:
# 1. Copy example configuration files cp config/oauth-clients.example.json config/oauth-clients.json cp config/oauth-secrets.example.json config/oauth-secrets.json # 2. Edit config/oauth-clients.json to configure your clients # 3. Add client secrets to config/oauth-secrets.json (optional, for confidential clients) # 4. Start server in OAuth 2.1 mode AUTH_TYPE=oauth2.1 npm run oauth:start # or for development with hot reload: npm run oauth:dev
config/oauth-clients.json - Client configuration (can be version controlled):
{
"clients": [
{
"client_id": "mcp_inspector_dev",
"client_uri": "http://localhost:6274",
"redirect_uris": ["http://localhost:6274/oauth/callback"],
"scopes": ["mcp:bug", "mcp:psirt"],
"grant_types": ["authorization_code"],
"description": "MCP Inspector - Limited to Bug + Security APIs",
"enabled": true
}
],
"settings": {
"allow_dynamic_registration": true,
"token_expiry_seconds": 3600
}
}config/oauth-secrets.json - Client secrets (gitignored, never commit):
{
"secrets": {
"mcp_inspector_prod": "your_production_secret_here"
}
}Control API access with fine-grained scopes:
| Scope | API Access | Description |
|---|---|---|
mcp |
All APIs | Full access to all MCP tools |
mcp:bug |
Bug API | Bug search and details only |
mcp:case |
Case API | Support case management only |
mcp:eox |
EoX API | End-of-life information only |
mcp:psirt |
Security API | Security advisories only |
mcp:product |
Product API | Product information only |
mcp:software |
Software API | Software suggestions only |
mcp:serial |
Serial API | Serial number lookups only |
mcp:rma |
RMA API | Return authorization only |
Best Practice: Grant only the scopes each application needs (principle of least privilege).
Point to custom config file locations:
# OAuth 2.1 Configuration AUTH_TYPE=oauth2.1 # Optional: Custom config paths (defaults shown) OAUTH_CLIENTS_CONFIG=config/oauth-clients.json OAUTH_SECRETS_CONFIG=config/oauth-secrets.json # Optional: Custom issuer URL (defaults to http://localhost:PORT) OAUTH2_ISSUER_URL=https://your-server.com
When running in OAuth 2.1 mode, the server provides:
GET /.well-known/oauth-authorization-server - OAuth discovery metadataGET /authorize - Authorization endpoint (displays consent page)POST /authorize/approve - Authorization approvalPOST /token - Token endpoint (PKCE required)POST /register - Dynamic client registration (if enabled)See docs/OAUTH_CLIENTS_CONFIG.md for complete OAuth 2.1 documentation.
Complete configuration for Claude Desktop:
{
"mcpServers": {
"cisco-support": {
"command": "npx",
"args": ["-y", "mcp-cisco-support"],
"env": {
"CISCO_CLIENT_ID": "your_client_id_here",
"CISCO_CLIENT_SECRET": "your_client_secret_here",
"SUPPORT_API": "bug,case,eox"
}
}
}
}Option 1: Bearer Token Authentication
docker run -p 3000:3000 \ -e CISCO_CLIENT_ID=your_client_id \ -e CISCO_CLIENT_SECRET=your_client_secret \ -e SUPPORT_API=bug,case,eox \ -e MCP_BEARER_TOKEN=your_secure_token \ ghcr.io/sieteunoseis/mcp-cisco-support:latest --http
Option 2: OAuth 2.1 Authentication (Production)
# 1. Create local OAuth config directory mkdir -p ./oauth-config cp config/oauth-clients.example.json ./oauth-config/oauth-clients.json cp config/oauth-secrets.example.json ./oauth-config/oauth-secrets.json # 2. Edit ./oauth-config/oauth-clients.json and oauth-secrets.json # 3. Run with volume mount docker run -p 3000:3000 \ -e CISCO_CLIENT_ID=your_client_id \ -e CISCO_CLIENT_SECRET=your_client_secret \ -e AUTH_TYPE=oauth2.1 \ -e OAUTH_CLIENTS_CONFIG=/oauth-config/oauth-clients.json \ -e OAUTH_SECRETS_CONFIG=/oauth-config/oauth-secrets.json \ -v $(pwd)/oauth-config:/oauth-config:ro \ ghcr.io/sieteunoseis/mcp-cisco-support:latest --http
Option 3: Without Authentication (Development Only)
docker run -p 3000:3000 \ -e CISCO_CLIENT_ID=your_client_id \ -e CISCO_CLIENT_SECRET=your_client_secret \ -e DANGEROUSLY_OMIT_AUTH=true \ ghcr.io/sieteunoseis/mcp-cisco-support:latest --http
Docker Compose with OAuth 2.1:
version: '3.8' services: mcp-cisco-support: image: ghcr.io/sieteunoseis/mcp-cisco-support:latest ports: - "3000:3000" environment: - CISCO_CLIENT_ID=your_client_id - CISCO_CLIENT_SECRET=your_client_secret - AUTH_TYPE=oauth2.1 - OAUTH_CLIENTS_CONFIG=/oauth-config/oauth-clients.json - OAUTH_SECRETS_CONFIG=/oauth-config/oauth-secrets.json volumes: - ./oauth-config:/oauth-config:ro command: ["node", "dist/index.js", "--http"] restart: unless-stopped
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Server information and available endpoints |
/mcp |
POST | Main MCP endpoint (JSON-RPC over HTTP) |
/messages |
POST | Alternative MCP endpoint for N8N compatibility |
/sse |
GET | SSE connection with session management |
/sse |
POST | Legacy SSE message endpoint (deprecated) |
/sse/session/{sessionId} |
POST | Session-specific MCP message endpoint |
/ping |
GET | Simple ping endpoint for connectivity testing |
/health |
GET | Health check with detailed status |
For detailed information, see our comprehensive GitHub Wiki:
# Test server connectivity curl http://localhost:3000/ping # Check health status curl http://localhost:3000/health # List available tools (main MCP endpoint) curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": "1", "method": "tools/list" }' # List available tools (alternative endpoint for N8N) curl -X POST http://localhost:3000/messages \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": "1", "method": "tools/list" }' # Test SSE connection (will show endpoint event) curl -N http://localhost:3000/sse # Search for bugs by keyword curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": "2", "method": "tools/call", "params": { "name": "search_bugs_by_keyword", "arguments": { "keyword": "crash", "severity": "1", "status": "open" } } }' # Get specific bug details curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": "3", "method": "tools/call", "params": { "name": "get_bug_details", "arguments": { "bug_ids": "CSCab12345" } } }'
async function searchBugs(keyword) { const response = await fetch('http://localhost:3000/mcp', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method: 'tools/call', params: { name: 'search_bugs_by_keyword', arguments: { keyword: keyword, page_index: 1, status: 'open' } } }) }); const result = await response.json(); return result; }
The server provides a comprehensive health check endpoint:
curl http://localhost:3000/health
Response includes:
OAuth2 Authentication Failed
CISCO_CLIENT_ID and CISCO_CLIENT_SECREThttps://id.cisco.comAPI Calls Failing
/healthhttps://apix.cisco.comDocker Issues
docker-compose logsStructured JSON logs include:
# Run all tests npm test # Run tests in watch mode npm run test:watch # Run tests with coverage npm run test:coverage # Run specific test suite npx jest tests/auth.test.js npx jest tests/mcp-tools.test.js
The test suite includes:
tests/auth.test.js): OAuth2 authentication, token management, error handlingtests/mcp-tools.test.js): All 8 MCP tools, error handling, paginationtests/setup.js): Test environment configurationThe following issues were identified and resolved in the test suite:
Token Refresh Logic
getValidToken()Multiple Bug IDs Handling
resetServerState() function for proper cleanupSearch Tools Implementation
Error Handling
handleMCPMessage() functionAuthentication Failure Scenarios
Test State Management
resetServerState() export and proper module cache clearing--forceExit flag for main test runsmcp-cisco-support/
โโโ src/
โ โโโ index.ts # Main TypeScript server implementation
โโโ dist/ # Compiled JavaScript (generated by build)
โโโ package.json # Dependencies and scripts
โโโ tsconfig.json # TypeScript configuration
โโโ .env.example # Environment variables template
โโโ .env # Actual environment variables (create from example)
โโโ .gitignore # Git ignore rules
โโโ Dockerfile # Docker configuration
โโโ docker-compose.yml # Docker Compose setup
โโโ screenshots/ # Documentation screenshots
โ โโโ mcp-inspector-screenshot.png
โโโ CLAUDE.md # Project instructions and architecture
โโโ README.md # Project documentation
# Install dependencies npm install # Start development server with auto-reload npm run dev # Run tests npm test # Run tests in watch mode npm run test:watch # Build Docker image docker build -t mcp-cisco-support . # View logs in development npm run dev 2>&1 | jq '.' # Pretty print JSON logs
.env file to version controlhttps://id.cisco.com/oauth2/default/v1/tokenclient_credentialshttps://apix.cisco.com/bug/v2.0The server implements the Model Context Protocol with these methods:
initialize: Initialize MCP connectiontools/list: List available toolstools/call: Execute a toolExample MCP message:
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "search_bugs_by_keyword",
"arguments": {
"keyword": "memory leak",
"status": "open"
}
}
}The server provides a comprehensive health check endpoint:
curl http://localhost:3000/health
Response includes server status, OAuth2 token status, memory usage, uptime, and active connections.
Comprehensive Jest-based testing framework with:
# Run all tests npm test # Test with real API credentials CISCO_CLIENT_ID=your_id CISCO_CLIENT_SECRET=your_secret npm test # Test individual tools npm run test:tool search_bugs_by_keyword
See ๐งช Testing Framework for complete testing documentation.
MIT License - see LICENSE file for details.
npm testOwner
Contributors
Categories
Services (CX)Products
Services APIsAI
MCP ServersFeatures / Capabilities
ToolsProgramming Languages
TypeScriptLicense
Code Exchange Community
Get help, share code, and collaborate with other developers in the Code Exchange community.View Community