Integration
ClaudeClaude

CampaignStack with Claude: the writer and the system that sends

Claude already writes a good LinkedIn message. That is the part people have. What it cannot do from a chat window is hold a LinkedIn session, know that this person replied four days ago, stay under a per-account daily budget, or stop the sequence when someone books. CampaignStack is that system, and it exposes every capability to Claude as an MCP tool. This page is the setup: one key, one config block, one first prompt.

What Claude does on its own

Give Claude a profile, a company page and a reason to write, and it produces a message a human would send. It reads a thread and drafts the reply. It turns a rambling offer into three clean angles. In Claude Code and claude.ai it can call tools, so with a browser tool it can even open LinkedIn. CampaignStack itself drafts lead-facing messages with Claude models, so nothing here argues that another model writes better.

What it cannot do alone

A chat has no memory of last Tuesday's send, no proxy, no cookie that survives the session, no count of how many invitations went out this week and no way to notice that a lead replied while you were asleep. Every one of those is state, and state is what an outreach system is. Claude writing the message is the easy half. The hard half is everything that has to be true before and after the message goes.

Side by side

The same job, with and without the system underneath

Where the work actually lands. Left is Claude in a chat window with the tools it ships with. Right is Claude with the CampaignStack MCP server connected, which is Claude with 300 tools that already know your workspace.

Claude aloneClaude with CampaignStack
Writing the messageExcellent. Paste the profile, get a draft. Paste the thread, get the reply.The same model, now with the lead's stored signals, the workspace playbook and the sender's own voice in the prompt, then a critic pass before a human sees it.
Sending on LinkedInNothing native. A browser tool can click Send, on your IP, with no limit on how often.A persistent browser per account behind its own residential proxy, with per-action daily budgets, a weekly cap paced across the week, and business-hour windows.
Knowing who repliedOnly if you paste the inbox in. Claude has no poller and no memory between sessions.The inbox is polled, a reply cancels the queued touches for that lead, and the thread is handed to a conversation node that keeps listening.
Sourcing and scoringIt can reason about fit from what you paste. It cannot search LinkedIn, enrich a profile or score 4,000 leads against an ICP.Search, post engagement, group members and CSV imports land in one lead bus, get enriched and are scored against every ICP in the workspace.
Stopping at the right timeIt stops when you close the tab. Nothing tells it a meeting was booked.A booked meeting cancels the lead's queued touches workspace-wide; a reply reroutes; a block signal pauses the action family for a day.
Being reviewedYou are the review, one message at a time, in the chat.Every AI draft parks in a review queue with the reason it was flagged, if it was. Approve, edit, reject, and the edits teach the workspace.
Setup

Connect Claude in three steps

The MCP server is hosted, so there is nothing to install on your side. You mint a key, point Claude at the URL, and ask it what it can see. The Claude app, Claude Code and any other MCP client all take the same URL and the same key; pick yours in step 2.

  1. 1

    Mint a user key in CampaignStack

    1. Open the API keys page of your dashboard: campaignstack.io/dashboard/settings/api-keys
    2. Click "Create key" at the top right.
    3. Every scope you hold is already ticked, which is what an agent acting as you needs. Untick anything you want to keep out of Claude's reach, name the key if you like, then click "Create key" in the dialog.
    4. The key starts with csu_ and is shown once. Copy it as is for the Claude app. Below it, the dialog lists ready-to-paste versions for the other clients: the Authorization header value, the Claude Code command and the JSON block, each with its own Copy button.
    The API keys page, with Create key at the top right.
    The API keys page, with Create key at the top right.
    The Create key dialog. All scopes are preselected.
    The Create key dialog. All scopes are preselected.
    The key, shown once, with the ready-to-paste snippets under it.
    The key, shown once, with the ready-to-paste snippets under it.
  2. 2

    Add the server to Claude

    1. In a chat, click the "+" button next to the message box, then "Connectors", then "Add connector", then "Add custom connector".
    2. Name and URL, both below with a Copy button. Click "Continue": Claude probes the server and pre-fills what it detected.
    3. Authentication: choose "None", even though Claude marks "Always required" as detected. The key travels as a request header, not as a sign-in, and the OAuth client section can stay on its default.
    4. Under "Additional request headers", click "Add header", pick x-api-key from the list, paste the key itself as the value (no Bearer, no prefix) and leave Required ticked.
    5. Click "Add". The connector page opens with the tool counts, read-only and write, each with an approval setting. "Needs approval" means Claude asks before every call; loosen the read-only group once you trust it.
    NameCampaignStack
    Remote MCP server URLhttps://mcp.campaignstack.io/mcp
    Headerx-api-key
    Header valuecsu_YOUR_KEYYour real key, exactly as the dashboard shows it. Never share it in a chat you did not start.
    The "+" menu: Connectors, then Add connector, then Add custom connector.
    The "+" menu: Connectors, then Add connector, then Add custom connector.
    Name and URL, then Continue.
    Name and URL, then Continue.
    Authentication set to None. Ignore the detected OAuth option.
    Authentication set to None. Ignore the detected OAuth option.
    One request header: x-api-key with the key as its value, Required ticked.
    One request header: x-api-key with the key as its value, Required ticked.
    Connected: the read-only and write tool groups, each with an approval setting.
    Connected: the read-only and write tool groups, each with an approval setting.

    Request headers are rolling out on claude.ai and may not show in your dialog yet. If the section is missing, use the Claude Code tab or the JSON tab: both carry the key in the config, no dialog needed.

  3. 3

    Ask it what it can do

    Start with the question below. Claude reads the tool list and answers with what it can actually do in your workspace, grouped: campaigns and targeting, leads and enrichment, outreach and workflows, inbox, signals, content and ads, SEO. That answer is the map for everything after.

    What can you do with CampaignStack MCP?
    Claude's answer to the first question: every tool group it can reach through the connector.
    Claude's answer to the first question: every tool group it can reach through the connector.

    Then a real read. Claude calls whoami, lists your workspaces and campaigns, and reads the review queue. From there it can source a list, draft a campaign, approve drafts or explain why a lead is parked. Every write goes through the same budgets and review gates as a click in the UI.

    Call campaignstack_whoami, then list my workspaces and campaigns.
    For the first campaign, show the pending reviews and tell me
    which drafts you would approve and why.
01 · Why the line is where it is

A model is not a system of record

The question people actually ask is why they cannot just do this with Claude directly. The honest answer is that they can do the writing part, and it is the smaller part. Outreach is a set of facts that have to stay true over weeks: who was contacted from which account, what they said back, which invitations are still pending, how many actions went out today, who opted out. A chat window keeps none of that between sessions, and pasting it back in every morning is the job the tool is supposed to remove.

CampaignStack keeps those facts and exposes them as tools. That is the whole design. The model is the same one you already use; what changes is that its tool calls land on a workspace with memory, safety budgets and a review queue, instead of on a browser tab with none of them.

02 · What the key can do

Scopes are the leash

A user key mirrors your own permissions and carries only the scopes you selected. Read scopes let Claude look at campaigns, leads, the inbox and analytics. Write scopes let it create campaigns, queue leads, approve reviews and send. Nothing in a write scope skips the safety layer: a send Claude triggers is gated by the same per-account budget as a send from the UI, and an AI draft it asks for still parks for review if the workflow says so.

Revoke the key from the same settings page and it stops working within seconds. Membership changes take effect the same way, so a key minted while you were in a client's workspace stops seeing that workspace the moment you leave it.

03 · What we run on

CampaignStack drafts with Claude too

The messages CampaignStack writes for leads come from Claude models, with the workspace playbook, the lead's recent activity and the sender's own voice in the prompt, and a critic pass that reads the full brief and objects before a human sees the draft. So the relationship is not a choice between the two. Connecting Claude over MCP puts the model you already talk to in front of the system that already writes with it.

Frequently asked questions

Does this work with claude.ai, or only Claude Code?

Both. Claude Code adds the server with one command. In claude.ai and Claude Desktop, custom connectors accept a remote MCP URL, and the CampaignStack server is remote and hosted, so you add the URL and paste the key. Any other MCP client that speaks streamable HTTP works the same way.

Can Claude send a LinkedIn message without me seeing it?

Only if the workflow it is acting in is set to send automatically, and only inside that account's daily budget. In the default review mode every AI draft parks for a human. Claude can approve a draft from the review queue, which is a deliberate act with a tool name in the audit log, the same as clicking Approve.

Is the model inside CampaignStack the same Claude?

Lead-facing drafts use Claude models, with GPT and DeepSeek models in other roles such as campaign generation and the draft critic. Connecting your own Claude over MCP does not change which model drafts inside the product; it changes who is driving the product.

What does a key cost?

Nothing. Keys are part of the workspace plan. Actions Claude triggers are metered the same way as actions from the UI: enrichment, sends and AI drafts draw on the workspace's monthly credits.

Do I need a website or a campaign before connecting?

No. The browser extension can create an account and a key from LinkedIn alone, and Claude can then fill the workspace through the onboarding tool: offer, personas, first campaign. A workspace with nothing in it is a fine place to start the conversation.

Get started

Start building your stack.

Your LinkedIn accounts will be safer with CampaignStack than doing it by hand. That's not a pitch. It's a measurable claim.