# Cisco Catalog MCP Server
A [FastMCP](https://github.com/jlowin/fastmcp) server that provides tools for querying the Cisco Commerce Catalog API. Enables LLMs to look up Cisco product pricing, availability, specifications, service options, and end-of-life information.
## Features
- **Product Pricing** - Look up list prices for any Cisco SKU
- **Product Details** - Get comprehensive product information (65+ attributes)
- **Availability Check** - Check orderability, lead times, and stock status
- **Service Options** - Find available support contracts for hardware
- **EOL Status** - Check end-of-life dates and milestones
- **Physical Specs** - Get dimensions and weight for shipping/rack planning
- **Product Comparison** - Compare multiple products side by side
- **Multi-Region Support** - Query 21 different regional price lists
## Prerequisites
You need Cisco API credentials to use this server:
1. Go to [Cisco API Console](https://apiconsole.cisco.com/)
2. Log in with your CCO ID
3. Navigate to "My Apps and Keys"
4. Find "CCW Catalog" and click "Register" (or "Request Access" if needed)
5. Create an application with:
- OAuth 2.0: **Resource Owner Credentials** (required!)
- Enable **Refresh Token**
- Select APIs: Get Item Information API, Get Mapped Services API
6. Note your **Client ID** and **Client Secret**
## Installation
### From Source
```bash
git clone https://github.com/yourusername/cisco-catalog-mcp.git
cd cisco-catalog-mcp
pip install -e .
```
### Using pip (when published)
```bash
pip install cisco-catalog-mcp
```
## Configuration
Create a `.env` file in the project root:
```bash
cp .env.example .env
```
Edit `.env` with your credentials:
```bash
CISCO_CLIENT_ID=your_client_id_here
CISCO_CLIENT_SECRET=your_client_secret_here
CISCO_CCO_USERNAME=your_cco_username
CISCO_CCO_PASSWORD=your_cco_password
CISCO_PRICE_LIST=GLUS # Optional, defaults to GLUS (US pricing)
```
## Usage
### Running the Server
```bash
# Using the installed command
cisco-catalog-mcp
# Or run directly
python -m cisco_catalog_mcp.server
```
### Configuring with Claude Desktop
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"cisco-catalog": {
"command": "cisco-catalog-mcp",
"env": {
"CISCO_CLIENT_ID": "your_client_id",
"CISCO_CLIENT_SECRET": "your_client_secret",
"CISCO_CCO_USERNAME": "your_username",
"CISCO_CCO_PASSWORD": "your_password"
}
}
}
}
```
Or if using a virtual environment:
```json
{
"mcpServers": {
"cisco-catalog": {
"command": "/path/to/venv/bin/cisco-catalog-mcp",
"env": {
"CISCO_CLIENT_ID": "your_client_id",
"CISCO_CLIENT_SECRET": "your_client_secret",
"CISCO_CCO_USERNAME": "your_username",
"CISCO_CCO_PASSWORD": "your_password"
}
}
}
}
```
## Available Tools
### `lookup_pricing`
Look up pricing for one or more SKUs. Returns list price, currency, and basic product info.
```python
await lookup_pricing(["C9300-24T-E", "C9300-48T-E"], price_list="GLUS")
```
### `get_product_details`
Get comprehensive details for a single SKU including all 65+ available attributes.
```python
await get_product_details("C9300-24T-E")
```
### `check_availability`
Check orderability, lead times, and fulfillment restrictions.
```python
await check_availability(["C9300-24T-E", "WS-C3850-24T-S"])
```
### `check_end_of_life`
Get all EOL milestone dates for products.
```python
await check_end_of_life(["WS-C3750-24TS-S"])
```
### `get_service_options`
Find available service/support contracts for hardware.
```python
await get_service_options(["C9300-24T-E"])
```
### `get_physical_specs`
Get dimensions, weight, and packaging info.
```python
await get_physical_specs(["C9300-24T-E"])
```
### `get_service_sku_details`
Get details for service SKUs (CON-* part numbers).
```python
await get_service_sku_details(["CON-SNT-C93002TE"])
```
### `compare_products`
Compare 2-10 products side by side.
```python
await compare_products(["C9300-24T-E", "C9300-24T-A", "C9300-48T-E"])
```
### `list_price_lists`
List all available regional price lists.
### `list_available_attributes`
List all 65+ queryable product attributes.
## Supported Price Lists
| Code | Region | Currency |
|------|--------|----------|
| GLUS | United States | USD |
| GLEMEA | EMEA | USD |
| GLEURO | Europe | EUR |
| GLGB | United Kingdom | GBP |
| GLCA | Canada | CAD |
| GLASIA | Asia-Pacific | USD |
| AUST | Australia | AUD |
| GLIN | India | USD |
| GLICON | Latin America | USD |
| ... | [and more](src/cisco_catalog_mcp/constants.py) | |
## Example Queries for LLMs
Once configured, you can ask your LLM things like:
- "What's the list price for a Catalyst 9300-24T-E?"
- "Compare the C9300-24T-E and C9300-48T-E switches"
- "What service options are available for C9300-24T-E?"
- "Is the WS-C3750-24TS-S end of life?"
- "What's the lead time for C9200-48P-E?"
- "Get me the physical dimensions of ISR4331/K9"
## Development
### Setup
```bash
# Clone the repo
git clone https://github.com/yourusername/cisco-catalog-mcp.git
cd cisco-catalog-mcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
# Install with dev dependencies
pip install -e ".[dev]"
```
### Running Tests
```bash
pytest
```
### Code Quality
```bash
# Linting
ruff check .
# Type checking
mypy src
```
## API Reference
This server wraps the following Cisco Commerce Catalog APIs:
- **Get Item Information API** - Product details and pricing
- **Get Mapped Service API** - Service/support options
For full API documentation, see the [Cisco Commerce Catalog Web Service Implementation Guidelines](https://forums.cisco.com/OperationsExchange/s/article/ka2150000009PCtAAM/Commerce-API-Connectivity).
## License
MIT License - see [LICENSE](LICENSE) for details.
## Disclaimer
This is an unofficial tool and is not affiliated with or endorsed by Cisco Systems, Inc. Cisco, Catalyst, and other product names are trademarks of Cisco Systems, Inc.
Use of the Cisco Commerce Catalog API is subject to Cisco's terms of service and requires valid partner credentials.