Open-source AI SDR: B2B prospecting, email enrichment, buying signals and safe outreach staging.
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:
| 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)
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 →
OPENSDR_READ_ONLY=1) and a per-call credit cap.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 |
Have a provider you need? Open a provider request.
Contributions are welcome, whether you write the code yourself or with an AI coding agent.
CLAUDE.md and GEMINI.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.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y opensdr-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-arif-js-opensdr-mcp": {
"command": "npx",
"args": [
"-y",
"opensdr-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceopensdr-mcpnpmOpenSDR works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.