We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tbrennem-source/sf-permits-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<title>Sign in — sfpermits.ai</title>
<style>
:root {
--bg: #0f1117;
--surface: #1a1d27;
--surface-2: #252834;
--border: #333749;
--text: #e4e6eb;
--text-muted: #8b8fa3;
--accent: #4f8ff7;
--accent-hover: #3a7ae0;
--success: #34d399;
--error: #f87171;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.login-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 12px;
padding: 40px;
max-width: 420px;
width: 90%;
text-align: center;
}
.logo {
font-size: 1.4rem;
font-weight: 700;
color: var(--accent);
text-decoration: none;
display: block;
margin-bottom: 8px;
}
.logo span { color: var(--text-muted); font-weight: 400; }
.tagline {
color: var(--text-muted);
font-size: 0.9rem;
margin-bottom: 32px;
}
h2 {
font-size: 1.2rem;
margin-bottom: 20px;
}
input[type="email"], input[type="text"] {
width: 100%;
padding: 12px 16px;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
font-size: 1rem;
margin-bottom: 16px;
}
input[type="email"]:focus, input[type="text"]:focus {
outline: none;
border-color: var(--accent);
}
.invite-label {
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 6px;
text-align: left;
}
.btn {
width: 100%;
padding: 12px;
background: var(--accent);
color: #fff;
border: none;
border-radius: 8px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
}
.btn:hover { background: var(--accent-hover); }
.message {
margin-top: 20px;
padding: 12px;
border-radius: 8px;
font-size: 0.9rem;
}
.message.success {
background: rgba(52, 211, 153, 0.1);
border: 1px solid var(--success);
color: var(--success);
}
.message.error {
background: rgba(248, 113, 113, 0.1);
border: 1px solid var(--error);
color: var(--error);
}
.message a {
color: var(--accent);
text-decoration: underline;
}
.back-link {
display: block;
margin-top: 20px;
color: var(--text-muted);
font-size: 0.85rem;
text-decoration: none;
}
.back-link:hover { color: var(--text); }
</style>
<link rel="stylesheet" href="/static/mobile.css">
</head>
<body>
{% if is_staging %}
<!-- SESSION A: STAGING BANNER -->
<div id="staging-banner" style="background: #fbbf24; color: #1a1d27; text-align: center; padding: 8px 16px; font-size: 14px; font-weight: 600; letter-spacing: 0.02em; position: relative; z-index: 9999;">
⚠ STAGING ENVIRONMENT — changes here do not affect production
</div>
{% endif %}
<div class="login-card">
<a href="/" class="logo">sfpermits<span>.ai</span></a>
<p class="tagline">SF permit analysis for professionals</p>
<h2>Sign in with your email</h2>
<p style="color: var(--text-muted); font-size: 0.85rem; margin-bottom: 20px;">
We'll send you a magic link — no password needed.
</p>
<form method="POST" action="/auth/send-link">
<input type="email" name="email" placeholder="you@example.com" required autofocus>
{% if invite_required %}
<p class="invite-label">Invite code (required for new accounts)</p>
<input type="text" name="invite_code" placeholder="e.g. disco-penguin-7f3a">
{% endif %}
<button type="submit" class="btn">Send magic link</button>
</form>
{% if message %}
<div class="message {{ message_type or 'success' }}">
{{ message | safe }}
</div>
{% endif %}
<a href="/" class="back-link">← Back to search</a>
</div>
</body>
</html>