Skip to main content
Glama
jjsteffen23

CME Prediction Markets MCP Server

by jjsteffen23
base.html11.6 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{% block title %}CME Prediction Markets MCP Server{% endblock %}</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"> <style> body { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; } .card { box-shadow: 0 10px 30px rgba(0,0,0,0.1); border-radius: 15px; border: none; } .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border: none; border-radius: 25px; } .navbar { background: rgba(255,255,255,0.95) !important; backdrop-filter: blur(10px); } .tool-card { transition: transform 0.3s ease, box-shadow 0.3s ease; } .tool-card:hover { transform: translateY(-5px); box-shadow: 0 15px 40px rgba(0,0,0,0.15); } /* Chat Widget Styles */ .chat-widget { position: fixed; bottom: 20px; right: 20px; z-index: 1000; } .chat-button { width: 60px; height: 60px; border-radius: 50%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; box-shadow: 0 4px 20px rgba(0,0,0,0.3); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 24px; transition: all 0.3s ease; } .chat-button:hover { transform: scale(1.1); box-shadow: 0 6px 25px rgba(0,0,0,0.4); } .chat-window { position: fixed; bottom: 90px; right: 20px; width: 350px; height: 500px; background: white; border-radius: 15px; box-shadow: 0 8px 40px rgba(0,0,0,0.2); display: none; flex-direction: column; z-index: 999; } .chat-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px 20px; border-radius: 15px 15px 0 0; display: flex; justify-content: space-between; align-items: center; } .chat-messages { flex: 1; padding: 15px; overflow-y: auto; max-height: 350px; } .chat-input-area { padding: 15px; border-top: 1px solid #eee; border-radius: 0 0 15px 15px; } .message { margin-bottom: 15px; padding: 10px 15px; border-radius: 18px; max-width: 80%; word-wrap: break-word; } .message.user { background: #007bff; color: white; margin-left: auto; text-align: right; } .message.assistant { background: #f1f3f4; color: #333; } .chat-input { width: 100%; border: 1px solid #ddd; border-radius: 20px; padding: 10px 15px; resize: none; outline: none; } .chat-send-btn { position: absolute; right: 25px; bottom: 25px; background: #007bff; color: white; border: none; border-radius: 50%; width: 35px; height: 35px; cursor: pointer; } </style> </head> <body> <nav class="navbar navbar-expand-lg navbar-light mb-4"> <div class="container"> <a class="navbar-brand fw-bold" href="/gui/"> <i class="fas fa-chart-line me-2"></i> CME MCP Server </a> <div class="navbar-nav ms-auto"> <a class="nav-link" href="/gui/">Dashboard</a> <a class="nav-link" href="/gui/claim-verification">Verify Claims</a> <a class="nav-link" href="/gui/contract-explorer">Explore Contracts</a> <a class="nav-link" href="/gui/trading-data">Trading Data</a> <a class="nav-link" href="/docs">API Docs</a> </div> </div> </nav> <div class="container"> {% block content %}{% endblock %} <!-- Chat Widget --> <div class="chat-widget"> <!-- Chat Button --> <button class="chat-button" id="chatToggle" title="Ask about CME market data"> 💬 </button> <!-- Chat Window --> <div class="chat-window" id="chatWindow"> <div class="chat-header"> <span><strong>CME Market Assistant</strong></span> <button type="button" class="btn-close btn-close-white" id="chatClose"></button> </div> <div class="chat-messages" id="chatMessages"> <div class="message assistant"> 👋 Hi! I can help you analyze CME predictive market data. Ask me about: <br>• Contract prices and trading activity <br>• Market predictions and claims <br>• Sports betting contract performance <br><br>What would you like to know? </div> </div> <div class="chat-input-area"> <div style="position: relative;"> <textarea class="chat-input" id="chatInput" placeholder="Ask about market data..." rows="2" ></textarea> <button class="chat-send-btn" id="chatSend"> ➤ </button> </div> <div class="typing-indicator" id="typingIndicator" style="display: none; padding: 10px 15px; color: #666; font-style: italic;"> Assistant is typing... </div> </div> </div> </div> <script> // Chat Widget JavaScript const chatToggle = document.getElementById('chatToggle'); const chatWindow = document.getElementById('chatWindow'); const chatClose = document.getElementById('chatClose'); const chatMessages = document.getElementById('chatMessages'); const chatInput = document.getElementById('chatInput'); const chatSend = document.getElementById('chatSend'); const typingIndicator = document.getElementById('typingIndicator'); let isOpen = false; // Toggle chat window chatToggle.addEventListener('click', () => { if (isOpen) { chatWindow.style.display = 'none'; chatToggle.innerHTML = '💬'; } else { chatWindow.style.display = 'flex'; chatToggle.innerHTML = '✕'; chatInput.focus(); } isOpen = !isOpen; }); // Close chat chatClose.addEventListener('click', () => { chatWindow.style.display = 'none'; chatToggle.innerHTML = '💬'; isOpen = false; }); // Send message async function sendMessage() { const message = chatInput.value.trim(); if (!message) return; // Add user message addMessage(message, 'user'); chatInput.value = ''; // Show typing indicator typingIndicator.style.display = 'block'; scrollToBottom(); try { // Call chat API const response = await fetch('/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ message: message }) }); const data = await response.json(); // Hide typing indicator typingIndicator.style.display = 'none'; // Add assistant response addMessage(data.response || 'Sorry, I encountered an error.', 'assistant'); } catch (error) { console.error('Chat error:', error); typingIndicator.style.display = 'none'; addMessage('Sorry, I\'m having trouble connecting. Please try again.', 'assistant'); } } // Add message to chat function addMessage(text, sender) { const messageDiv = document.createElement('div'); messageDiv.className = `message ${sender}`; messageDiv.innerHTML = text.replace(/\n/g, '<br>'); chatMessages.appendChild(messageDiv); scrollToBottom(); } // Scroll to bottom function scrollToBottom() { chatMessages.scrollTop = chatMessages.scrollHeight; } // Event listeners chatSend.addEventListener('click', sendMessage); chatInput.addEventListener('keypress', (e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendMessage(); } }); </script> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> // Global MCP API client class MCPClient { async callTool(toolName, args) { const response = await fetch('/mcp/call_tool', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({name: toolName, arguments: args}) }); return await response.json(); } async getTools() { const response = await fetch('/mcp/tools'); return await response.json(); } } const mcpClient = new MCPClient(); // Utility functions function showLoading(element) { element.innerHTML = '<div class="text-center"><i class="fas fa-spinner fa-spin"></i> Processing...</div>'; } function showError(element, error) { element.innerHTML = `<div class="alert alert-danger"><i class="fas fa-exclamation-triangle"></i> Error: ${error}</div>`; } function formatJSON(obj) { return '<pre class="bg-light p-3 rounded"><code>' + JSON.stringify(obj, null, 2) + '</code></pre>'; } </script> {% block scripts %}{% endblock %} </body> </html>

Latest Blog Posts

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/jjsteffen23/dk_mcp_2'

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