A Model Context Protocol (MCP) server that provides real-time Nike product search and comparison capabilities with custom widgets. Built following the official OpenAI Pizzaz Python example patterns using FastMCP.
Works with ChatGPT (via Connectors), Claude Desktop, and any MCP-compatible client.
- 🔍 Real Nike Product Data - Scrapes Nike.com for live product information
- 🖼️ Product Images - High-resolution images from Nike's CDN
- 💰 Pricing & Availability - Real-time pricing and stock information
- ⚖️ Product Comparison - Side-by-side product comparisons
- 🎨 Custom UI Widget - React component for rich product displays
- 🌐 Multiple Transports - Supports stdio (desktop) and SSE (web)
# Clone or navigate to the project
cd nikesearch
# Install Python dependencies (using uv)
uv sync
# Or use pip
pip install -r requirements.txt# Run the FastMCP server
uv run python main.py
# Or directly with Python
python main.pyThe server will start on http://127.0.0.1:8000 with the MCP endpoint at /mcp.
-
Start ngrok in a new terminal:
ngrok http 8000
-
Copy the ngrok HTTPS URL (e.g.,
https://abc123.ngrok-free.app) -
In ChatGPT:
- Go to Settings → Connectors
- Click "Create new connector"
- Enter your ngrok URL +
/mcp:https://abc123.ngrok-free.app/mcp - Select "No Authentication"
- Wait for validation
-
Test with: "Search for Nike Vomero"
See QUICK_START.md for more options.
Works perfectly with stdio transport:
-
Edit
~/Library/Application Support/Claude/claude_desktop_config.json:{ "mcpServers": { "nike-search": { "command": "uv", "args": [ "--directory", "/Users/ntorwe/nikesearch", "run", "nikesearch.py" ] } } } -
Restart Claude Desktop
-
Ask: "Compare Nike Vomero and Pegasus"
- Start servers (REST API + ngrok)
- Go to: https://chatgpt.com/#settings/Connectors
- Add your ngrok URL
Note: May timeout; use Option A if issues occur.
nikesearch/
├── main.py # ⭐ FastMCP server (Pizzaz-style)
├── requirements.txt # Python dependencies
├── pyproject.toml # UV project config
├── uv.lock # Locked dependencies
├── web/ # React widget source (optional)
│ ├── src/
│ │ ├── component.tsx # Main comparison widget
│ │ ├── ProductCard.tsx # Product display component
│ │ └── types.ts # TypeScript types
│ ├── dist/
│ │ └── component.js # Bundled widget
│ └── package.json # Node dependencies
└── docs/
├── README.md # This file
├── QUICK_START.md # Fast reference
├── PIZZAZ_REFACTOR_COMPLETE.md # Refactor guide
├── READY_FOR_CHATGPT.md # Setup guide
└── CHATGPT_DEVELOPER_MODE_SETUP.md # Detailed instructions
Legacy files (kept for reference):
├── nikesearch.py # Original MCP implementation
├── nikesearch_rest.py # Old REST wrapper
└── test_mcp_client.py # Test suite
The MCP server provides these tools:
-
search- Search for Nike products- Input:
query(string) - Returns: JSON with array of
{id, title, url}
- Input:
-
fetch- Fetch specific product details- Input:
url(string - product URL or ID) - Returns: JSON with
{id, title, text, url, metadata}
- Input:
-
search_products- Advanced search with filters- Inputs:
query,limit,gender,category - Returns: Detailed product list
- Inputs:
-
get_product_details- Get full product information- Input:
product_id - Returns: Complete product details
- Input:
-
get_product_images- Get product image URLs- Input:
product_id - Returns: Array of image URLs
- Input:
-
compare_products- Side-by-side comparison- Inputs:
product1,product2 - Returns: Formatted comparison (with custom UI support)
- Inputs:
Run the test suite:
uv run python test_mcp_client.pyThis will verify:
- REST API endpoints
- MCP SSE connection
- All required manifests
- Tool availability
Once the REST API server is running, visit:
- Interactive Docs: http://localhost:8000/docs
- OpenAPI Spec: http://localhost:8000/openapi.json
- Health Check: http://localhost:8000/health
| Endpoint | Purpose |
|---|---|
/ |
API information |
/health |
Health check |
/api/search |
REST search endpoint |
/api/compare |
REST compare endpoint |
/.well-known/ai-plugin.json |
AI plugin manifest |
/app-manifest.json |
ChatGPT Apps manifest |
/openapi.json |
OpenAPI specification |
/sse |
MCP Server-Sent Events |
/docs |
Interactive API docs |
Once connected to ChatGPT or Claude:
- "Search for Nike Vomero"
- "Compare Nike Vomero and Pegasus"
- "Show me Nike running shoes"
- "What's the price of Nike Air Max?"
- "Find Nike basketball shoes"
cd web
npm install
npm run buildThis generates web/dist/component.js which is embedded in the MCP server.
# Terminal 1: REST API Server
uv run python nikesearch_rest.py
# Terminal 2: ngrok (for HTTPS)
ngrok http 8000
# Terminal 3: Test
uv run python test_mcp_client.py- QUICK_START.md - Fast reference for getting started
- READY_FOR_CHATGPT.md - Complete setup guide
- CHATGPT_DEVELOPER_MODE_SETUP.md - Detailed instructions
Currently uses no authentication (auth: none) for simplicity. For production use, consider implementing:
- OAuth 2.0 dynamic client registration
- API key authentication
- Rate limiting
This tool scrapes Nike.com for educational and personal use. Please:
- Respect Nike's Terms of Service
- Implement rate limiting
- Cache results to minimize requests
- Do not use for commercial purposes without permission
- No user data is collected or stored
- All searches are performed in real-time
- No analytics or tracking
- See
privacy_policy_urlin manifests for details
This is a personal project. Feel free to fork and customize for your own use.
MIT License - See project for details.
- Built with Model Context Protocol
- Uses FastAPI for REST API
- React widget built with TypeScript
- Product data from Nike.com
Status: ✅ Ready for use with ChatGPT and Claude Desktop
Last Updated: October 13, 2025