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
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.
| The usual way | With OpenSDR |
|---|---|
| Four or five SaaS tools (contact database, email finder, signals, sequencer) plus marked-up credits | Your own API keys, $0 markup. Pay providers directly, only for what you use. |
| Prospect lists and strategy uploaded to someone else's cloud | Local-first. Runs on your machine. No OpenSDR server, no telemetry. |
| "AI SDRs" that send email on their own and burn your domain | Nothing is sent without your approval. Campaigns are created as drafts; you press go. |
| Generic, made-up personalization | Grounded copy. Every first line cites a provider field or a signal URL. |
| Credits wasted on repeat lookups | Credit-aware. Per-call budgets, cost estimates and a 30-day enrichment cache. |
| Hard to try before buying | Zero-key demo mode. Every tool works on fictional data before you add a single key. |
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.
| Prospect | Company | Email (verified) | Signal |
|---|---|---|---|
| Amara Haddad, VP Engineering | Bluepeak | amara.haddad@bluepeak.example | Raised a $25M Series B (source) |
| Sofia Doe, VP Engineering | Ledgerly | sofia.doe@ledgerly.example | Raised a $25M Series B |
| Lena Alvarez, VP Engineering | Wellspring Care | lena.alvarez@wellspringcare.example | Raised a $25M Series B |
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)
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.
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 →
| Area | Tools |
|---|---|
| System | sdr_provider_status |
| Prospect | sdr_lookup_filters · sdr_search_people · sdr_search_companies |
| Enrich | sdr_waterfall_enrich_person · sdr_enrich_company · sdr_verify_email |
| Manage | sdr_save_prospects · sdr_list_prospects · sdr_export_csv · sdr_manage_suppression |
| Signals | sdr_detect_buying_signals · sdr_research_account |
| Engage | sdr_prepare_outreach_brief · sdr_create_campaign · sdr_push_to_campaign · sdr_sync_hubspot |
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 →
- 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 →
| Getting started | Install in Claude Desktop, Claude Code or Cursor; demo mode; troubleshooting |
| Demo walkthrough | A real end-to-end session |
| Configuration | API keys, settings, modes, seller profile, local data |
| Tools reference | All tools, prompts, resources and error codes |
| How it works | Architecture, email waterfall, signals, preview + confirm |
| Safety and privacy | Every guard, what stays local, compliance |
| Provider API notes | How each provider's API is used |
- 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.
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.
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.