{
  "id": "02-woodpecker",
  "slug": "woodpecker",
  "normalized_name": "woodpecker",
  "name": "Woodpecker",
  "vendor_url": "woodpecker.co",
  "category": "engagement-outbound",
  "what_it_does": "Cold email and LinkedIn outreach automation tool with inbox rotation, adaptive sending, and centralized reply management.",
  "ai_features": "Vendor advertises an AI email writer (copy drafting) and AI interest-level detection that auto-sorts replies by engagement - both genuinely AI/LLM-adjacent but modest in scope versus competitors' \"AI agent\" claims. Inbox rotation and adaptive sending are plain automation.",
  "mcp_status": "official",
  "mcp_url": "https://github.com/Woodpeckerco/woodpecker-mcp-server ; https://developers.woodpecker.co/docs/mcp/ (Claude-specific setup at https://developers.woodpecker.co/docs/mcp/connect-claude/)",
  "mcp_auth": "hosted OAuth-style flow (Claude-specific) or self-hosted Docker setup using a Woodpecker API key",
  "api_gate": "paid",
  "revops_role": "Outbound email sequencing/deliverability layer; MCP access is bundled with API/webhook access as one paid add-on.",
  "tier": "RESEARCHED",
  "last_checked": "2026-09-07",
  "sources": "https://woodpecker.co/pricing/, https://developers.woodpecker.co/docs/mcp/, https://github.com/Woodpeckerco/woodpecker-mcp-server",
  "notes": "\"Integrations, API, webhooks, MCP, CLI\" is a single $20/month add-on available on top of any pricing tier - not enterprise-gated. Notable discovery gap: this server did not surface via GitHub/glama.ai search (which returned an unrelated \"Woodpecker CI\" project) - only found by checking the vendor's own site directly. 2026-09-07: GitHub account Woodpeckerco; README: \"The Woodpecker MCP (Model Context Protocol) integration transforms cold email campaign management into a conversational experience... connecting your AI assistant to Woodpecker's automation platform\" - that is woodpecker.co the cold-email vendor, not Woodpecker CI (https://github.com/Woodpeckerco/woodpecker-mcp-server).",
  "mcp_status_bucket": "official",
  "api_gate_bucket": "paid",
  "mcp_urls": [
    "https://github.com/Woodpeckerco/woodpecker-mcp-server",
    "https://developers.woodpecker.co/docs/mcp/",
    "https://developers.woodpecker.co/docs/mcp/connect-claude/"
  ],
  "source_urls": [
    "https://woodpecker.co/pricing/",
    "https://developers.woodpecker.co/docs/mcp/",
    "https://github.com/Woodpeckerco/woodpecker-mcp-server"
  ],
  "source_annotations": [],
  "vendor_domain": "woodpecker.co",
  "display_name": "Woodpecker",
  "docs_url": null,
  "jobs": [
    "run-email-sequence",
    "send-linkedin-message",
    "draft-personalized-outreach"
  ],
  "jobs_tagged_by": "machine-pass",
  "jobs_tagged_on": "2026-08-25",
  "github_url": null,
  "github_stars": null,
  "github_last_commit": null,
  "github_archived": null,
  "github_fetched_on": null,
  "github_candidates": [
    "https://github.com/Woodpeckerco/woodpecker-mcp-server",
    "https://github.com/Woodpeckerco/woodpecker-mcp-server"
  ],
  "docs_digest": null,
  "docs_last_crawled": null,
  "submission": null,
  "mcp_tools": [
    {
      "name": "addEmailStep",
      "description": "Add an email follow-up step to an existing campaign",
      "required_params": [
        "campaignId",
        "parentId",
        "versions",
        "deliveryTimes"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addLinkedinConnectionRequestStep",
      "description": "Add a LinkedIn connection request follow-up step to an existing campaign",
      "required_params": [
        "campaignId",
        "parentId",
        "linkedinAccountId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addLinkedinDirectMessageStep",
      "description": "Add a LinkedIn direct message follow-up step to an existing campaign",
      "required_params": [
        "campaignId",
        "parentId",
        "linkedinAccountId",
        "bodyVersions"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addLinkedinInMailMessageStep",
      "description": "Add a LinkedIn InMail message follow-up step to an existing campaign",
      "required_params": [
        "campaignId",
        "parentId",
        "linkedinAccountId",
        "bodyVersions"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addLinkedinProfileVisitStep",
      "description": "Add a LinkedIn profile visit follow-up step to an existing campaign",
      "required_params": [
        "campaignId",
        "parentId",
        "linkedinAccountId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addProspectsToCampaign",
      "description": "Bulk add prospects with full contact information and custom snippets",
      "required_params": [
        "campaignId",
        "prospectsPayload"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "addProspectsToDatabase",
      "description": "Adds new prospects to your global prospect list without enrolling them in campaigns",
      "required_params": [
        "prospectsPayload"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "buildCampaignUrl",
      "description": "Generate Woodpecker app URL for campaign access",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "createEmailCampaign",
      "description": "Create a Woodpecker email campaign with one email step and minimal configuration",
      "required_params": [
        "timezone",
        "dailyEnroll",
        "emailAccountIds",
        "versions",
        "deliveryTimes"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "createLinkedinConnectionRequestCampaign",
      "description": "Create a Woodpecker LinkedIn campaign with one connection request step",
      "required_params": [
        "timezone",
        "dailyEnroll",
        "linkedinAccountId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "createLinkedinDirectMessageCampaign",
      "description": "Create a Woodpecker LinkedIn campaign with one direct message step",
      "required_params": [
        "timezone",
        "dailyEnroll",
        "linkedinAccountId",
        "bodyVersions"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "createLinkedinInMailMessageCampaign",
      "description": "Create a Woodpecker LinkedIn campaign with one InMail message step",
      "required_params": [
        "timezone",
        "dailyEnroll",
        "linkedinAccountId",
        "bodyVersions"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "createLinkedinProfileVisitCampaign",
      "description": "Create a Woodpecker LinkedIn campaign with one profile visit step",
      "required_params": [
        "timezone",
        "dailyEnroll",
        "linkedinAccountId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "deleteCampaign",
      "description": "Remove campaign entirely",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "deleteCampaignStep",
      "description": "Remove steps from campaigns",
      "required_params": [
        "campaignId",
        "stepId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "deleteProspects",
      "description": "Permanently deletes prospects from your database and/or specific campaigns",
      "required_params": [
        "prospectIds"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "listCampaigns",
      "description": "Retrieve campaigns with optional filtering by operational status",
      "required_params": [
        "pageNumber"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "listLinkedinAccounts",
      "description": "Retrieve available LinkedIn accounts for campaign assignment",
      "required_params": [
        "filter"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "listMailboxes",
      "description": "Retrieve available email accounts for campaign assignment",
      "required_params": [
        "filter"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "listProspectsInCampaign",
      "description": "Paginated retrieval of campaign prospects",
      "required_params": [
        "campaignId",
        "pageNumber"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "listProspectsInDatabase",
      "description": "Lists prospects from your global prospect database (not tied to any specific campaign)",
      "required_params": [
        "pageNumber"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "makeCampaignEditable",
      "description": "Enable campaign modifications",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "pauseCampaign",
      "description": "Pause campaign",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "retrieveCampaignDetails",
      "description": "Get detailed campaign structure including all steps and configurations",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "retrieveCampaignStatistics",
      "description": "Fetch campaign performance metrics and analytics",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "runCampaign",
      "description": "Start campaign execution",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "searchProspects",
      "description": "Searches for prospects matching specific criteria across your entire database",
      "required_params": [
        "pageNumber"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "stopCampaign",
      "description": "Stop campaign",
      "required_params": [
        "campaignId"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "updateCampaignSettings",
      "description": "Modify campaign-wide configuration including naming, email accounts, and limits",
      "required_params": [
        "campaignId",
        "name",
        "emailAccountIds",
        "timezone",
        "dailyEnroll"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "updateCampaignStep",
      "description": "Modify step delivery times and scheduling",
      "required_params": [
        "campaignId",
        "stepId",
        "payload"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    },
    {
      "name": "updateEmailStepVersion",
      "description": "Update email content, subject lines, signatures and tracking settings",
      "required_params": [
        "campaignId",
        "stepId",
        "versionId",
        "subject",
        "message",
        "signature",
        "trackOpens"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "updateLinkedinStepVersion",
      "description": "Update LinkedIn connection request, direct message, or InMail content",
      "required_params": [
        "campaignId",
        "stepId",
        "versionId",
        "message"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "updateProspectsInCampaign",
      "description": "Update existing prospect data (requires explicit user request)",
      "required_params": [
        "campaignId",
        "prospectsPayload"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "write"
    },
    {
      "name": "updateProspectsInDatabase",
      "description": "Updates existing prospects in your global database or adds new ones if they do not exist",
      "required_params": [
        "prospectsPayload"
      ],
      "evidence": "docs",
      "repo_party": null,
      "source_party": "vendor",
      "risk": "read"
    }
  ],
  "mcp_tool_count": 34,
  "mcp_tools_evidence": "docs",
  "mcp_tools_repo": null,
  "mcp_tools_repo_party": null,
  "mcp_catalog_shape": "fixed",
  "mcp_catalog_note": null,
  "mcp_tools_fetched_on": "2026-09-27",
  "cli_status": "official",
  "cli_party": "first",
  "cli_binary": "woodpecker",
  "cli_install": [
    {
      "cmd": "npm install -g @woodpecker.co/cli",
      "manager": "npm",
      "source_url": "https://www.npmjs.com/package/@woodpecker.co/cli",
      "party": "first",
      "fetched_on": "2026-09-27"
    }
  ],
  "cli_login": null,
  "cli_commands_seen": [],
  "cli_docs_url": null,
  "cli_repo": null,
  "cli_packages": [
    {
      "kind": "npm",
      "package": "@woodpecker.co/cli",
      "version": "0.0.1",
      "party": "first",
      "url": "https://www.npmjs.com/package/@woodpecker.co/cli"
    },
    {
      "kind": "npm",
      "package": "@woodpecker-js/cli",
      "version": "0.1.0",
      "party": "third",
      "url": "https://www.npmjs.com/package/@woodpecker-js/cli"
    },
    {
      "kind": "pypi",
      "package": "woodpecker",
      "version": "0.0.1",
      "party": "third",
      "url": "https://pypi.org/project/woodpecker/"
    }
  ],
  "cli_evidence": "npm",
  "cli_checked_on": "2026-09-27",
  "github_org": "Woodpeckerco",
  "github_org_status": "resolved",
  "github_org_url": "https://github.com/Woodpeckerco",
  "github_org_evidence": {
    "rule": "rule 2",
    "url": "https://github.com/Woodpeckerco/woodpecker-mcp-server",
    "matched_domain": "woodpecker.co",
    "via": "website",
    "detail": "account website https://woodpecker.co has the vendor's domain",
    "confidence": "strong",
    "candidates_rejected": []
  },
  "github_org_repos": 1,
  "github_org_repos_mcp": 1,
  "github_org_repos_cli": 0,
  "github_org_latest_activity": "2025-07-29T07:43:03Z",
  "github_org_recent_repos": [
    {
      "name": "woodpecker-mcp-server",
      "url": "https://github.com/Woodpeckerco/woodpecker-mcp-server",
      "kind": "mcp-server",
      "description": "The Woodpecker MCP (Model Context Protocol) integration transforms cold email campaign management into a conversational experience.",
      "stars": 1,
      "pushed_at": "2025-07-29",
      "latest_release": null
    }
  ],
  "github_org_checked_on": "2026-09-08",
  "mcp_endpoint": null,
  "mcp_docs_url": "https://developers.woodpecker.co/docs/mcp/",
  "endpoint_status": "docs-only",
  "endpoint_http_status": 200,
  "endpoint_last_probed": "2026-09-04",
  "endpoint_wall_note": null,
  "canonical": true,
  "canonical_id": "02-woodpecker",
  "also_listed_in": [],
  "source_file": "02-engagement-outbound.md",
  "source_line": 198,
  "file_index": 10,
  "category_num": "02",
  "category_slug": "engagement-outbound",
  "category_label": "Engagement & Outbound",
  "heading": "Woodpecker",
  "missing_schema_fields": [],
  "extra_fields": {},
  "display_rank": 151
}
