Sink
A self-hosted mail trap for Laravel staging and CI — capture outbound email instead of sending it.
Sink is MIT licensed. Fork it and run it yourself for free, forever — or let Scalpels do the setup on your own Laravel Cloud account.
A mail trap you own
Sink is a self-hosted mail trap for applications that should never send real email from staging or CI. It gives your non-production environments a dedicated place to capture outbound mail on infrastructure you control, instead of routing test messages through a third-party SaaS.
It is capture-only by design. A sink Laravel mail transport posts your app's outbound mail to an HTTP /ingest endpoint instead of delivering it, so nothing leaves your environment and no customer ever receives a message from a test run.
Built for Laravel Cloud ownership
Sink follows the same fork-and-own-it model as the rest of Built for Cloud. You fork the application, connect it to Laravel Cloud, and run your own Sink deployment on compute you control.
Pointing your app's mail at your Sink deployment is the only wiring step. Your staging and CI environments use the sink transport, the messages land in your deployment, and your production mail configuration stays untouched.
What Sink captures
Sink captures the outbound mail your app would have sent — subject, recipients, headers, metadata, and body — and presents it in a human inbox UI you can read. Your team opens the inbox to confirm what a flow actually sent without a real message ever leaving the environment.
Body-blind through MCP
Sink also exposes a Model Context Protocol server so an AI agent can assert on captured mail — that a message was sent, to the right recipients, with the expected subject, headers, and metadata. The MCP server is body-blind: it never exposes private message bodies to the agent, so automated checks stay useful without reading the contents of every email.
How to run it yourself
You do not need Scalpels for any of this. Sink is MIT licensed and the repository is public — these are the steps, and you are welcome to do them by hand.
-
1
Fork the Sink repository into your own GitHub organization.
-
2
Deploy the fork to Laravel Cloud with its own compute.
-
3
Point your app's staging and CI mail at your Sink deployment with the sink transport.
Or let Scalpels deploy Sink for you
Scalpels forks the repository into your GitHub, provisions exactly what the app needs on your own Laravel Cloud account, and deploys it. The app and the infrastructure are yours either way — the only question is who spends the afternoon.