JWT-scoped tokens
Each agent gets a token bound to one mailbox and a precise set of actions — messages:send, messages:index, attachments:show. Grant only what the agent actually needs.
Scoped Email Gateway · For CI Tests & AI Agents
A scoped-token email gateway built for two prominent use cases:
Same REST API, same per-action token scopes. In production at obseed.me (since 2020) and linubra.com (since October 2025). See the full release history.
Hosted in Switzerland · In production · Limited beta
# Use case 1 — assert an email arrived in a CI test (Playwright)
test('password reset email arrives', async () => {
await app.requestReset('qa@your-app.test');
const msgs = await squibble.list({
to: 'qa@your-app.test',
subject: /reset your password/i,
});
expect(msgs).toHaveLength(1);
});
# Use case 2 — let an AI agent send mail (LangChain / plain HTTP)
await squibble.send({
from: 'assistant@your-app.com',
to: ['customer@example.com'],
subject: 'Re: your support ticket',
body_text: 'Update on your request...',
idempotency_key: ticket.id,
}); RFC 9457
Problem JSON
RFC 3464
Bounce VERP
RFC 8058
List-Unsub
The Problem
Most teams reach for the same shortcut twice: an IMAP password pasted into a CI secret store so tests can read mail, and an SMTP service account handed to autonomous code. Both work — until something leaks, spoofs a domain, or quietly sends to a suppressed address.
These are the failure modes we kept hitting first in CI test pipelines (originally during a 2023–2024 mandate at one of Switzerland's largest retailers, asserting auth flows end-to-end) and then again in agent integrations. Same primitives fix both.
What we keep seeing
Before you let it send (or read), decide exactly what it can.
Capabilities
Built for the narrow problem of giving test runners and autonomous code safe access to email — and nothing wider.
Each agent gets a token bound to one mailbox and a precise set of actions — messages:send, messages:index, attachments:show. Grant only what the agent actually needs.
From, Reply-To, and envelope-sender are always rewritten to the authenticated mailbox. A stolen token cannot impersonate an arbitrary sender.
Read and search the inbox over a clean JSON API. Selective BODYSTRUCTURE fetch keeps attachments out of your agent's context window.
Create, delete, and subscribe to hierarchical folder structures over REST. Bulk move or copy messages between folders with automatic metadata cache updates.
VERP-authenticated bounce processing per RFC 3464. Permanent bounces and unsubscribes are suppressed automatically — no silent skips.
Send files with any message: base64-encode the content, declare a filename and MIME type, and the API handles MIME assembly. Up to 20 files, 10 MiB each, 25 MiB total per send.
Engagement events are recorded automatically on HTML sends — opened_at and clicked_at on first occurrence only, never on subsequent.
Every send is queryable. Drill into queued, delivered, bounced, opened, and clicked events per message — no log scraping, no audit gaps.
Block on one request until a matching message lands — no polling loop, no sleep() in your tests. messages:await holds the connection per IMAP round-trip (no worker pinned during the wait) and returns the moment it arrives, with a clean RFC 9457 408 on timeout. Deterministic email assertions in CI.
Drop Squibble into any MCP-compatible agent runtime. A hosted HTTP/SSE endpoint at api.email.squibble.ch/mcp is live — point Claude Desktop or any MCP client directly at it with your Bearer token, no local install. For air-gapped or local setups, run the published stdio container image instead. 15 tools covering send, inbox, delivery tracking, and folder management. Your scoped JWT carries zero added authority; the token is never logged or persisted.
One image. One API. One token per agent — revoked in one call.
Integration
No SDK to install. No SMTP library to wire up. Plain HTTP and a Bearer token.
Tell us the mailbox address you want to send from or test against, and what you are building. We onboard a small batch of teams each week.
# Scroll to the form below
# We reply within one business day. We provision the mailbox on our infrastructure, configure DNS for you, and issue your first JWT scoped to one set of actions.
mailbox: agent@yourapp.com
scopes: messages:send
messages:index Your agent calls the REST API with the Bearer token. No SMTP library, no credentials, no rotation headache.
POST /api/v1/messages/send
Authorization: Bearer <token> From waitlist to your agent's first delivered message: usually within a business day.
Security
The defaults assume the token is already breached. Everything is scoped, encrypted, audited.
Every default is the safe one. Insecure operation requires an explicit decision.
Get started
Join the waitlist. We onboard a small batch of teams each week and reply within one business day.
Hosted in Switzerland · In production at obseed.me since 2020 · linubra.com since 2025