Skip to main content
Glama

MCPizza

by GrahamMcBain
web_tester.html15.5 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>MCPizza Server Tester</title> <style> body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; background-color: #f5f5f5; } .container { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); margin-bottom: 20px; } .header { text-align: center; color: #d62300; margin-bottom: 30px; } .tool-section { margin-bottom: 30px; padding: 15px; border: 1px solid #ddd; border-radius: 5px; } .tool-title { font-size: 18px; font-weight: bold; color: #333; margin-bottom: 10px; } .tool-description { color: #666; margin-bottom: 15px; } input, textarea, button { padding: 8px 12px; margin: 5px 0; border: 1px solid #ddd; border-radius: 4px; font-size: 14px; } input, textarea { width: 100%; box-sizing: border-box; } button { background-color: #d62300; color: white; border: none; cursor: pointer; padding: 10px 20px; font-weight: bold; } button:hover { background-color: #b01e00; } .result { background-color: #f8f9fa; border: 1px solid #e9ecef; border-radius: 4px; padding: 15px; margin-top: 10px; white-space: pre-wrap; font-family: monospace; max-height: 300px; overflow-y: auto; } .status { padding: 10px; margin: 10px 0; border-radius: 4px; font-weight: bold; } .success { background-color: #d4edda; border: 1px solid #c3e6cb; color: #155724; } .error { background-color: #f8d7da; border: 1px solid #f5c6cb; color: #721c24; } .info { background-color: #d1ecf1; border: 1px solid #bee5eb; color: #0c5460; } </style> </head> <body> <div class="container"> <div class="header"> <h1>🍕 MCPizza Server Tester</h1> <p>Test the MCPizza MCP server tools interactively</p> <div class="status error"> ⚠️ DEMO MODE: This uses mock data for demonstration. Real server uses actual Domino's API. </div> </div> <div id="status" class="status info"> Click "Test Server Connection" to start </div> <div class="tool-section"> <div class="tool-title">Server Connection</div> <div class="tool-description">Test if the MCPizza server is working</div> <button onclick="testConnection()">Test Server Connection</button> <div id="connection-result" class="result" style="display:none;"></div> </div> <div class="tool-section"> <div class="tool-title">Find Domino's Store</div> <div class="tool-description">Find the nearest Domino's store by address or zip code</div> <input type="text" id="address-input" placeholder="Enter address or zip code (e.g., 10001)" value="10001"> <button onclick="findStore()">Find Store</button> <div id="store-result" class="result" style="display:none;"></div> </div> <div class="tool-section"> <div class="tool-title">Search Menu</div> <div class="tool-description">Search for specific items in the store menu</div> <input type="text" id="search-input" placeholder="Enter search term (e.g., pizza, wings)" value="pizza"> <button onclick="searchMenu()">Search Menu</button> <div id="menu-result" class="result" style="display:none;"></div> </div> <div class="tool-section"> <div class="tool-title">Add to Order</div> <div class="tool-description">Add items to your pizza order</div> <input type="text" id="item-code-input" placeholder="Item code (e.g., M_PEPPERONI)" value="M_PEPPERONI"> <input type="number" id="quantity-input" placeholder="Quantity" value="1" min="1"> <button onclick="addToOrder()">Add to Order</button> <div id="order-add-result" class="result" style="display:none;"></div> </div> <div class="tool-section"> <div class="tool-title">View Order</div> <div class="tool-description">View current order contents and total</div> <button onclick="viewOrder()">View Order</button> <div id="order-view-result" class="result" style="display:none;"></div> </div> </div> <script> function updateStatus(message, type = 'info') { const status = document.getElementById('status'); status.textContent = message; status.className = `status ${type}`; } function showResult(elementId, content) { const element = document.getElementById(elementId); element.textContent = JSON.stringify(content, null, 2); element.style.display = 'block'; } // Simulate MCP server responses (since we can't actually call the Python server from browser) function mockMCPCall(tool, params) { switch(tool) { case 'connection': return { status: 'success', server: 'mcpizza', version: '0.1.0', tools: ['find_dominos_store', 'search_menu', 'add_to_order', 'view_order'] }; case 'find_dominos_store': // Mock data based on common zip codes const zipMockData = { '95608': { store_id: "4521", phone: "(916) 555-0199", address: "1234 Main St Carmichael, CA", is_delivery_store: true, min_delivery_order_amount: 10.00, delivery_minutes: "20-30", pickup_minutes: "10-20" }, '10001': { store_id: "3681", phone: "(212) 555-0123", address: "123 Broadway New York, NY", is_delivery_store: true, min_delivery_order_amount: 10.00, delivery_minutes: "25-35", pickup_minutes: "15-25" }, '90210': { store_id: "2105", phone: "(310) 555-0156", address: "456 Rodeo Dr Beverly Hills, CA", is_delivery_store: true, min_delivery_order_amount: 15.00, delivery_minutes: "30-40", pickup_minutes: "15-25" } }; const mockStore = zipMockData[params.address] || { store_id: "9999", phone: "(555) 555-0100", address: `123 Demo St ${params.address}`, is_delivery_store: true, min_delivery_order_amount: 10.00, delivery_minutes: "25-35", pickup_minutes: "15-25" }; return { ...mockStore, status: "success", note: "⚠️ This is mock demo data - real server would use actual Domino's API" }; case 'search_menu': if (params.query.toLowerCase().includes('pizza')) { return { items: [ { category: "Pizza", code: "S_PIZZA", name: "Medium Hand Tossed Pizza", description: "Medium pizza with classic hand tossed crust", price: "$15.99" }, { category: "Pizza", code: "L_DELUXE", name: "Large Deluxe Pizza", description: "Pepperoni, Italian sausage, green peppers, mushrooms, onions", price: "$21.99" }, { category: "Pizza", code: "M_PEPPERONI", name: "Medium Pepperoni Pizza", description: "Classic pepperoni pizza", price: "$17.99" } ], status: "success" }; } else if (params.query.toLowerCase().includes('wings')) { return { items: [ { category: "Wings", code: "HOT_WINGS", name: "Hot Buffalo Wings", description: "Spicy buffalo wings with celery", price: "$9.99" } ], status: "success" }; } else { return { error: `No items found matching '${params.query}'` }; } case 'add_to_order': window.orderItems = window.orderItems || []; window.orderItems.push({ code: params.item_code, quantity: params.quantity }); return { message: `Added ${params.quantity}x ${params.item_code} to order`, status: "success" }; case 'view_order': window.orderItems = window.orderItems || []; if (window.orderItems.length === 0) { return { message: "No items in order yet" }; } return { items: window.orderItems, total: "$35.36", status: "success" }; default: return { error: `Unknown tool: ${tool}` }; } } function testConnection() { updateStatus('Testing server connection...', 'info'); setTimeout(() => { const result = mockMCPCall('connection', {}); showResult('connection-result', result); updateStatus('✅ Server connection successful', 'success'); }, 500); } function findStore() { const address = document.getElementById('address-input').value; if (!address) { updateStatus('❌ Please enter an address', 'error'); return; } updateStatus('Finding store...', 'info'); setTimeout(() => { const result = mockMCPCall('find_dominos_store', { address }); showResult('store-result', result); updateStatus('✅ Store found successfully', 'success'); }, 500); } function searchMenu() { const query = document.getElementById('search-input').value; if (!query) { updateStatus('❌ Please enter a search term', 'error'); return; } updateStatus('Searching menu...', 'info'); setTimeout(() => { const result = mockMCPCall('search_menu', { query }); showResult('menu-result', result); if (result.error) { updateStatus('❌ No items found', 'error'); } else { updateStatus(`✅ Found ${result.items.length} items`, 'success'); } }, 500); } function addToOrder() { const itemCode = document.getElementById('item-code-input').value; const quantity = parseInt(document.getElementById('quantity-input').value) || 1; if (!itemCode) { updateStatus('❌ Please enter an item code', 'error'); return; } updateStatus('Adding to order...', 'info'); setTimeout(() => { const result = mockMCPCall('add_to_order', { item_code: itemCode, quantity }); showResult('order-add-result', result); updateStatus('✅ Item added to order', 'success'); }, 500); } function viewOrder() { updateStatus('Loading order...', 'info'); setTimeout(() => { const result = mockMCPCall('view_order', {}); showResult('order-view-result', result); if (result.items) { updateStatus(`✅ Order contains ${result.items.length} items`, 'success'); } else { updateStatus('ℹ️ Order is empty', 'info'); } }, 500); } // Initialize window.orderItems = []; </script> <div class="container"> <h3>About This Tester</h3> <p>This web interface demonstrates the MCPizza server functionality using mock data. To test the actual server, use:</p> <ul> <li><code>python test_mcpizza_with_curl.py</code> - Direct server testing</li> <li><code>mcp tools python mcpizza/mcp_stdio_server.py</code> - With mcptools</li> <li>MCP client integration for real usage</li> </ul> <p>The MCPizza server is ready for integration with AI assistants and MCP clients!</p> </div> </body> </html>

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GrahamMcBain/mcpizza'

If you have feedback or need assistance with the MCP directory API, please join our Discord server