<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Authentication Successful - Umbrella MCP</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.container {
background: white;
border-radius: 12px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
padding: 40px;
width: 100%;
max-width: 450px;
text-align: center;
animation: slideIn 0.3s ease-out;
}
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.success-icon {
width: 80px;
height: 80px;
margin: 0 auto 20px;
background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% {
box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.7);
}
50% {
box-shadow: 0 0 0 20px rgba(76, 175, 80, 0);
}
}
.success-icon::before {
content: "✓";
color: white;
font-size: 36px;
font-weight: bold;
}
h1 {
color: #333;
margin-bottom: 15px;
font-size: 28px;
}
.message {
color: #666;
font-size: 16px;
line-height: 1.6;
margin-bottom: 25px;
}
.connecting {
color: #4CAF50;
font-weight: 500;
margin-top: 20px;
}
.countdown {
color: #999;
font-size: 14px;
margin-top: 15px;
}
</style>
</head>
<body>
<div class="container">
<div class="success-icon"></div>
<h1>Authentication Successful!</h1>
<div class="message">
You have successfully authenticated with Umbrella MCP.
</div>
<div class="connecting">
🔗 Connecting to Claude Desktop...
</div>
<div class="countdown" id="countdown">Redirecting in 3 seconds...</div>
</div>
<script>
// Direct redirect after 3 seconds (like the demo)
const redirectUrl = 'https://127.0.0.1:8787/callback?code=E6VU7lQ0qgR2VfConxSvee2WBEsFPrrP&state=test-state-12345';
let countdown = 3;
const countdownEl = document.getElementById('countdown');
const timer = setInterval(() => {
countdown--;
if (countdown > 0) {
countdownEl.textContent = `Redirecting in ${countdown} second${countdown === 1 ? '' : 's'}...`;
} else {
countdownEl.textContent = 'Redirecting now...';
clearInterval(timer);
// Direct redirect like the demo - no iframe!
window.location.href = redirectUrl;
}
}, 1000);
</script>
</body>
</html>