# Tennis Warehouse MCP Server
๐พ **Secure MCP wrapper for Tennis Warehouse's internal APIs**
This MCP server provides LLMs with safe, business-friendly access to Tennis Warehouse product data through their internal Solr search API.
## ๐ก๏ธ Security Benefits
- **API Gateway**: Protects internal Tennis Warehouse APIs from direct LLM access
- **Data Filtering**: Only exposes customer-relevant product information
- **Input Validation**: Sanitizes and validates all search parameters
- **Rate Limiting**: Controls API usage and prevents abuse
- **Error Handling**: Clean error messages instead of internal stack traces
## ๐ง Installation
1. **Create virtual environment:**
```bash
cd tennis-warehouse-mcp
python3 -m venv .venv
source .venv/bin/activate
```
2. **Install dependencies:**
```bash
pip install "mcp[cli]" httpx requests pydantic
```
3. **Configure Claude Desktop:**
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"tennis-warehouse": {
"command": "/path/to/tennis-warehouse-mcp/.venv/bin/python3",
"args": ["/path/to/tennis-warehouse-mcp/main.py"],
"env": {
"TW_API_TIMEOUT": "10",
"TW_MAX_RESULTS": "20"
}
}
}
}
```
4. **Restart Claude Desktop** to load the new MCP server
## ๐ฏ Available Tools
### `search_tennis_products(query, category, max_results)`
Search Tennis Warehouse products with intelligent filtering.
**Example:**
```
๐ค "Find Wilson racquets under $200"
```
### `search_tennis_bags(style, brand, max_results)`
Search specifically for tennis bags with advanced filtering.
**Example:**
```
๐ค "Show me Head backpack tennis bags"
```
### `search_tennis_racquets(brand, weight_range, max_results)`
Search for tennis racquets with brand and weight filtering.
**Example:**
```
๐ค "Find Babolat lightweight racquets"
```
### `search_tennis_shoes(gender, brand, court_type, max_results)`
Search for tennis shoes with gender, brand, and court type filtering.
**Example:**
```
๐ค "Find Nike men's hard court tennis shoes"
```
### `get_product_categories()`
Get all available product categories with product counts.
### `check_product_availability(product_name)`
Check if a specific product is in stock.
**Example:**
```
๐ค "Is the Wilson Pro Staff 97 available?"
```
### `get_tennis_deals(category, max_results)`
Find current deals and discounted tennis products.
**Example:**
```
๐ค "Show me current racquet deals"
```
## ๐ What LLMs Get vs. Internal API
| **LLM Gets (Safe)** | **Internal API Has (Protected)** |
|---|---|
| โ
Product name, brand, price | โ Internal product IDs |
| โ
Availability status | โ Exact inventory counts |
| โ
Public product URLs | โ Supplier costs |
| โ
Category information | โ Restock schedules |
| โ
Clean error messages | โ Database stack traces |
## ๐ Example Tennis Warehouse API Mapping
**Internal Solr API:**
```
https://static.tennis-warehouse.com/solr/solr_query.php?search=products&facet_set%5B%5D=facet_set_BAGFILTER&filter_cat=SHOULDBAGS
```
**MCP Tool:**
```python
search_tennis_bags(style="backpack", brand="Wilson")
```
**LLM Result:**
```json
[
{
"name": "Wilson Pro Staff Backpack",
"brand": "Wilson",
"price": "$89.99",
"availability": "Available",
"product_url": "https://www.tennis-warehouse.com/..."
}
]
```
## โ๏ธ Configuration
Environment variables can be set in Claude Desktop config:
- `TW_API_TIMEOUT`: API timeout in seconds (default: 10)
- `TW_MAX_RESULTS`: Maximum results per query (default: 20)
## ๐งช Testing
Test the API client:
```bash
source .venv/bin/activate
python3 -c "
from tennis_warehouse_api import TennisWarehouseAPI
api = TennisWarehouseAPI()
print('โ
Tennis Warehouse API client working!')
"
```
## ๐๏ธ Architecture
```
๐ค LLM (Claude)
โ (MCP Protocol)
๐ก๏ธ Tennis Warehouse MCP Server
โ (HTTP/JSON)
๐ Tennis Warehouse Internal Solr API
โ
๐ Product Database
```
## ๐พ LLM Usage Examples
Once configured, LLMs can use natural language to search Tennis Warehouse:
- *"Find me Wilson tennis bags under $100"*
- *"What Nike tennis shoes are available for women?"*
- *"Show me current deals on Babolat racquets"*
- *"Is the Head Speed MP racquet in stock?"*
- *"Find lightweight tennis racquets for beginners"*
The MCP server handles all the complexity of mapping these requests to the internal Solr API while keeping sensitive data protected! ๐พโจ