Poke discovers the bridge.
Poke fetches /.well-known/oauth-authorization-server and /register, registers itself dynamically, and starts an authorization request against /authorize. No manual app paperwork on either side.
A Poke recipe for Fastmail
mailconnect is a one-tap Poke recipe that connects your Fastmail account through MCP. One consent, one encrypted grant per user, no shared state, no surprises.
Recipe coming soon. Drop your address on the support page and we’ll write the moment it’s live.
Procedure
mailconnect speaks two protocols at once. To Poke it presents a clean MCP authorization server. To Fastmail it speaks OAuth 2.0 with PKCE and JMAP. The handoff in the middle is the entire point.
Poke fetches /.well-known/oauth-authorization-server and /register, registers itself dynamically, and starts an authorization request against /authorize. No manual app paperwork on either side.
The Worker renders a consent screen that names the connecting client and the scopes it’s asking for. From there you’re bounced to Fastmail to sign in. We never see your password.
Fastmail redirects to /auth/callback. The Worker exchanges the code for Fastmail access & refresh tokens, then issues an MCP token to Poke. Your Fastmail tokens are encrypted into that grant’s props — never logged, never shared.
When Poke refreshes its MCP grant, the Worker refreshes the upstream Fastmail token in the same step and rotates the encrypted props. The connection ages well.
Dispatches
mailconnect ships read-only. The recipe’s current scope is small on purpose — a tight first cut is more honest than a long list of half-finished verbs.
Returns the connected Fastmail account’s identity, granted scopes, primary mail account, and the JMAP capabilities the session reports — so Poke knows whose mailbox it’s working with.
Lists every mailbox on the account — Inbox, Archive, custom labels — with mailbox roles and unread counts as JMAP exposes them.
Two tools, on purpose. Searching, reading, and writing live behind their own scopes and will arrive as a deliberate, separate update.
Posture
Each Poke connection becomes its own grant, with its own encrypted Fastmail token set. No shared session state between users, by design.
Upstream Fastmail tokens are stored inside encrypted OAuth grant props handled by @cloudflare/workers-oauth-provider. We can’t read them out of band.
The current MCP surface area can’t send, move, archive, label, or delete. Future write tools will arrive behind explicit, separate scopes.
Disconnect inside Poke or revoke the app from your Fastmail security settings. The Worker will stop being able to talk to your inbox immediately.
Both Poke→mailconnect and mailconnect→Fastmail use PKCE. There is no static client secret to steal from the user’s side of the flow.
The Worker code is small, single-purpose, and inspectable. No analytics, no ad SDKs, no hidden third parties on the server side.