Skip to main content
Glama
walkerhughes

sqlite-notes

by walkerhughes

Stytch-authenticated SQLite MCP

Ein bewusst kleiner Remote-MCP-Dienst zum Erlernen der Struktur einer SaaS-Integration:

  • FastMCP stellt sechs Tools über Streamable HTTP bereit.

  • Stytch Connected Apps übernimmt OAuth-2.1-Discovery, Dynamic Client Registration, PKCE, Browser-Login, Einwilligung und Token-Ausstellung.

  • Der Dienst validiert die Signatur, den Aussteller, die Zielgruppe, das Ablaufdatum und den openid-Scope jedes Zugriffstokens gegen Stytchs rotierende JWKS.

  • SQLite-Zeilen sind über das sub des Tokens indiziert, sodass jeder Stytch-Benutzer nur seine eigenen Notizen sieht.

  • Der Zugriff wird vom Server auf 30 Minuten begrenzt, selbst wenn ein Stytch-Client versehentlich mit einer längeren Zugriffstoken-Lebensdauer konfiguriert ist.

  • Das Claude-Code-Plugin führt eine festgepinnte mcp-remote-Brücke aus, die OAuth durchführt und Claude Code mit dem Remote-MCP-Endpunkt verbindet.

Architektur

Claude Code plugin -> http(s)://MCP/mcp -> validate Stytch JWT -> per-user SQLite CRUD
         |                                      ^
         +-> Stytch discovery -> browser login/consent app -> Stytch token endpoint

Die Browser-App ist notwendig. Stytch hostet Discovery-, Registrierungs- und Token-Endpunkte, während Ihre Anwendung die IdentityProvider-Komponente für Login und Einwilligung hostet.

Related MCP server: Supabase MCP Server

1. Stytch konfigurieren

Erstellen Sie ein Consumer Authentication-Projekt und konfigurieren Sie dann:

  1. Aktivieren Sie im Frontend SDK das SDK und autorisieren Sie http://localhost:3000.

  2. Fügen Sie unter Redirect URLs http://localhost:3000/authenticate für Login und Registrierung hinzu.

  3. Aktivieren Sie Email Magic Links mit Login oder Create.

  4. Legen Sie unter Connected Apps die Authorization URL auf http://localhost:3000/oauth/authorize fest.

  5. Aktivieren Sie Dynamic Client Registration. Der MCP-Client verwendet DCR, da sein Callback-Port variieren kann.

  6. Setzen Sie das Ablaufdatum des Zugriffstokens der Connected Apps auf 30 Minuten, wo Stytch dies zulässt.

Der Dienst und das Plugin fordern nur openid an, da der MCP-Server nur die stabile sub-Kennung benötigt. Er benötigt keine Profil- oder E-Mail-Daten.

Der Server lehnt jedes Zugriffstoken 30 Minuten nach dessen iat ab. Das Plugin verwendet die festgepinnte mcp-remote@0.2.1-Brücke, die die vom MCP-geschützten Ressource beworbenen Scopes anfordert, ohne offline_access hinzuzufügen. Stytch stellt daher kein Refresh-Token aus, und der Ablauf führt den Benutzer zur interaktiven Autorisierung zurück.

Diese Brücke ist beabsichtigt. Natives Claude-Code-OAuth fügt automatisch offline_access hinzu, wenn der Autorisierungsserver es bewirbt, was eine stille Token-Aktualisierung ermöglicht und die Anforderung der erzwungenen Anmeldung zunichte macht.

Kopieren Sie .env.example in .env und setzen Sie:

  • STYTCH_PROJECT_ID: die project-test-...-Projekt-ID, die als JWT-Zielgruppe verwendet wird.

  • STYTCH_DOMAIN: die vollständige Projekt-Domain, die von Stytch angezeigt wird, z. B. https://...customers.stytch.dev, verwendet als Aussteller und JWKS-Host. Verwenden Sie hier nicht das API-Secret oder das öffentliche Token.

  • STYTCH_PUBLIC_TOKEN: der browser-sichere public-token-test-...-Wert, der von der Login- und Einwilligungs-UI verwendet wird.

  • MCP_BASE_URL: extern sichtbarer Ursprung des MCP-Servers, ohne /mcp.

Kein Stytch-Secret-Schlüssel gehört in dieses Projekt. Die JWT-Verifizierung benötigt nur öffentliche Signaturschlüssel.

Nach dem Speichern der Dashboard-Konfiguration überprüfen Sie die Stytch-Discovery und die Signaturschlüssel:

set -a; source .env; set +a
uv run python scripts/check_stytch.py

Fahren Sie nicht mit dem Browser-Login-Test fort, bis dies PASS: Stytch authorization metadata and JWKS are ready for MCP OAuth. ausgibt.

2. Lokal ausführen

uv sync
set -a; source .env; set +a
uv run mcp-auth

In einem anderen Terminal:

cd web
npm install
npm run dev

Für einen echten OAuth-Test sollten sowohl der MCP-Endpunkt als auch die Autorisierungsseite normalerweise über stabile HTTPS-URLs erreichbar sein. Ein Entwicklungstunnel kann die Ports 8000 und 3000 veröffentlichen. Aktualisieren Sie MCP_BASE_URL, die autorisierte Umgebung und Redirect-URL des Stytch Frontend SDK, die Authorization URL der Connected Apps und SQLITE_NOTES_MCP_URL auf diese HTTPS-URLs. Das einfache Localhost-Setup ist beim Entwickeln nützlich, aber die Produktion muss HTTPS verwenden.

3. Claude-Code-Plugin installieren und authentifizieren

Registrieren Sie vom Repository-Stammverzeichnis aus den lokalen Marketplace und installieren Sie das Plugin für dieses Projekt:

claude plugin marketplace add "$PWD" --scope project
claude plugin install sqlite-notes@mcp-auth-local --scope project

Die lokale Server-URL lautet standardmäßig http://127.0.0.1:8000/mcp. Für einen gehosteten oder getunnelten Server legen Sie die URL fest, bevor Sie Claude Code starten:

export SQLITE_NOTES_MCP_URL=https://your-mcp-tunnel.example/mcp

Führen Sie dann /reload-plugins aus, öffnen Sie /mcp und wählen Sie sqlite-notes. Die festgepinnte mcp-remote-Brücke entdeckt den Stytch-Autorisierungsserver über den MCP-Server, registriert sich selbst, öffnet den Browser, verwendet PKCE und kehrt mit einem Zugriffstoken zurück.

Probieren Sie Aufforderungen wie:

  • „Erstellen Sie eine Notiz mit dem Titel Grocery list und dem Inhalt coffee and oranges."

  • „Listen Sie meine Notizen auf."

  • „Aktualisieren Sie Notiz 1, um milk hinzuzufügen."

  • „Löschen Sie Notiz 1."

Nach 30 Minuten lehnt der MCP-Server das aktuelle Zugriffstoken ab. Da die Brücke kein offline_access anfordert, kann sie nicht still aktualisieren und muss die interaktive Autorisierung wiederholen.

Tests

uv run pytest
cd web && npm run build

Die automatisierten Tests decken CRUD und die Isolierung zwischen Benutzern sowie die 30-Minuten-Grenze des Zugriffstokens ab. Ein vollständiger Login kann ohne ein konfiguriertes Stytch-Projekt und ein E-Mail-Postfach nicht automatisiert werden, daher ist der Browser-Ablauf eine explizite manuelle End-to-End-Prüfung.

Produktionshinweise

SQLite und ein einzelner Prozess sind für diese Übung beabsichtigt. Verwenden Sie für einen kostenpflichtigen Multi-Instanz-Dienst eine verwaltete Datenbank, Migrationen, Backups, HTTPS, strukturierte Audit-Logs, Ratenbegrenzungen und explizite Autorisierungs-Scopes. Behalten Sie dieselbe Grenze bei: Stytch authentifiziert den Benutzer, während Ihre Datenbank und Ihr Dienst entscheiden, auf welche Zeilen und Aktionen dieser Benutzer zugreifen darf.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables notes management through MCP integration with a Supabase PostgreSQL database, supporting full CRUD operations. It features secure user data isolation using JWT authentication and Row Level Security policies.
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    A simple server for saving, listing, and searching notes persisted to a local JSON file. It enables users to manage their personal notes using natural language via the Model Context Protocol.
    3
    -

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/walkerhughes/mcp-auth'

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