OpenSDR
The open-source AI SDR for Claude and any MCP client.
Find prospects, verify their emails, spot buying signals, draft grounded outreach and stage campaigns, all from a conversation with your AI assistant, using your own API keys.
Quick start · Demo · How it works · Docs · Contributing
What it does
OpenSDR is an MCP server that gives your AI assistant the toolkit of a sales development rep (SDR). You describe who you want to reach; your assistant does the legwork:
- 🔎 Find prospects that match your ideal customer profile (Apollo).
- ✉️ Find and verify work emails with a cost-aware waterfall: Apollo → Hunter → free local checks.
- 📈 Spot buying signals (funding, hiring, leadership changes, launches) with a source link for every one (Tavily or Exa).
- ✍️ Draft grounded outreach: every personalized line cites a real, sourced fact.
- 🚀 Stage campaigns and CRM records in Instantly and HubSpot, only after you approve a preview.
Why it's useful
See it in action
A real session in demo mode (no keys, fictional .example companies):
You: Find VP Engineering leaders at B2B software and fintech companies, get their emails, and check for buying signals.
You: Meridian Pay asked us not to contact them. Push the rest into my Instantly campaign.
Preview (nothing sent yet)
eligible: 4 excluded: 1 (suppressed: Meridian Pay)
confirmation_token: 1045338e… single-use, expires in 15 min
→ Claude shows you the list and waits for your approval before confirming.
Full walkthrough → (find → enrich → signals → draft → stage)
Quick start
Requires Node.js 22.12+.
1. Add OpenSDR to your assistant. Claude Desktop → Settings → Developer → Edit Config:
{
"mcpServers": {
"opensdr": { "command": "npx", "args": ["-y", "opensdr-mcp"] }
}
}
Claude Code: claude mcp add opensdr -- npx -y opensdr-mcp. One-click for Claude Desktop: download opensdr-mcp.mcpb from the latest release and double-click it. Cursor and other clients: see getting started.
2. Try it with no keys. Restart your client and ask: "Find VP Engineering leaders at fintech companies and draft outreach." Or pick the built-in autonomous_sdr_workflow prompt.
3. Add the providers you have. Every key is optional; add them to env:
"env": {
"APOLLO_API_KEY": "…",
"HUNTER_API_KEY": "…",
"TAVILY_API_KEY": "…"
}
Also supported: EXA_API_KEY, INSTANTLY_API_KEY, HUBSPOT_ACCESS_TOKEN. Where to get each key and every setting: configuration.
How it works
You ──▶ AI assistant ──MCP──▶ OpenSDR (on your machine) ──your keys──▶ Apollo · Hunter · Tavily/Exa · Instantly · HubSpot
│
├─ safety gates: preview + confirm · do-not-contact list · read-only switch · credit budget
├─ engine: email waterfall · signal rules · outreach briefs
└─ local store: ~/.opensdr (lists, cache, suppression)
- Find: your ideal customer profile becomes precise search filters. Search never returns emails, so it's cheap.
- Enrich: each person goes through the email waterfall, stopping at the first verified result, within your credit budget. Every result shows a trail of what was tried and what it cost.
- Research: buying signals give a reason to reach out now, each with a source URL.
- Draft: an outreach brief hands your assistant sourced facts, a sequence framework and writing rules. The assistant writes; you approve.
- Stage: campaign creation, lead enrollment and CRM sync each return a preview and a single-use token, and run only after you confirm.
OpenSDR has no AI model of its own: your assistant does the thinking and writing, and OpenSDR handles data, verification and safe execution. More on the architecture, waterfall and signals →
Tools
Plus 3 built-in prompts (autonomous_sdr_workflow, icp_prospecting, cold_outreach_sequence) and 4 resources (opensdr://providers, opensdr://lists, opensdr://lists/{name}, opensdr://profile). Full reference →
Safety and privacy
- Preview + confirm for every external write, and the confirm is rejected if anything you approved changed in between.
- Campaigns are drafts, never activated, and leads only go into draft or paused campaigns.
- Do-not-contact list honored by every push, sync and export, with no override.
- Read-only mode (
OPENSDR_READ_ONLY=1) and a per-call credit cap. - Your keys and data stay on your machine: no OpenSDR server, no telemetry, keys never logged or stored.
- Never automates LinkedIn: it only drafts notes for you to send.
You're responsible for complying with CAN-SPAM, GDPR, CASL and your providers' terms. Safety, privacy and compliance →
Documentation
Roadmap
- More sequencers: Smartlead, Lemlist
- More CRMs: Salesforce, Pipedrive
- Remote transport (Streamable HTTP) for web-based clients
- Ideal-customer fit scoring and reply tracking
Have a provider you need? Open a provider request.
Contributing
Contributions are welcome, whether you write the code yourself or with an AI coding agent.
- Start here: CONTRIBUTING.md covers setup, checks and the PR process.
- Add a provider: data sources, sequencers and CRMs plug in behind small capability interfaces; follow the add-provider guide.
- Using an AI agent? AGENTS.md holds the architecture rules and safety invariants. Codex, Cursor and Copilot read it automatically; Claude Code and Gemini CLI load it through
CLAUDE.mdandGEMINI.md. - Security issues: please report privately, see SECURITY.md.
License
MIT © Arif
OpenSDR is an independent open-source project, not affiliated with or endorsed by Anthropic, Apollo.io, Hunter, Exa, Tavily, Instantly or HubSpot. Product names are trademarks of their respective owners.