Add a real mailbox to the editor you already have open. Read, search, send, reply, forward, schedule and organize mail from Copilot agent mode.
Run MCP: Add Server from the Command Palette, choose HTTP, and paste https://mcpemails.com/api/mcp. Start the server from the MCP view and authorize when prompted. No API key is involved.
VS Code runs the standard MCP OAuth flow against this server. It registers itself with RFC 7591 dynamic client registration, so there is no client ID to create, and authorizes with authorization code plus PKCE using S256. No client secret is ever transmitted, and the token carries only the scopes you approve on our consent screen. The access token it receives lasts an hour and refreshes itself; it is listed in Dashboard, API Keys as OAuth: followed by the client name, which is where you revoke the connection.
Everything on this page is a way of getting this URL into VS Code.
| Field | Value |
|---|---|
| MCP server URL | https://mcpemails.com/api/mcp |
| Transport | Streamable HTTP (MCP 2025-06-18) |
| Authentication | OAuth 2.1, authorization code with PKCE. No API key. |
Four steps. The first two are the same for every client, the rest are specific to this one.
Sign up at mcpemails.com, no card required, then go to Dashboard, Inboxes, Connect Inbox. Gmail connects with one-click Google sign-in; iCloud, Fastmail, Yahoo, Zoho and Yandex take an app-specific password; anything else connects over plain IMAP and SMTP. The free plan holds one inbox, forever.
Open the Command Palette with Shift Cmd P, or Shift Ctrl P on Windows and Linux, and run MCP: Add Server.
Pick HTTP, paste https://mcpemails.com/api/mcp, and give it a name. VS Code writes the entry below into .vscode/mcp.json.
Start the server from the MCP view and complete the sign-in when VS Code prompts. Approve the scopes you want Copilot to hold.
{
"servers": {
"mcpemails": {
"type": "http",
"url": "https://mcpemails.com/api/mcp"
}
}
}Official VS Code documentation for remote MCP servers: https://code.visualstudio.com/docs/copilot/customization/mcp-servers
Wondering which mailbox to connect first? See the provider compatibility matrix
The Add Server flow offers a command-based stdio server first, which is what most MCP servers are. This one is remote and hosted, so it has no command to run. Choose HTTP, and note the config key is type set to http. A stdio entry pointed at a URL produces a server that never starts, with no obvious reason why.
MCP tools are available to Copilot in agent mode. If the mail tools are missing from the tool picker after a successful connection, the usual cause is being in ask or edit mode rather than agent mode. The MCP view is where to confirm the server is actually running.
The default location is inside the project, which means it can be committed and shared. The URL is public and OAuth tokens are not written here, so the default is safe to share. It stops being safe the moment someone inlines a bearer API key instead. Any key that reaches a repository should be revoked from Dashboard, API Keys.
Run MCP: Add Server from the Command Palette, choose HTTP, paste https://mcpemails.com/api/mcp, then start the server and authorize when prompted. Copilot agent mode then has tools for reading, searching, sending, replying, forwarding, organizing and scheduling mail.
No. VS Code performs the OAuth browser flow with this server, so no token is written into your config. A bearer API key stays available for headless or scripted use.
This page covers VS Code specifically, because the Add Server flow and the mcp.json schema are VS Code features. JetBrains AI Assistant is a separate setup and takes a bearer API key instead of OAuth; there is a page for it.
Gmail over Google sign-in, iCloud, Fastmail, Yahoo, Zoho and Yandex with an app-specific password, and any other mailbox that speaks IMAP and SMTP on the standard ports. The client sees them all through the same connection: your agent calls inbox_list first to discover every connected mailbox and its id, so there are no UUIDs to paste anywhere.
Only if you let it. Sending is gated on the send:email scope, so a key or a token without that scope cannot send at all. On top of that, an inbox owner can require human approval in the dashboard, which holds every send, reply, forward, draft send and scheduled send until a person releases it.
No. Every message is fetched live from your provider for the request that asked for it and handed straight to your client. Only the encrypted OAuth token or app password is kept, so future calls can authenticate. Deleting the inbox in the dashboard, or revoking access at your provider, ends the connection at once.
One command, one sign-in. One inbox free forever, no card required.