Stash
Stash
Stash ist eine Next.js-App-Router-Anwendung mit First-Party-E-Mail-/Passwort-Authentifizierung, zustandslosen Auth.js-Sitzungen, Prisma/PostgreSQL-Persistenz, transaktionalen E-Mails über Resend und authentifizierten Lesezeichen-Tools über Model Context Protocol (MCP).
Lokale Einrichtung
Installiere Abhängigkeiten mit
pnpm install.Kopiere
.env.examplenach.envund ersetze jeden Platzhalter. Committe niemals.env.Generiere
AUTH_SECRETmitpnpm exec auth secret(oder einem anderen kryptografisch sicheren Generator).Setze
APP_URLauf die vertrauenswürdige öffentliche Origin, normalerweisehttp://localhost:3000lokal. In der Produktion muss HTTPS verwendet werden.Konfiguriere
EMAIL_FROMmit einem Absender auf einer in Resend verifizierten Domain.Setze
MCP_AUTH_ISSUERauf den exakten vertrauenswürdigen Issuer des OAuth-Autorisierungsservers. Lokale Entwicklung darf Loopback-HTTP verwenden; Produktions-Issuer müssen HTTPS verwenden und dürfen weder Query noch Fragment enthalten.Wende Migrationen mit
pnpm prisma migrate devan. Die eingecheckten Migrationen erstellen die Tabellen für Authentifizierung und Lesezeichen.Starte die Anwendung mit
pnpm dev.
Der Server validiert DATABASE_URL, RESEND_API_KEY, AUTH_SECRET, APP_URL, MCP_AUTH_ISSUER und EMAIL_FROM und meldet ungültige Variablennamen, ohne deren Werte auszugeben.
Related MCP server: bookmark-mcp
Authentifizierungsverhalten
/signuperstellt einen Credentials-Benutzer, sendet eine Best-Effort-Willkommens-E-Mail und meldet den Benutzer an./loginerstellt eine siebentägige, verschlüsselte Auth.js-Cookie-Sitzung mit HTTP-only./forgot-passwordgibt für eine syntaktisch gültige E-Mail-Adresse immer eine Antwort, die gegen Account-Enumeration geschützt ist./reset-passwordverbraucht ein SHA-256-gehashtes, 60-minütiges Einmal-Token und widerruft ältere Sitzungen, indem die Sitzungsversion des Benutzers erhöht wird./autorisiert anhand des aktuellen Datenbankdatensatzes über das DAL, bevor gerendert wird.
lib/rate-limit.ts ist der Erweiterungspunkt für einen zukünftigen gemeinsamen IP-/E-Mail-Limiter. Die datenbankgestützte 60-Sekunden-Abklingzeit pro Konto ist allein kein vollständiges Produktionssystem zur Missbrauchskontrolle.
Lesezeichen-MCP
Der zustandslose, ausschließlich moderne MCP-Endpunkt ist POST /api/mcp. Sein kanonischer RFC-8707-Ressourcenidentifikator und die Access-Token-Audience sind immer ${APP_URL}/api/mcp. Öffentliche RFC-9728-Discovery ist unter /.well-known/oauth-protected-resource/api/mcp verfügbar; Stash stellt keine Autorisierungs-, Token-, Registrierungs-, Widerrufs- oder JWKS-Endpunkte bereit.
Der Endpunkt stellt genau vier Tools bereit:
add_bookmarkunddelete_bookmarkerfordernbookmarks:write.list_bookmarksundsearch_bookmarkserfordernbookmarks:read.
Stash-Clients mit gleicher Herkunft können ihr Auth.js-Cookie verwenden und erhalten beide Fähigkeiten. Remote-native, Desktop- und Server-Clients senden bei jeder Anfrage ein Bearer-Zugriffstoken. Cross-Origin-MCP-Aufrufe im Browser werden bewusst nicht unterstützt. Eine 401-Challenge verweist Clients auf das Dokument der geschützten Ressource; eine 403-insufficient_scope-Challenge identifiziert den genauen Scope, der für ein begrenztes OAuth-Schritt-up erforderlich ist.
Stash ist ausschließlich eine durch OAuth 2.1 geschützte Ressource. Der separat betriebene Autorisierungsserver muss Authorization Code mit PKCE S256, Ressourcen-Indikatoren für die exakte kanonische MCP-URI und die Identifizierung des Issuers in der Autorisierungsantwort unterstützen. Er muss validierte RFC-8414- oder OpenID-Discovery-Metadaten, eine jwks_uri und access_token_signing_alg_values_supported veröffentlichen, wobei access_token_signing_alg_values_supported einen erlaubten asymmetrischen Algorithmus (RS256 oder ES256) enthält.
Zugriffstokens müssen kurzlebige JWT-Zugriffstokens mit geschütztem Header typ: at+jwt und einem kid sein. Erforderliche Claims sind exakte iss, aud mit genau einer Ressource, die lokale Stash-Benutzer-ID in sub, exp, iat, mit Leerzeichen getrenntes scope, client_id (oder azp) und ganzzahliges stash_session_version. Der Autorisierungsserver muss diese Version aus der aktuellen Stash-Benutzerzeile erzeugen und die Token-Lebensdauer auf höchstens 60 Minuten begrenzen. Er darf niemals E-Mail-Adressen in sub platzieren und darf nicht erwarten, dass Stash Benutzer aus Tokens bereitstellt.
Für lokale Remote-Client-Tests konfiguriere einen Loopback-Autorisierungsserver, setze MCP_AUTH_ISSUER auf dessen Issuer, registriere den Client vorab (oder verwende ein Client-ID-Metadaten-Dokument), fordere die exakte Ressource ${APP_URL}/api/mcp sowie die geringsten Lesezeichen-Scopes an und sende Stash ausschließlich das daraus resultierende Zugriffstoken. Refresh-Tokens gehen ausschließlich an den Autorisierungsserver.
E-Mail-Entwicklung
Automatisierte Tests mocken Resend und rufen dessen API niemals auf. Um Vorlagen ohne Versand vorab anzusehen, rendern Sie die exportierten React-Komponenten in emails/ mit einem lokalen React-E-Mail-Vorschauwerkzeug oder einem privaten, nur für Entwicklungszwecke bestimmten Harness. Füge keinen öffentlichen /api/send-Endpunkt hinzu. Verwende End-to-End-E-Mail-Tests einen separaten Resend-Testschlüssel und -Absender sowie ein separates Postfach; verwende niemals Produktionsempfänger.
Verifizierung
pnpm prisma format
pnpm prisma validate
pnpm prisma generate
pnpm lint
pnpm test
pnpm buildDatenbankintegrationstests erfordern eine isolierte TEST_DATABASE_URL. Browsertests erfordern eine isolierte Testkonfiguration und laufen mit pnpm test:e2e. Richte keine der Test-Suiten auf eine Entwicklungs- oder Produktionsdatenbank aus und setze niemals eine Datenbank ohne ausdrückliche Genehmigung zurück.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceManage Safari bookmarks through an MCP server, providing tools to list, search, add, remove, and organize bookmarks and folders.Apache 2.0
- FlicenseAqualityCmaintenanceA bookmark management MCP server that enables saving, searching, and managing bookmarks with tags and read/unread status, providing tools, resources, and prompts for integration.4
- AlicenseAqualityAmaintenanceManages Chrome's synced bookmarks through an MCP server and Chrome extension, enabling operations like listing, searching, adding, moving, and deduplicating bookmarks.17MIT
- AlicenseBqualityCmaintenanceEnables management of Raindrop.io bookmarks, collections, tags, and highlights via MCP tools, with support for search, bulk editing, and library auditing.17MIT
Related MCP Connectors
Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.
Manage feature requests, votes, roadmaps, and changelogs from any MCP client.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/roguebot13/stash'
If you have feedback or need assistance with the MCP directory API, please join our Discord server