slab-email
slab-email
Безголовый коннектор электронной почты для AI-агентов через REST и MCP.
slab-email — это локальный микросервис, который стандартизирует доступ к почтовым ящикам через нормализованный API и поверхность инструментов MCP.
Он предназначен для slab-agents и других сред выполнения ИИ, которым требуется контролируемый доступ к нескольким учетным записям электронной почты с безопасной обработкой учетных данных.
Что это такое?
slab-email — это не интерфейс электронной почты.
Он предоставляет:
Нормализованные возможности чтения/поиска/создания/отправки через почтовых провайдеров.
Admin REST для управления учетными записями и профилями доступа.
MCP-сервер для LLM/инструментальных клиентов.
Адаптеры на уровне провайдеров для:
Proton через Proton Mail Bridge (обязательно).
Общий IMAP/SMTP.
Gmail через OAuth2 + Gmail API.
Зашифрованное хранение учетных данных в SQLite.
Ограниченные токены коннектора с возможностями на профиль.
Идемпотентность отправки и базовое ограничение скорости для предотвращения зацикливания.
Архитектура
Общая схема:
slab-agentsвызывает/mcpс ограниченным токеном коннектора.REST-эндпоинты администратора настраивают провайдеров и профили доступа.
Учетные записи хранятся в SQLite; учетные данные зашифрованы в состоянии покоя.
Во время запроса создаются экземпляры провайдера из конфигурации учетной записи и расшифрованного секрета.
slab-emailвыполняет операции с API провайдера (IMAP/SMTP или Gmail API).
slab-agents (REST/MCP) -> slab-email
|
+-> sqlite (config + encrypted secrets)
+-> providers
+ proton_bridge -> Proton Mail Bridge (local IMAP/SMTP)
+ imap_smtp -> Any IMAP/SMTP
+ gmail -> Gmail API (OAuth2)Возможности
Поддержка нескольких учетных записей:
одновременное подключение и управление несколькими учетными записями.
Абстракция провайдера:
Proton Bridge + IMAP/SMTP общий + Gmail.
Разрешения с ограничением по коннектору:
чтение / черновик / отправка.
Идемпотентная отправка/ответ с
idempotencyKey.Потоковые полезные нагрузки чтения/списка и полная гидратация сообщений.
Зашифрованные секреты с использованием
AES-256-GCM.Токены доступа с ограничением по профилям.
Admin API и MCP API разделены требованиями к токенам.
Готовность к Docker и CI.
Стек
Node.js + TypeScript
Express 5
SQLite (
better-sqlite3)Zod
MCP SDK (
@modelcontextprotocol/sdk)IMAP/SMTP:
imapflow,nodemailerGmail:
googleapis/google-auth-library
Быстрый старт
1) Запустите локальный сервис
npm install
cp .env.example .envУстановите значения в .env и выполните:
export SLAB_EMAIL_ADMIN_KEY=change-me
export SLAB_EMAIL_MASTER_KEY=<32-byte base64 or 64-hex key>
npm run devОжидается:
GET /health→{"status":"ok"}./mcpдоступен поPOST /mcp.
2) Зарегистрируйте ограниченный профиль + токен
Используйте токен администратора для управления учетными записями/профилями и токен коннектора для обычного использования.
Конфигурация
Обязательные / релевантные переменные окружения:
HOST(по умолчанию127.0.0.1)PORT(по умолчанию6981)DATABASE_PATH(по умолчанию./data/slab-email.db)SLAB_EMAIL_ADMIN_KEY(обязательно)SLAB_EMAIL_MASTER_KEY(обязательно, 32-байтовый ключ)GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URI(по умолчаниюhttp://127.0.0.1:6981/api/oauth/google/callback)MAX_SENDS_PER_ACCOUNT_PER_HOUR(по умолчанию60)MCP_ALLOWED_ORIGINS(через запятую)MCP_ALLOWED_ORIGINS_HOSTS(через запятую)PUBLIC_ADMIN_ALLOWED_ORIGINS(через запятую)
Смотрите .env.example для минимальной начальной загрузки.
Настройка Proton Bridge
Установите Proton Mail Bridge.
Добавьте свою учетную запись Proton в Bridge и скопируйте сгенерированную конфигурацию IMAP/SMTP.
Настройте
slab-emailс этой конфигурацией через:POST /api/accounts/proton-bridge
Проверьте:
POST /api/accounts/:id/test
Этот проект намеренно не реализует автоматизацию входа в Proton. Используйте только учетные данные, сгенерированные Bridge.
Смотрите docs/proton.md.
Настройка Gmail
Создайте учетные данные OAuth в Google Cloud.
Установите
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URIв.env.Запустите сервис.
Используйте:
POST /api/accounts/gmail/connectдля полученияauthorizationUrl.
Завершите OAuth в браузере.
Обратный вызов:
GET /api/oauth/google/callback
Учетная запись Gmail сохраняется с токеном обновления в зашифрованной БД.
Смотрите docs/gmail.md.
REST API
Базовые:
GET /health/api/*POST /mcp
Аутентификация:
Эндпоинты администратора:
Bearer <SLAB_EMAIL_ADMIN_KEY>Операционные + MCP:
Bearer <ограниченный токен коннектора>
Смотрите docs/api.md для полных примеров запросов/ответов.
MCP
Эндпоинт: POST /mcp
Инструменты:
email_list_accountsemail_searchemail_get_messageemail_list_threadsemail_get_threademail_create_draftemail_sendemail_reply
Смотрите docs/mcp.md для полезных нагрузок инструментов и использования.
Модель безопасности
SLAB_EMAIL_MASTER_KEYтребуется для шифрования/расшифровки секретов провайдера.Секреты никогда не возвращаются через admin REST/MCP.
Ограниченные токены коннектора заменяют ключ администратора в операционных контекстах.
Разрешения на чтение/запись/отправку применяются для каждого профиля доступа.
Отправка идемпотентна по
(accountId, idempotencyKey).Неизвестные результаты отправки отображаются как
SEND_OUTCOME_UNKNOWNи никогда не повторяются автоматически вслепую.Ограничение скорости отправки на учетную запись по умолчанию:
MAX_SENDS_PER_ACCOUNT_PER_HOUR.Журналы скрывают потенциально конфиденциальные ключи.
Модель данных
email_accounts: метаданные учетной записи и конфигурация провайдера (без секретов).email_account_secrets: зашифрованная полезная нагрузка (username,password,refreshToken).access_profiles+access_profile_accounts.access_tokens: хэшированные токены коннектора.send_operations: статус + поля аудита иidempotency_key.
Смотрите docs/architecture.md.
Docker
Dockerfileдля сборки образа.docker-compose.ymlдля локального запуска.
Примечание: Proton Bridge работает локально. Если Bridge запущен вне Docker на хосте, настройте сетевое взаимодействие осторожно (сетевое подключение хоста или эквивалент), так как контейнер не может по умолчанию предполагать доступ к учетным данным хоста 127.0.0.1.
Разработка
npm run dev # start with hot reload
npm test # run test suite
npm run lint
npm run typecheck
npm run build
npm start # run production bundleТестирование
Доменные тесты охватывают:
Жизненный цикл учетной записи и шифрование секретов
Проверка состояния OAuth
Область действия профиля и разрешения
Разделение полезных нагрузок поиска/списка и получения
Идемпотентность отправки
Поведение при неизвестном результате отправки
Аутентификация/область действия/выполнение инструментов MCP
Ограничения (MVP)
Нет поддержки вложений.
Нет механизма синхронизации почтовых ящиков, локального полнотекстового поискового индекса или вебхуковой push-синхронизации.
Нет пакетной обработки/кампаний исходящих писем.
Нет веб-интерфейса почты в этом сервисе.
Интеграция с slab-agents
Если существует ../slab-agents, используйте docs/slab-agents-integration.md для контракта интеграции и конфигурации.
Лицензия
MIT
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 Connectors
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Email for AI agents — send, receive as a webhook, manage domains, templates, routing.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
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/martin2844/slab-email'
If you have feedback or need assistance with the MCP directory API, please join our Discord server