All notes

MCP · October 30, 2026

Ask Grok for a newsletter

Point Grok at the Pigeon MCP server, ask it to check the domain, then ask it to create the letter. The same call is POST /api/newsletters.

A full-access key can verify a domain. A sending key can create the letter and publish a later issue. Put the key in the MCP environment. PIGEON_BASE_URL is https://pigeonfs.com. SENDER_EMAIL_ADDRESS is the default From, on a domain you already verified.

Configure Grok

shell
[mcp_servers.pigeon]
command = "npx"
args = ["-y", "github:pigeonfs/pigeon-mcp"]

[mcp_servers.pigeon.env]
PIGEON_API_KEY = "pg_your_key"
PIGEON_BASE_URL = "https://pigeonfs.com"
SENDER_EMAIL_ADDRESS = "ada@yourdomain.com"

Ask for the domain check

Reload Grok so it picks up the server. verify_domain reads the DNS result. A domain can still be pending after the records are published. create_domain is the call that adds a domain and returns the records to publish. Then prompt:

shell
Use Pigeon to list my domains.
If yourdomain.com is not verified, verify it and tell me what is still missing.

Ask for the letter

shell
Use create_newsletter for a Pigeon letter named Sunday Notes.
From is Ada <ada@yourdomain.com>.
Description: A short letter about the product.
Use the sea design.
Reply with the public page link.

create_newsletter calls POST /api/newsletters. The response field url is the subscribe page. The tool returns that link. It does not send an issue. Readers confirm from the message, and a later publish call sends the issue to confirmed readers.

One letter made this way is Pigeon notes.

Open Pigeon notes

The same call from the API

The body needs name and from. description and design are optional. Design defaults to paper. The names are paper, butter, ink, sea, tomato, linen, night, postcard, ledger, bloom, signal, harbor, and folio. A 201 response includes url and embed_url.

shell
curl -X POST https://pigeonfs.com/api/newsletters \
  -H "Authorization: Bearer $PIGEON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Pigeon notes","from":"Pigeon <ada@yourdomain.com>","description":"Notes from the API."}'
  • list_newsletters, create_newsletter, and get_newsletter use the same routes.
  • POST /api/newsletters/:id/campaigns writes the issue.
  • POST /api/newsletters/:id/campaigns/:campaign_id/publish sends it after readers confirm.
MCP server guide Newsletter guide Create and publish from the API Share a page for your newsletter Set up domains and mail from a prompt