Skip to main content
Glama
failure-page.ts3.82 kB
export function getFailurePage(error?: string): string { const errorMessage = error || 'Authentication failed'; return `<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Authentication Failed - Umbrella MCP</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; color: #fff; } .container { background: rgba(255, 255, 255, 0.95); border-radius: 20px; box-shadow: 0 25px 50px rgba(0, 0, 0, 0.2); overflow: hidden; max-width: 480px; width: 100%; padding: 50px 40px; text-align: center; backdrop-filter: blur(10px); } .logo { width: 80px; height: 80px; margin: 0 auto 30px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 36px; color: white; font-weight: bold; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); } h1 { color: #333; font-size: 28px; margin-bottom: 15px; font-weight: 600; } .error-icon { width: 60px; height: 60px; margin: 0 auto 20px; background: #ff4757; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 30px; color: white; } .message { color: #666; font-size: 16px; margin-bottom: 30px; line-height: 1.5; } .error-details { background: #fff3f3; border: 1px solid #ffc4c4; border-radius: 10px; padding: 15px; margin-bottom: 30px; color: #c9302c; font-size: 14px; word-break: break-word; } .button { display: inline-block; padding: 14px 40px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; text-decoration: none; border-radius: 30px; font-size: 16px; font-weight: 500; transition: transform 0.3s, box-shadow 0.3s; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); border: none; cursor: pointer; } .button:hover { transform: translateY(-2px); box-shadow: 0 15px 40px rgba(0, 0, 0, 0.25); } .footer { margin-top: 30px; color: #999; font-size: 14px; } @keyframes shake { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); } 20%, 40%, 60%, 80% { transform: translateX(5px); } } .error-icon { animation: shake 0.5s; } </style> </head> <body> <div class="container"> <div class="logo">☂️</div> <div class="error-icon">✕</div> <h1>Authentication Failed</h1> <div class="message"> We couldn't authenticate your account. Please check your credentials and try again. </div> <div class="error-details"> ${errorMessage} </div> <button class="button" onclick="goBack()">Try Again</button> <div class="footer"> <p>Umbrella MCP Server</p> </div> </div> <script> function goBack() { window.history.back(); } // Auto-close after 30 seconds setTimeout(() => { window.close(); }, 30000); </script> </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/daviddraiumbrella/invoice-monitoring'

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