Gmail for your agent.

A self-hosted Model Context Protocol server that talks to Gmail on your behalf. You own the OAuth client, the refresh tokens, and the host. Nothing is registered with a third-party mail SaaS.

3 KB
Of a 140 KB deed, what the standard connector delivered
25 MB
What pigeon delivers, Gmail’s own ceiling
0
Live links rewritten to a google.com/url redirect
70 MB
Resident memory on a shared $5 box

Cursor’s Gmail connector chopped a 140 KB deed to a 3 KB stub and rewrote live links to google.com/url. There is no repo to patch. We pointed this seat at pigeon instead.

GrokBot
Grok Bot

Running GrokBot?

Give GrokBot its own mailbox.

Its own address, its own From, its own signature — on a $5 server you own. The connect card and the rules the seat works by are on one page, written for GrokBot and for you.

Set up GrokBot →

What it does

Connect one or more Gmail accounts. Your agent searches threads, reads messages, labels and archives, drafts and sends real MIME — including file attachments staged onto the server and pulled back off it — with a live Gmail signature appended at send time.

One mailbox can carry many agents. Each gets its own address as a verified Gmail send-as identity; pigeon routes inbound on the address the sender actually used and lets an agent send as itself — From, Reply-To, its own signature — validated in the tool, not in a prompt.

Shipped surface is Gmail only. Calendar and Drive APIs may be enabled on the Google project for later; this server does not call them yet.

accounts_*
List connected mailboxes; start Google consent from the agent seat; revoke.
search / messages_list / get_*
Find threads and messages without dumping megabytes of base64 into the model. Headers-only sweeps carry originalTo — the real recipient behind a catch-all.
identities_list / from_identity
Gmail’s send-as list is the registry. An agent may send only as an address on it; anything else is rejected before a byte is built.
send / reply / forward
Server-built RFC822. Attachments are paths under an outbox root — never inline content from the chat.
outbox/stage
Authenticated HTTP upload so a remote agent can drop a file, then attach it, with no scp.
inbox/fetch
The way back: get_attachment returns a one-time link that only the seat that pulled the file can open.

Built for your agent

pigeon is aimed at agent seats — GrokBot, OpenClaw, Hermes, and similar. The HTTP transport speaks Streamable MCP behind a per-seat bearer: each agent sees only the mailboxes you grant. Consent for a mailbox starts from a seat that is allowed to connect accounts and finishes in your browser via a public HTTPS callback — no Desktop loopback required for that path. You mint the other seats at /~/.

What it is instead of

Google’s hosted Gmail MCP

A third-party product surface. pigeon builds MIME on your host and calls gmail.googleapis.com directly.

Pasting tokens in chat

Refresh tokens stay on disk (mode 0640). The agent never sees them.

scp for every attachment

POST /outbox/stage then send with the returned path. Inbound: fetch the download_url.

Run it yourself

git clone https://github.com/iXanadu/pigeon-mcp.git
cd pigeon-mcp
pip install -e .
cp examples/config.example .env
cp examples/secrets.example .keys
# fill Google Web client + bearer, then:
pigeon-doctor
pigeon-mcp-http

Full OAuth notes (In production, unverified warning, scopes): docs/google-oauth-setup.md.