Why it matters
Most outbound work doesn't happen in one app. You're in Slack reading a thread, in HubSpot looking at a deal, in Linear writing a ticket about a launch, and somewhere in there you decide a lead is worth reaching out to. Switching to Twain to actually do the outreach is friction. Often enough, the lead never makes it.
The Twain MCP server removes the switch. Wire Twain into Claude, ChatGPT, Claude Code, Cursor, or anything else that speaks the Model Context Protocol, and the assistant in front of you can talk to Twain directly. List your campaigns, generate a sequence for a lead, add someone to a campaign's automation, all from the chat you're already in.
The result is straightforward. Outreach happens on the same surface where the decision happens, instead of two tools later when the moment is gone.
What you can do
The MCP exposes the building blocks of a Twain workspace. Every tool maps to something you can already do in the UI.
- Browse the workspace.
list_workspaces,list_agents,list_campaigns,list_workflows. All read-only, no credits spent. - Inspect a setup.
get_campaignreturns a campaign'sgeneration_costsby mode and names the campaign's automation when it has one, whileget_workflowreturns an automation's fixedcredits_per_contact. The assistant reads those fields before quoting a generation or automation run. - Generate for a single lead.
generate_contacttakes a LinkedIn URL, a work email, or a company domain with the person's name, runs the research, drafts the sequence, and stores the lead on the campaign. High and Ultra return a Thesis; Ultra also returns a Strategy. A longer run returns a job ID, so the assistant follows it withget_generation_statusinstead of starting the same generation again.list_generation_jobsfinds jobs from a batch or an interrupted call. - Read results back.
get_contactreturns a stored contact's messages and analysis;list_contactslists a campaign's contacts and whether each has generated. - Bulk add leads.
add_contacts_to_campaignimports contacts for free without generating outreach. Open the returned campaign in Twain to generate the batch, review the copy, edit it, and export it. - Push into an automation.
add_contact_to_workflowqueues the lead through a campaign automation's steps (research, copy, notify) without you opening the app. - Create from scratch.
create_workspaceadds a private or team workspace to put a new setup in.create_agentbuilds a Twain agent from a company URL plus an ICP description.create_campaignstands up a new campaign attached to that agent, from a campaign brief: the context, goal and step-by-step sequence every message in the campaign gets written against. Its first generation initializes the campaign's messaging; review and edit that messaging in Twain afterwards. - Check credits.
get_creditsreturns the current credit balance so the assistant can warn you before generating. - Send feedback.
give_feedbackpasses bug reports, missing capabilities, and rough edges straight to the Twain team, right from the chat.
Read-only tools never cost credits. Before generate_contact, the assistant quotes the selected mode from the campaign's generation_costs. Before add_contact_to_workflow, it quotes the workflow's credits_per_contact. The first confirmed mode and spend become session preferences, so the assistant reuses them unless the price rises, it cannot determine the price, a new batch materially increases the total, or you ask to confirm every time. After a generation, credits_used is the amount actually charged.
Connect Claude
Claude connects through a custom connector, and one connector covers claude.ai in the browser, Claude Desktop, and the mobile apps. No terminal, no config files.
Open Settings, pick Connectors, and click Add custom connector. Paste the server URL:
https://mcp.api.twain.ai/
Click Add, then sign in through the OAuth prompt with the same account you use for Twain. Enable the connector in any chat from the + menu.
Connectors are account-level: the same setup follows you everywhere you use Claude, and it also shows up in Claude Code automatically when you're signed in with the same account. On Team and Enterprise plans, only owners can add custom connectors, from Organization settings.
Connect Claude Code
Claude Code (the CLI / VS Code integration) supports HTTP MCP servers natively. One command:
claude mcp add --transport http twain https://mcp.api.twain.ai/
Claude Code flags the server as needing sign-in. Run /mcp, select twain, and choose Authenticate; a browser opens for OAuth. Sign in with the same account you use for Twain. After that, the token is cached and refreshed automatically, and the assistant can call Twain tools directly.
Verify the server is connected:
claude mcp list
You should see twain in the list. The tools (list_campaigns, generate_contact, etc.) become available immediately.
Connect ChatGPT
On ChatGPT web, custom MCP apps sit behind Developer mode and OAuth sign-in, and availability depends on your workspace plan. Enable Developer mode in your settings, create an app with the server URL, and sign in through the OAuth prompt:
https://mcp.api.twain.ai/
Connect Codex
In the ChatGPT desktop app, open Settings, select MCP servers, and click Add server. Name it twain, choose Streamable HTTP as the transport, and paste the same URL:
https://mcp.api.twain.ai/
Save the server and restart when prompted. The server list flags Twain as requiring sign-in; click Authenticate and complete the OAuth flow in the browser. The Codex CLI and IDE extension share this configuration, so the tools follow you across all three. Note that servers added this way run inside Codex sessions.
Connect Cursor
Cursor speaks HTTP MCP directly, like Claude Code. Open ~/.cursor/mcp.json (create it if missing) and add:
{
"mcpServers": {
"twain": {
"url": "https://mcp.api.twain.ai/"
}
}
}
Reload Cursor. The Twain tools show up alongside the rest of your MCP servers, and the OAuth handshake runs the first time you trigger one.
Other MCP clients
Any client that speaks streamable HTTP can connect. Clients with OAuth discovery need only the URL; Gemini CLI, for example, connects with gemini mcp add --transport http twain https://mcp.api.twain.ai/ and re-authenticates with /mcp auth twain. For clients that authenticate with an API key instead, add a config entry that sends the key in the X-Api-Key header:
{
"mcpServers": {
"twain": {
"url": "https://mcp.api.twain.ai/",
"headers": {
"X-Api-Key": "your-twain-api-key"
}
}
}
}
Your API key is in the app, under API key in the user menu.
Example prompts
Once the server is connected, you don't think about MCP. You just talk to the assistant.
For complete flows, cost checks, and recovery prompts, use the Twain MCP prompt playbook.
A few prompts that work well out of the box:
- "List my Twain campaigns and tell me which one is for outbound to founders." The assistant calls
list_campaigns, reads the descriptions, picks the closest match. - "Generate a sequence for
https://www.linkedin.com/in/samplein the Founders campaign." The assistant confirms the credit cost, runsgenerate_contact, and returns the campaign URL when it's done. - "Add these 30 LinkedIn URLs to the Q2 SDR automation." The assistant queues them through
add_contact_to_workflowone at a time. - "How many credits do I have left?" One
get_creditscall. - "Spin up a new campaign for infosec leadership from my security agent." The assistant calls
list_agents, asks you the handful of questions a brief needs — why these accounts now, what you want them to do, which channels, how many steps — then callscreate_campaignand reports back with the campaign URL.
MCP fits work that starts in a conversation. When the trigger is an event instead, use an n8n workflow: qualify and route a new signup or prepare a rep when a demo is booked.
The campaigns, agents, and credits are the same ones you use in the web app. Open the returned campaign link in Twain to review and edit the final copy and export it.