Connect Windsurf to Postal
Connect Postal to Windsurf's Cascade (now in the Devin Desktop documentation) with a block in mcp_config.json.
- How you sign in
- Account or key
- Transport
- HTTP
- Recommended access
- Read and send
Before you start
Check these points before opening Windsurf's settings. They prevent most connection failures.
- A team with the "MCP server" plan feature (
mcp_access); without it the server responds 403plan_limit_reached. - To send emails, the team needs at least one verified domain.
- If you will use an API key: create the key in the dashboard, under API keys. It starts with
ps_; a send-only key is enough if you will only send. - Each connection acts on a single team. To use another team, connect again and pick the other one.
- Connections are listed under Settings › AI connections in the dashboard, where they can be revoked at any time.
What Windsurf requires
Windsurf/Devin Desktop with MCP turned on (on Enterprise, the admin turns it on manually). Limit of 100 tools at the same time. The documentation does not state a minimum version or plan.
Connect
Follow the steps in order. The server address is always https://api.postal.so/mcp. Recommended path: API key (signing in with your account, via OAuth, also works).
- 1
Open the
mcp_config.jsonfile from Cascade's MCP panel (the current documentation points to~/.config/devin/mcp_config.jsonon macOS/Linux and%APPDATA%\devin\mcp_config.jsonon Windows; older installations use~/.codeium/windsurf/mcp_config.json). - 2
Add the block below. In Windsurf, the remote URL field is
serverUrl. - 3
For an API key, use the second block and set
POSTAL_API_KEYin the environment (the ${env:NAME} syntax is replaced with the variable's value). - 4
Refresh the server list in the MCP panel. With OAuth, the Postal sign-in opens on first use: choose the team and click Allow.
OAuth
{
"mcpServers": {
"postal": {
"serverUrl": "https://api.postal.so/mcp"
}
}
}API key (recommended)
{
"mcpServers": {
"postal": {
"serverUrl": "https://api.postal.so/mcp",
"headers": {
"Authorization": "Bearer ${env:POSTAL_API_KEY}"
}
}
}
}Access the tool needs
Postal splits access into three levels, explained in the scopes table. For Windsurf:
mcp:readView emails, domains, contacts, segments, topics, templates, broadcasts, automations, forms, inbox conversations, metrics and usage.
mcp:sendSend and schedule emails from verified domains and record events for automations.
mcp:fullEverything above, plus creating, changing and deleting contacts and templates, creating and sending broadcasts (send_broadcast requires confirm: true), canceling scheduled emails and working in inboxes (organize, reply, create drafts).
To look up deliveries and send test emails, mcp:read and mcp:send are enough. Cascade accesses at most 100 tools at the same time; Postal exposes 34 (2 with a sending_access key), so there is plenty of room. Team admins can require an approved server list (allowlist).
How to confirm it worked
The simplest proof is to ask for something read-only inside Windsurf itself. The connection also appears under Settings › AI connections, in the Postal dashboard, with the app, the team and the last use.
Illustrative example
For those who want the technical proof
npx @modelcontextprotocol/inspector --cli https://api.postal.so/mcp \
--transport http \
--header "Authorization: Bearer ps_..." \
--method tools/listThe Inspector proves that the Postal server responds. It does not test Windsurf itself. The full walkthrough is in Validate the connection.
If something goes wrong
Go through the list in order. Then read what we know (and what we don't) about Windsurf.
Check
- The address is exactly
https://api.postal.so/mcp, with/mcpat the end. - The connection type is HTTP (Streamable HTTP). Postal does not offer SSE: if the tool gives you the choice, use HTTP.
- The team has the "MCP server" feature on its plan. Without it, the server responds 403
plan_limit_reached. - To send emails, the team has at least one verified domain.
- Each connection acts on a single team. To use another one, connect again and pick the other.
- 429 response (
rate_limit_exceeded): the plan's requests-per-second limit was reached. Wait a moment and try again. - If the tool complains about the response size, ask for smaller lists (at most 100 items per call; the default is 20).
- To start over from scratch, revoke the connection under Settings › AI connections and connect again.
What was tested and what was not
We followed the app's specification and documentation, but have not yet tested with the real app. Below is the full note on what was and was not verified.
Test details
The official documentation (now at docs.devin.ai, on the Devin Desktop page, where docs.windsurf.com redirects) confirms remote servers over Streamable HTTP and SSE, headers, and that OAuth is available for each transport, but does not state the OAuth redirect URI, dynamic registration or the minimum version. Postal accepts the windsurf:// scheme at registration in addition to HTTPS and loopback; if the renamed product uses a different scheme of its own, dynamic registration would be rejected, and this could not be verified. The API key in a header (the recommended path here) was verified with the SDK. The rename to Devin Desktop is inferred from the official documentation's redirect.
Frequently asked questions
Do I need an API key to connect Windsurf?
It is not required. Windsurf can sign in with your Postal account (OAuth) or with an API key. Recommended path: API key (signing in with your account, via OAuth, also works). The send-only key (sending_access) exposes only send_email and track_event.
Can I limit what Windsurf does in my account?
To look up deliveries and send test emails, mcp:read and mcp:send are enough. Cascade accesses at most 100 tools at the same time; Postal exposes 34 (2 with a sending_access key), so there is plenty of room. Team admins can require an approved server list (allowlist). You can revoke the connection at any time under Settings › AI connections.
Keep going
Other tools
Each tool has its own walkthrough. See also the full list under AI.
Cursor
Connect the Cursor editor to Postal to look up domains, deliveries and templates and send test emails without leaving your code.
See how to connectClaude
Add Postal as a custom connector in Claude (web, desktop and mobile) and ask it to look up and send emails in plain language.
See how to connectClaude Code
Add Postal to Claude Code with one command and use the terminal to diagnose deliveries and send test emails.
See how to connectReady to use Postal in Windsurf?
Create your account and connect. If you need help, talk to us through the contact form.