---
name: campaignstack
description: Operate CampaignStack, a signal-based outreach platform, through its hosted MCP server. Use this skill when the user wants to catch buying signals, score leads against an ICP, run signal-triggered outreach workflows, review pending messages, manage conversations, schedule LinkedIn content, or check campaign metrics in CampaignStack.
---

# CampaignStack

CampaignStack is a signal-based outreach platform for lead generation agencies, founders, and consultants. Instead of working cold lists top to bottom, it watches leads for buying signals (job changes, funding rounds, post engagement, new connections), scores every lead against an Ideal Customer Profile (ICP), and reaches out when the score and the moment justify the touch. Leads below the ICP threshold are never contacted.

When a signal fires, CampaignStack runs the whole play, not just the first message: signal-triggered workflows across LinkedIn and email, AI-crafted messages in the user's voice, human review gates, reply routing in a unified inbox, and automatic meeting booking when a lead shares a scheduling link. Per-account safety budgets pace every send. The platform is built to send fewer, better-timed messages, not more.

CampaignStack is MCP-first. Its entire platform is exposed through a hosted Model Context Protocol server with 200+ tools across 30 domains. There is no separate REST API to learn: connect once and every capability is discoverable through the MCP tool list.

- Web app: https://campaignstack.io
- Documentation: https://docs.campaignstack.io
- Full machine-readable docs: https://docs.campaignstack.io/llms-full.txt

## Connect to the MCP server

Endpoint: `https://mcp.campaignstack.io/mcp` (Streamable HTTP). Health check: `https://mcp.campaignstack.io/health` (no auth).

1. Get an API key: in the CampaignStack app, go to **Settings > API Keys** and create a user key (`csu_` prefix, the usual choice — it works across all your workspaces). Workspace-bound keys (`cs_` prefix) are created under **Workspace Settings > API Keys**. Select scopes at creation; the plaintext key is shown only once.
2. Add the server to your MCP client:

```json
{
  "mcpServers": {
    "campaignstack": {
      "url": "https://mcp.campaignstack.io/mcp",
      "headers": {
        "Authorization": "Bearer csu_your_api_key_here"
      }
    }
  }
}
```

For Claude Code: `claude mcp add campaignstack --transport http https://mcp.campaignstack.io/mcp --header "Authorization: Bearer csu_your_api_key_here"`

3. Verify the connection by calling `campaignstack_whoami`. It requires no scope and returns your scopes plus, for a user key, the list of workspaces you belong to (with IDs and roles). Call it first in any session.

Workspace targeting differs by key type: with a user key (`csu_`), workspace-scoped tools require an explicit `workspaceId` argument — get it from `campaignstack_whoami`. With a workspace key (`cs_`), the workspace is implicit; the key is hard-bound to it.

## Core concepts

- **Workspace** — the tenant boundary. Campaigns, workflows, and settings live inside a workspace.
- **Campaign** — an outreach initiative with a goal, personas, ICPs, and phases.
- **ICP** — Ideal Customer Profile. Leads are scored against ICPs; the score determines campaign membership. Below-threshold leads are invisible to the campaign and never contacted.
- **Signals** — detected buying moments on leads and companies (job change, funding round, post engagement, new connection). Signals boost lead scores and can trigger outreach directly via signal agents. This is the platform's core timing mechanism.
- **Lead** — a person, enriched with LinkedIn/company data and scored per campaign. Leads are organized into lead lists.
- **Workflow** — a graph of automation nodes (connection request, message, wait, split test, notify) that leads flow through. LinkedIn sends can be gated behind human review, and split branches self-optimize toward what converts.
- **Playbook** — workspace-level conversation guidance that AI message crafting follows.

## Common workflows

**Check state of play**: `campaignstack_whoami` → `campaignstack_list_campaigns` → `campaignstack_get_campaign_metrics` for the campaign the user cares about.

**Source and score leads**: `campaignstack_search_leads` or `campaignstack_import_leads_csv` → `campaignstack_add_leads_to_list` → `campaignstack_trigger_icp_scoring` → `campaignstack_get_icp_scores`. Use `campaignstack_diagnose_lead_sourcing` when a campaign has too few leads.

**Catch buying signals**: `campaignstack_create_signal_agent` watches for a signal type and routes matching leads into outreach automatically. Inspect what fired with `campaignstack_list_lead_signals` and `campaignstack_list_company_signals`; check agent performance with `campaignstack_get_signal_agent_stats`. `campaignstack_create_competitor_watch` surfaces leads engaging with competitor posts.

**Run outreach**: `campaignstack_queue_leads` onto a workflow → leads advance automatically. Review-gated sends appear in `campaignstack_list_pending_reviews`; approve with `campaignstack_approve_review`, edit first with `campaignstack_edit_and_approve_review`, or reject with `campaignstack_reject_review`.

**Craft messages**: `campaignstack_craft_message`, `campaignstack_craft_note` (connection notes), `campaignstack_craft_followup`, `campaignstack_craft_comment`. These use the workspace playbook and brand voice; prefer them over writing outreach copy yourself.

**Manage the inbox**: `campaignstack_list_inbox_conversations` → `campaignstack_get_conversation` → `campaignstack_send_message`. Check `campaignstack_get_inbox_unread_count` for a quick pulse.

**Publish content**: `campaignstack_create_content_post` → `campaignstack_schedule_content_post` → `campaignstack_get_content_analytics`.

## Rules and behavior

- Always call `campaignstack_whoami` before other tools to resolve the workspace and confirm scopes.
- All tool responses are structured JSON. Error messages include a `code` and usually suggest the next tool to call.
- Scopes follow `{domain}:{action}` (for example `campaigns:read`, `leads:write`). A missing-scope error means the API key needs that scope added in Settings > API Keys.
- CampaignStack enforces per-account daily safety budgets on LinkedIn and email actions. If a send is deferred, that is the safety system pacing outreach to protect the account. Do not try to bypass it; report the budget state to the user instead.
- Destructive tools (delete campaign, remove member) are annotated as destructive. Confirm with the user before calling them.

## Tool reference

The full tool reference with input schemas lives at https://docs.campaignstack.io/mcp/tools/campaigns/ (one page per domain) and in a single file at https://docs.campaignstack.io/llms-full.txt. Setup guides: [Claude Desktop](https://docs.campaignstack.io/guides/claude-desktop/), [Cursor](https://docs.campaignstack.io/guides/cursor/), [API keys](https://docs.campaignstack.io/guides/api-keys/), [building a campaign over the API](https://docs.campaignstack.io/guides/build-campaign-api/).
