🚀 Cisco Support MCP Server
A production-ready TypeScript MCP (Model Context Protocol) server for Cisco Support APIs with comprehensive security and dual transport support. It provides access to multiple Cisco Support APIs including Bug Search, Case Management, and End-of-Life information.
🚀 Quick Start
NPX Installation (Recommended)
- Start in stdio mode for Claude Desktop:
npx mcp-cisco-support
- Start HTTP server with authentication:
npx mcp-cisco-support --http
- Generate Bearer token for HTTP mode:
npx mcp-cisco-support --generate-token
- Get help and see all options:
npx mcp-cisco-support --help
Environment Setup
- 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
- Start the server:
npx mcp-cisco-support
npx mcp-cisco-support --http
Local Development
git clone https://github.com/sieteunoseis/mcp-cisco-support.git
cd mcp-cisco-support
npm install
npm run build
npm start
✨ Features
- Multi-API Support: 6 Cisco Support APIs fully implemented (33 total tools).
- Bearer Token Authentication: MCP Inspector-style security for HTTP endpoints.
- Configurable API Access: Enable only the Cisco Support APIs you have access to.
- Specialized Prompts: 9 workflow prompts for guided Cisco support scenarios.
- Dual Transport: stdio (local MCP clients) and HTTP (remote server with auth).
- OAuth2 Authentication: Automatic token management with Cisco API.
- Real-time Updates: Server-Sent Events for HTTP mode.
- TypeScript: Full type safety and MCP SDK integration.
- Production Security: Helmet, CORS, input validation, Bearer tokens.
- Docker Support: Containerized deployment with health checks.
- Comprehensive Logging: Structured logging with timestamps.
📦 Installation
Alternative Installation Methods
Global Installation
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"
}
}
}
}
Local Installation
For development or custom setups:
git clone https://github.com/sieteunoseis/mcp-cisco-support.git
cd mcp-cisco-support
npm install
npm run build
Then 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"
}
}
}
}
Docker Deployment
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
docker-compose up -d
💻 Usage Examples
cURL Examples
curl http://localhost:3000/ping
curl http://localhost:3000/health
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/list"
}'
curl -X POST http://localhost:3000/messages \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/list"
}'
curl -N http://localhost:3000/sse
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"
}
}
}'
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"
}
}
}'
JavaScript Client Example
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;
}
📚 Documentation
For detailed information, see our comprehensive GitHub Wiki:
🔧 Technical Details
Supported Cisco APIs
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 ) |
🔄 Planned |
0 tools |
Serial number to product information mapping |
RMA (rma ) |
🔄 Planned |
0 tools |
Return Merchandise Authorization processes |
Implementation Status: 6/8 APIs complete (75%) with 33 total tools
Configuration Examples:
SUPPORT_API=enhanced_analysis
- Enhanced analysis tools only (6 tools) ← RECOMMENDED for most users
SUPPORT_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)
Claude Desktop Integration
Prerequisites
- Get Cisco API Credentials:
- Visit Cisco API Console.
- Create an application and get your Client ID and Secret.
- Ensure the application has access to the Bug API.
- Install Claude Desktop:
- Download from Claude.ai.
- Make sure you're using a recent version that supports MCP.
Step-by-Step Setup
- Locate Claude Desktop Config File:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Create or Edit the Config File:
{
"mcpServers": {
"cisco-support": {
"command": "npx",
"args": ["mcp-cisco-support"],
"env": {
"CISCO_CLIENT_ID": "your_client_id_here",
"CISCO_CLIENT_SECRET": "your_client_secret_here",
"SUPPORT_API": "bug"
}
}
}
}
Optional: Configure which APIs to enable with SUPPORT_API
:
"enhanced_analysis"
- Enhanced analysis tools only (recommended for most users)
"bug"
- Bug API only (default)
"all"
- All available APIs
"bug,case,eox"
- Multiple specific APIs
- Replace Your Credentials:
- Replace
your_client_id_here
with your actual Cisco Client ID.
- Replace
your_client_secret_here
with your actual Cisco Client Secret.
- Restart Claude Desktop:
- Close Claude Desktop completely.
- Reopen the application.
- The MCP server will be automatically loaded.
Verification
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"
Example Usage in Claude Desktop
Once configured, you can ask Claude questions like:
- Basic Bug Search:
- "Search for recent bugs related to 'crash' in Cisco products"
- "Find open bugs with severity 1 or 2"
- "Show me bugs modified in the last 30 days"
- Product-Specific Searches:
- "Find bugs for product ID C9200-24P"
- "Search for bugs in Cisco Catalyst 9200 Series affecting release 17.5.1"
- "Show bugs fixed in software release 17.5.2"
- Bug Details:
- "Get full details for bug CSCab12345"
- "Show me information about bugs CSCab12345,CSCcd67890"
- Advanced Filtering:
- "Find resolved bugs with severity 3 modified after 2023-01-01"
- "Search for bugs in 'Cisco ASR 9000 Series' sorted by severity"
- "Can you show me all the cisco bugs in the last 30 days for the product Cisco Unified Communications Manager (CallManager)?" (uses keyword search)
- "Find bugs for Cisco Unified Communications Manager affecting releases 14.0 and 15.0" (uses product series search)
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.
MCP Prompts
The server includes 5 specialized prompts for guided Cisco support workflows:
- 🚨 cisco-incident-investigation - Investigate symptoms and errors
- 🔄 cisco-upgrade-planning - Research issues before upgrades
- 🔧 cisco-maintenance-prep - Prepare for maintenance windows
- 🔒 cisco-security-advisory - Research security vulnerabilities
- ⚠️ cisco-known-issues - Check for software release issues
Each prompt provides structured investigation plans and expert recommendations.
See ⚡ MCP Prompts for complete prompt documentation and examples.
Screenshots
Claude Desktop Integration
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
MCP Inspector v0.14.0+ showing the available tools and server connectivity testing capabilities.
API Endpoints
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 |
Health Monitoring
The server provides a comprehensive health check endpoint:
curl http://localhost:3000/health
Response includes:
- Server status
- OAuth2 token status
- Memory usage
- Uptime
- Active SSE connections
Security Features
- Helmet: Security headers
- CORS: Cross-origin resource sharing
- Input Validation: Schema-based validation
- Non-root Execution: Docker security
- Environment Variables: Secure credential storage
Troubleshooting
Common Issues
- OAuth2 Authentication Failed
- Verify
CISCO_CLIENT_ID
and CISCO_CLIENT_SECRET
.
- Check network connectivity to
https://id.cisco.com
.
- API Calls Failing
- Check token validity at
/health
.
- Verify network access to
https://apix.cisco.com
.
- Docker Issues
- Ensure environment variables are set.
- Check Docker logs:
docker-compose logs
.
Logs
Structured JSON logs include:
- Timestamp
- Log level (info, error, warn)
- Message
- Additional context data
Testing
Running Tests
npm test
npm run test:watch
npm run test:coverage
npx jest tests/auth.test.js
npx jest tests/mcp-tools.test.js
Test Structure
The test suite includes:
- Authentication Tests (
tests/auth.test.js
): OAuth2 authentication, token management, error handling.
- MCP Tools Tests (
tests/mcp-tools.test.js
): All 8 MCP tools, error handling, pagination.
- Setup (
tests/setup.js
): Test environment configuration.
Recent Test Fixes
✅ Fixed Issues
- Token Refresh Logic
- Problem: Token expiry calculation was incorrect in
getValidToken()
.
- Solution: Fixed condition to properly check if token is within refresh margin.
- Impact: Proper token caching and refresh behavior.
- Multiple Bug IDs Handling
- Problem: State leakage between tests causing mock sequence mismatches.
- Solution: Implemented
resetServerState()
function for proper cleanup.
- Impact: Consistent test results across multiple runs.
- Search Tools Implementation
- Problem: Same state management issue affecting keyword search and other tools.
- Solution: Proper server state reset between tests.
- Impact: All 8 MCP tools now work correctly.
- Error Handling
- Problem: API errors and network timeouts not properly converted to MCP error responses.
- Solution: Enhanced error handling in
handleMCPMessage()
function.
- Impact: Proper error responses for client applications.
- Authentication Failure Scenarios
- Problem: Health endpoint returning 200 instead of 503 on auth failures.
- Solution: Module cache clearing and proper state isolation.
- Impact: Correct health status reporting.
- Test State Management
- Problem: Module-level variables persisting between tests.
- Solution: Added
resetServerState()
export and proper module cache clearing.
- Impact: True test isolation and reliable test results.
Test Configuration
- Jest: Using Jest with
--forceExit
flag for main test runs.
- State Reset: Each test gets a fresh server instance with clean state.
- Mock Management: Proper fetch mocking with correct sequence handling.
- Test Isolation: Module cache clearing prevents state leakage.
Key Implementation Details
- Native fetch: Uses Node.js native fetch instead of external libraries.
- Token Management: 12 - hour token validity with 30 - minute refresh margin.
- Error Handling: Comprehensive error handling with proper MCP error responses.
- Security: Helmet security headers, CORS support, input validation.
- Logging: Structured JSON logging with timestamps.
Development
Project Structure
mcp-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
Development Commands
npm install
npm run dev
npm test
npm run test:watch
docker build -t mcp-cisco-support .
npm run dev 2>&1 | jq '.'
Performance Considerations
- Token caching reduces API calls.
- Pagination limits results to 10 per page.
- SSE heartbeat every 30 seconds keeps connections alive.
- Request timeout set to 30 seconds.
Security Notes
- Never commit
.env
file to version control.
- Use environment variables for all secrets.
- Review Cisco API usage limits and terms.
- Monitor logs for suspicious activity.
API Reference
Authentication
- OAuth2 URL:
https://id.cisco.com/oauth2/default/v1/token
- Grant Type:
client_credentials
- Token Validity: 12 hours
- Auto-refresh: 30 minutes before expiry
Bug API Base URL
- Base URL:
https://apix.cisco.com/bug/v2.0
MCP Protocol
The server implements the Model Context Protocol with these methods:
initialize
: Initialize MCP connection
tools/list
: List available tools
tools/call
: Execute a tool
Example MCP message:
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "search_bugs_by_keyword",
"arguments": {
"keyword": "memory leak",
"status": "open"
}
}
}
📄 License
MIT License - see LICENSE file for details.
Support
Resources
External Resources