Skip to content

MCP server

The @ampout/mcp-server package is a Model Context Protocol server that wraps the ampout REST API. With it installed, any MCP-compatible client (Claude Desktop, Cursor, ChatGPT desktop apps, n8n, agent frameworks) can manage your campaigns by calling tools.

This is the agent-native way to use ampout. No dashboard, no clicking through screens — just say “list my campaigns and pause the OC one” and the LLM figures out the rest.

The MCP server is a stdio process — clients launch it via npx, no install required.

Terminal window
# Optional: pre-warm the npm cache
npx -y @ampout/mcp-server@latest --help

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on other OSes:

{
"mcpServers": {
"ampout": {
"command": "npx",
"args": ["-y", "@ampout/mcp-server@latest"],
"env": {
"AMPOUT_API_KEY": "ak_live_..."
}
}
}
}

Restart Claude Desktop. The 11 ampout tools should now appear in the tool list.

Tip: issue a dedicated API key with client_kind: "mcp" so you can split MCP traffic from direct API traffic in /usage:

Terminal window
curl -X POST https://ampout.fly.dev/api_keys \
-H "Authorization: Bearer $YOUR_DIRECT_KEY" \
-H "Content-Type: application/json" \
-d '{"label": "Claude Desktop", "client_kind": "mcp"}'

Edit ~/.cursor/mcp.json:

{
"mcpServers": {
"ampout": {
"command": "npx",
"args": ["-y", "@ampout/mcp-server@latest"],
"env": { "AMPOUT_API_KEY": "ak_live_..." }
}
}
}

Cursor picks it up on next restart.

ToolPurpose
listCampaignsList your account’s campaigns.
getCampaignStatsFull stats for a campaign (totals, rates, per-batch, recent bounces).
getSendForecastDaily-bucket forecast of scheduled sends.
listSkipsRecently-skipped enrollments (MX-invalid, cross-campaign duplicate, etc.).
listRepliesRecent replies with hours-to-reply.
createCampaignCreate a campaign with sequence + SMTP credential.
importContactsBulk-create contacts (paginated for large lists).
enrollContactsEnroll an import into a campaign.
dispatchBatchDispatch a specific batch of an active campaign.
pauseCampaignPause a campaign.
resumeCampaignResume a paused campaign.

All tools are JSON-typed via Zod schemas. Error responses get formatted as readable error messages so the LLM can recover (retry with corrected input, ask the user, etc.).

Once configured, try:

list my campaigns
how is the OC contractors campaign doing? show me the stats
dispatch batch 14 for the OC campaign
pause the campaign that's bouncing the most
forecast my sends for the next 5 days

The LLM combines tool calls fluidly — e.g., listCampaigns → find the OC one → getCampaignStats(id) → summarize.

Three reasons:

  1. Speed of iteration. Asking “what’s my bounce rate looking like?” in Claude Desktop is faster than logging in, navigating to the right campaign, and reading the dashboard.
  2. Composability. “Pause campaigns with bounce rate over 7%” is one sentence to an LLM but a multi-step manual flow in any dashboard.
  3. No dashboard tax. Dashboards bloat as features grow; MCP tools stay sharp because each one does one thing.

The same API powers direct curl, SDKs, and the MCP server — they’re all clients of the same JSON endpoints.

Open source: github.com/jasoncbuehler/ampout/tree/main/mcp. PRs welcome — additional tools, better LLM-facing output formats, etc.

The server is published in the major MCP directories: