Skip to main content
Glama
dbankscard

SkuVault MCP Server

by dbankscard
README.md
# SkuVault MCP Server

A Model Context Protocol (MCP) server that provides seamless integration with the SkuVault inventory management system API. Built for production use with enterprise-grade features.

## ๐Ÿš€ Features

### Core Functionality
- **Product Management**: Create, read, update products individually or in batches
- **Inventory Control**: Add, remove, and set inventory quantities across warehouses
- **Warehouse Operations**: List warehouses and manage inventory by location
- **Smart Analytics**: Active/inactive products, low stock alerts, inventory summaries

### Production-Ready
- โœ… **Rate Limiting**: Dynamic rate limit learning with exponential backoff
- โœ… **Caching**: Intelligent response caching to minimize API calls
- โœ… **Safety**: Confirmation requirements for all mutating operations
- โœ… **Validation**: Comprehensive input validation for all operations
- โœ… **Performance**: Connection pooling and request queuing

## ๐Ÿ“ฆ Installation

1. Clone the repository:
```bash
git clone https://github.com/dbankscard/skuvault-mcp-server.git
cd skuvault-mcp-server
```

2. Install dependencies:
```bash
pip install -e .
```

3. Set up authentication:
```bash
cp .env.example .env
# Edit .env and add your SkuVault credentials
```

## ๐Ÿ”ง Configuration

### For Claude Desktop

Add to your Claude Desktop config file:

**MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "skuvault": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/skuvault-mcp-server",
      "env": {
        "SKUVAULT_TENANT_TOKEN": "your_tenant_token",
        "SKUVAULT_USER_TOKEN": "your_user_token"
      }
    }
  }
}
```

### Troubleshooting: PYTHONPATH Configuration

If you encounter import errors when running the server, you may need to set the `PYTHONPATH` environment variable. This is necessary because:

1. **Module Structure**: The server uses absolute imports (e.g., `from src.auth import SkuVaultAuth`) which require Python to know where to find the `src` module.
2. **MCP Integration**: When Claude Desktop launches the server, it may not automatically include the project root in Python's module search path.

To fix this, add `PYTHONPATH` to your configuration:

```json
{
  "mcpServers": {
    "skuvault": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/skuvault-mcp-server",
      "env": {
        "PYTHONPATH": "/path/to/skuvault-mcp-server",
        "SKUVAULT_TENANT_TOKEN": "your_tenant_token",
        "SKUVAULT_USER_TOKEN": "your_user_token"
      }
    }
  }
}
```

**Note**: The `PYTHONPATH` should point to the root directory of the project (where the `src` folder is located), not to the `src` folder itself.

## ๐Ÿ› ๏ธ Available Tools

### Product Operations
- `get_product(sku)` - Get product details
- `get_products(page_number, page_size, skus, get_all, active_only)` - List products
- `create_product(...)` - Create new product
- `update_product(...)` - Update product
- `batch_update_products(updates)` - Update multiple products efficiently

### Inventory Management
- `get_inventory_by_location(...)` - Get inventory with filtering
- `add_inventory(...)` - Add inventory
- `remove_inventory(...)` - Remove inventory
- `set_item_quantity(...)` - Set exact quantity

### Analytics
- `get_all_active_products()` - All active products with pagination
- `get_all_inactive_products()` - All inactive products
- `get_low_stock_products(threshold)` - Products at/below reorder point
- `get_product_summary_report()` - Comprehensive statistics

### System Tools
- `get_cache_stats()` - Cache performance metrics
- `clear_cache(pattern)` - Clear cached data
- `get_rate_limits()` - View current rate limits
- `call_api_endpoint(endpoint, **params)` - Access any SkuVault API endpoint

## ๐Ÿ“š Documentation

- **[Best Practices Guide](BEST_PRACTICES.md)** - Detailed workflows and usage patterns
- **[API Schema](api_schema_complete.json)** - Complete API specification

## ๐Ÿ’ก Example Questions You Can Ask

### ๐Ÿ“ฆ Product Management
- "Show me details for SKU ABC123"
- "Get all active products"
- "Find all inactive products" 
- "List products with SKUs ABC123, DEF456, and GHI789"
- "Show me all products from brand XYZ"
- "Create a new product with SKU NEW001, description 'Test Product', cost $10"
- "Update the price of SKU ABC123 to $29.99"
- "Update the cost to $15 for SKUs ABC123, DEF456, and GHI789"
- "Change the description of SKU XYZ789 to 'Updated Product Name'"

### ๐Ÿ“Š Inventory Analysis
- "What's my current inventory for SKU ABC123?"
- "Show inventory by location for warehouse 1"
- "Get inventory for location A1 in warehouse 2"
- "Show me all products that are low on stock"
- "Which products are at or below their reorder point?"
- "Show me inventory summary for all warehouses"
- "What products have zero quantity?"
- "List all inventory in warehouse 1, location B2"

### ๐Ÿ“ˆ Analytics & Reports  
- "Give me a product summary report"
- "Show product breakdown by brand"
- "How many active vs inactive products do I have?"
- "Show me inventory value by warehouse"
- "Which locations have the most inventory?"
- "Get product statistics including total value"
- "Show me products that need reordering"

### โž• Add Inventory
- "Add 50 units of SKU ABC123 to warehouse 1, location A1"
- "Receive 100 units of SKU XYZ789 into warehouse 2"
- "Add inventory for SKU DEF456 with a note about the shipment"

### โž– Remove Inventory
- "Remove 10 units of SKU ABC123 from warehouse 1, location A1"
- "Remove 5 units of SKU XYZ789 for order fulfillment"
- "Deduct inventory for damaged items"

### ๐Ÿ”ง Set Exact Quantities
- "Set the quantity of SKU ABC123 to exactly 100 units in warehouse 1"
- "Update SKU XYZ789 to have 0 units in location B2"
- "Correct the inventory count for SKU DEF456 to 75 units"

### ๐Ÿญ Warehouse Operations
- "List all warehouses"
- "Show me warehouse details"
- "Which warehouses do we have?"

### ๐Ÿ” Advanced Queries
- "Get the first 10 products"
- "Show me products on page 3 with 50 items per page"
- "Find all products and get complete details"
- "Check inventory across all locations for SKU ABC123"

### ๐Ÿ’ป System Operations
- "Show cache statistics"
- "Clear the product cache"
- "Show current rate limits"
- "Clear all cached data"
- "Show queue statistics"

### ๐ŸŒ Generic API Access
- "Call the getSuppliers endpoint"
- "Use the getBrands API endpoint"
- "Call getSales endpoint with date range parameters"

## ๐Ÿ“ Natural Language Understanding

The MCP server understands natural variations of these questions:
- "What's in stock for ABC123?" โ†’ Gets inventory
- "I need to update prices for multiple products" โ†’ Batch update
- "Show me what needs to be reordered" โ†’ Low stock report
- "Fix the quantity for this SKU" โ†’ Set item quantity

## ๐Ÿ”’ Safety Features

All operations that modify data require explicit confirmation:
- Clear summary of what will be changed
- Visual warnings for destructive operations
- Explicit "yes" or "confirm" required to proceed

To bypass for automation, set `confirm=True` parameter.

## ๐Ÿ—๏ธ Architecture

```
skuvault-mcp-server/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ server.py          # Main MCP server
โ”‚   โ”œโ”€โ”€ api_client.py      # SkuVault API client
โ”‚   โ”œโ”€โ”€ models/            # Pydantic models
โ”‚   โ”œโ”€โ”€ tools/             # Analytics tools
โ”‚   โ””โ”€โ”€ utils/             # Utilities (cache, rate limiter, validators)
โ”œโ”€โ”€ api_schema_complete.json  # Complete API specification
โ”œโ”€โ”€ pyproject.toml         # Package configuration
โ””โ”€โ”€ README.md              # This file
```

## ๐Ÿงช Testing

Run the test suite:
```bash
python test_server.py
```

## ๐Ÿ“„ License

MIT License - see LICENSE file for details.

## ๐Ÿค Contributing

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## ๐Ÿ”— Resources

- [SkuVault API Documentation](https://dev.skuvault.com/reference/)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Claude Desktop](https://claude.ai/download)

## โšก Quick Start

1. Clone โ†’ 2. Install โ†’ 3. Configure โ†’ 4. Add to Claude Desktop โ†’ 5. Start using!

```bash
# Clone and install
git clone https://github.com/dbankscard/skuvault-mcp-server.git
cd skuvault-mcp-server
pip install -e .

# Configure
cp .env.example .env
# Add your tokens to .env

# Test
python test_server.py

# Add to Claude Desktop and start using!
```