Stash
Stash
Stash は、ファーストパーティのメール/パスワード認証、ステートレスな Auth.js セッション、Prisma/PostgreSQL による永続化、Resend によるトランザクションメール、Model Context Protocol (MCP) による認証付きブックマークツールを備えた Next.js App Router アプリケーションです。
ローカルセットアップ
pnpm installで依存関係をインストールします。.env.exampleを.envにコピーし、すべてのプレースホルダーを置き換えます。.envをコミットしないでください。pnpm exec auth secret(または別の暗号学的に安全なジェネレーター)でAUTH_SECRETを生成します。APP_URLには信頼できる公開オリジンを設定します。通常、ローカルではhttp://localhost:3000です。本番環境では HTTPS を使用する必要があります。Resend で検証済みのドメイン上の送信者を
EMAIL_FROMに設定します。MCP_AUTH_ISSUERには、信頼する OAuth 認可サーバーの正確な issuer を設定します。ローカル開発ではループバック HTTP を使用できます。本番環境の issuer は HTTPS を使用し、クエリやフラグメントを含めてはなりません。pnpm prisma migrate devでマイグレーションを適用します。コミット済みのマイグレーションによって、認証テーブルとブックマークテーブルが作成されます。pnpm devでアプリケーションを起動します。
サーバーは DATABASE_URL、RESEND_API_KEY、AUTH_SECRET、APP_URL、MCP_AUTH_ISSUER、EMAIL_FROM を検証し、無効な変数名を報告しますが、その値は出力しません。
Related MCP server: bookmark-mcp
認証の動作
/signupはクレデンシャルユーザーを作成し、ベストエフォートのウェルカムメールを送信して、ユーザーをサインインさせます。/loginは、7日間有効な暗号化された HTTP-only の Auth.js クッキーセッションを作成します。/forgot-passwordは、有効なメール構文に対して常にアカウント列挙耐性のあるレスポンスを返します。/reset-passwordは、SHA-256 でハッシュ化された60分間有効な使い捨てトークンを消費し、ユーザーのセッションバージョンをインクリメントすることで古いセッションを失効させます。/は、レンダリング前に DAL を通じて現在のデータベースレコードに対して認可を行います。
lib/rate-limit.ts は、将来の共有 IP/メールレートリミッターの拡張ポイントです。データベースによる60秒のアカウント単位のクールダウンは、それ単体では完全な本番向け不正利用対策システムではありません。
ブックマーク MCP
ステートレスでモダンのみ対応の MCP エンドポイントは POST /api/mcp です。その正規の RFC 8707 リソース識別子とアクセストークンの audience は常に ${APP_URL}/api/mcp です。公開の RFC 9728 ディスカバリーは /.well-known/oauth-protected-resource/api/mcp で利用できます。Stash は認可、トークン、登録、失効、JWKS の各エンドポイントを提供しません。
このエンドポイントは正確に4つのツールを公開します:
add_bookmarkとdelete_bookmarkにはbookmarks:writeが必要です。list_bookmarksとsearch_bookmarksにはbookmarks:readが必要です。
同一オリジンの Stash クライアントは Auth.js クッキーを使用して両方のケイパビリティを取得できます。リモートのネイティブ、デスクトップ、サーバークライアントは、すべてのリクエストでベアラーアクセストークンを送信します。ブラウザのクロスオリジン MCP 呼び出しは意図的にサポートされていません。401 チャレンジはクライアントを保護リソース文書へ導きます。403 insufficient_scope チャレンジは、制限付き OAuth ステップアップに必要な正確なスコープを特定します。
Stash は OAuth 2.1 の保護リソースにすぎません。別途運用される認可サーバーは、PKCE S256 を用いた認可コード、正確な正規 MCP URI の Resource Indicators、認可レスポンスの issuer 識別をサポートする必要があります。また、検証済みの RFC 8414 または OpenID ディスカバリーメタデータ、jwks_uri、許可された非対称アルゴリズム(RS256 または ES256)を含む access_token_signing_alg_values_supported を公開する必要があります。
アクセストークンは、保護ヘッダーに typ: at+jwt と kid を持つ短命な JWT アクセストークンでなければなりません。必須クレームは、正確な iss、正確な単一リソースの aud、sub 内のローカル Stash ユーザー ID、exp、iat、スペース区切りの scope、client_id(または azp)、整数の stash_session_version です。認可サーバーは、現在の Stash ユーザー行からそのバージョンを発行し、トークンの有効期間を60分以下に保つ必要があります。sub にメールアドレスを入れたり、Stash がトークンからユーザーをプロビジョニングすることを期待したりしてはなりません。
ローカルのリモートクライアントテストでは、ループバック認可サーバーを設定し、MCP_AUTH_ISSUER にその issuer を設定し、クライアントを事前登録して(または Client ID Metadata Document を使用して)、正確な ${APP_URL}/api/mcp リソースと最小限のブックマークスコープを要求し、結果のアクセストークンのみを Stash に送信します。リフレッシュトークンは認可サーバーにのみ送信されます。
メール開発
自動テストは Resend をモックし、その API を呼び出すことはありません。メールを送信せずにテンプレートをプレビューするには、emails/ 内のエクスポートされた React コンポーネントを、ローカルの React メールプレビューツールまたは開発専用のプライベートハーネスでレンダリングします。公開の /api/send エンドポイントを追加しないでください。エンドツーエンドのメールテストには、別の Resend テストキー/送信者と受信トレイを使用してください。本番の受信者を使用しないでください。
検証
pnpm prisma format
pnpm prisma validate
pnpm prisma generate
pnpm lint
pnpm test
pnpm buildデータベース統合テストには、分離された TEST_DATABASE_URL が必要です。ブラウザテストには分離されたテスト設定が必要で、pnpm test:e2e で実行します。どちらのスイートも開発者または本番データベースに向けないでください。また、明示的な承認なしにデータベースをリセットしないでください。
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