Stash
Stash
Stash — это приложение на Next.js App Router с собственной аутентификацией по email/паролю, сессиями Auth.js без сохранения состояния, хранением данных в Prisma/PostgreSQL, транзакционными письмами через Resend и аутентифицированными инструментами закладок через Model Context Protocol (MCP).
Локальная настройка
Установите зависимости с помощью
pnpm install.Скопируйте
.env.exampleв.envи замените каждый заполнитель. Никогда не коммитьте.env.Сгенерируйте
AUTH_SECRETс помощьюpnpm exec auth secret(или другого криптографически безопасного генератора).Установите
APP_URLв доверенный публичный источник, обычноhttp://localhost:3000локально. В продакшене обязательно использование HTTPS.Настройте
EMAIL_FROMс отправителем на домене, подтверждённом в Resend.Установите
MCP_AUTH_ISSUERв точный доверенный issuer OAuth-сервера авторизации. Для локальной разработки допустим loopback HTTP; в продакшене issuer обязан использовать HTTPS и не может содержать query или fragment.Примените миграции с помощью
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создаёт пользователя с учётными данными, отправляет письмо с приветствием (best-effort) и выполняет вход пользователя./loginсоздаёт семидневную зашифрованную сессию Auth.js с cookie HTTP-only./forgot-passwordвсегда возвращает ответ, устойчивый к перечислению учётных записей, для корректного синтаксиса email./reset-passwordиспользует одноразовый токен с SHA-256-хешем, сроком действия 60 минут, и отзывает старые сессии, увеличивая версию сессии пользователя./авторизует по текущей записи в базе данных через DAL перед рендерингом.
lib/rate-limit.ts — это точка расширения для будущего общего ограничителя IP/email. Бэкенд-ограничение на 60 секунд на учётную запись само по себе не является полной системой защиты от злоупотреблений в продакшене.
Закладки MCP
Конечная точка MCP без сохранения состояния, только для современных клиентов, — POST /api/mcp. Её канонический идентификатор ресурса RFC 8707 и аудитория токена доступа всегда равны ${APP_URL}/api/mcp. Публичное обнаружение RFC 9728 доступно по адресу /.well-known/oauth-protected-resource/api/mcp; Stash не предоставляет конечные точки авторизации, токенов, регистрации, отзыва или JWKS.
Конечная точка предоставляет ровно четыре инструмента:
add_bookmarkиdelete_bookmarkтребуютbookmarks:write.list_bookmarksиsearch_bookmarksтребуютbookmarks:read.
Клиенты Stash с тем же источником могут использовать свой cookie Auth.js и получать обе возможности. Удалённые нативные, настольные и серверные клиенты отправляют bearer access token в каждом запросе. Вызовы MCP из браузера с другого источника намеренно не поддерживаются. Вызов 401 направляет клиентов к документу защищённого ресурса; вызов 403 insufficient_scope указывает точную область, необходимую для ограниченного OAuth step-up.
Stash — это только защищённый ресурс OAuth 2.1. Отдельно управляемый сервер авторизации должен поддерживать authorization code с PKCE S256, Resource Indicators для точного канонического URI MCP и идентификацию issuer в ответе авторизации. Он должен публиковать проверенные метаданные обнаружения RFC 8414 или OpenID, jwks_uri и access_token_signing_alg_values_supported, содержащие разрешённый асимметричный алгоритм (RS256 или ES256).
Токены доступа должны быть кратковременными JWT access token с защищённым заголовком typ: at+jwt и kid. Обязательные claims: точный iss, точный aud с одним ресурсом, локальный идентификатор пользователя Stash в sub, exp, iat, scope с разделителями-пробелами, client_id (или azp) и целочисленный stash_session_version. Сервер авторизации должен создавать эту версию из текущей строки пользователя Stash и поддерживать время жизни токена не более 60 минут. Он никогда не должен помещать адреса электронной почты в sub или ожидать, что Stash будет создавать пользователей из токенов.
Для локального тестирования удалённых клиентов настройте loopback-сервер авторизации, установите MCP_AUTH_ISSUER на его issuer, предварительно зарегистрируйте клиента (или используйте Client ID Metadata Document), запросите точный ресурс ${APP_URL}/api/mcp плюс минимальные области закладок и отправляйте в Stash только полученный access token. Refresh token отправляются только на сервер авторизации.
Разработка электронной почты
Автоматические тесты имитируют Resend и никогда не вызывают его API. Чтобы просмотреть шаблоны без отправки писем, отрендерьте экспортированные React-компоненты в emails/ с помощью локального инструмента предпросмотра React email или частного dev-окружения. Не добавляйте публичную конечную точку /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