outreach-crm-mcp
Imports Crunchbase company exports into the CRM for deduplication, fuzzy company-contact matching, and ranking.
Sends drafted emails through Gmail as a pluggable mail provider and tracks the resulting sends and replies.
Persists the CRM data—contacts, companies, drafts, scores, sends, and replies—in a local SQLite database shared by the web app and MCP server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@outreach-crm-mcpImport the Apollo export and draft personalized emails for the top-ranked contacts."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
outreach-crm-mcp
An outreach CRM that is both a local web application and a Model Context Protocol (MCP) server, so the same contact database can be worked by hand in a browser or driven by an AI assistant through tools.
It ingests contact and company exports (Apollo, Crunchbase, plain CSV/XLSX), fuzzy-matches contacts against company records, ranks them by seniority and fit, drafts personalised emails against a structured event/offer context, scores each draft, and tracks sends and replies through SQLite.
No contact data ships with this repository. See Data and privacy.
Why it is shaped this way
One database, two front ends. The interesting constraint was that outreach is partly judgement and partly bulk work. A web CRM is good for the judgement — reading a company, deciding who to approach. An MCP server is good for the bulk — letting an assistant import a fresh export, re-rank, and draft twenty variants. Both talk to the same SQLite schema, so neither is a second source of truth.
Drafting is separated from scoring, and scoring from sending. templates.ts
produces candidate drafts, email-scoring.ts and critic-validator.ts grade
them independently, and only then does a mail provider get involved. That split
exists because a generator asked to grade its own output will approve it.
Field coverage is tracked explicitly. field-tracker.ts records which
context fields were available for a draft and which were actually used, and
scores coverage. Personalisation that silently falls back to generic copy is the
normal failure of this kind of tool, and it is invisible unless you measure it.
Mail providers are pluggable. mail-provider.ts defines the interface;
Outlook/Graph and Gmail implement it behind provider-registry.ts. Credentials
are encrypted at rest via token-crypto.ts.
Related MCP server: leadforge
Architecture
Apollo / Crunchbase / CSV export
│
▼
import.ts · import_crunchbase.ts normalise, dedupe
│
▼
join.ts fuzzy company↔contact matching
│
▼
rank.ts · title-utils.ts seniority + fit ranking
│
▼
templates.ts ──► email-scoring.ts ──► critic-validator.ts
(3 drafts) (1–10 score) (independent check)
│
▼
provider-registry.ts ──► outlook-provider.ts / gmail-provider.ts
│
▼
tracker.ts · replies.ts · report.ts sends, replies, reporting
│
▼
SQLite (schema.sql) ◄── web-server.ts (browser CRM)
◄── index.ts (MCP server)Quick start
npm install
cp .env.example .env # then fill it in
npm run build
# load the synthetic sample so there is something to look at
npm run import -- samples/contacts.sample.csv
npm run web # browser CRM
npm start # MCP server (stdio)SETUP.md covers configuration in detail; HOW_TO_USE.md covers day-to-day use.
Data and privacy
This repository contains no real contact data. It was extracted from a working system whose database held real people, and none of that — not the exports, not the SQLite file, not the git history containing them — is included here. This is a fresh repository with no prior history.
samples/contacts.sample.csv is entirely invented: ten fabricated people at six
fabricated companies, all on example.com, all with +1-555-01xx numbers. It
exists so the importer and the UI have something to render.
.gitignore blocks *.csv, *.xlsx, *.docx and *.db precisely so a real
export cannot be committed by accident, with a single narrow exception for
samples/. If you point this at a real contact list, that list is personal
data. Handle it accordingly — keep it out of version control, and respect the
applicable rules on contacting people who did not ask to hear from you.
Event context
The drafting layer personalises against a structured "event context" — dates,
venue, themes, attendee types, a default call to action, compliance rules. In
this codebase that context is named for the event it was originally built
around (earthx_context in the schema, earthx_* fields in the draft types).
The shape is general; only the naming is specific. Populate it for your own
event or offer via import_earthx.ts / the import_earthx_context MCP tool,
or the EVENT_* variables in .env.template.
Layout
src/— 42 TypeScript modules: MCP server, web server, import, ranking, drafting, scoring, providers, trackingpublic/— browser CRM front endschema.sql— SQLite schemaazure/— Bicep template and deployment scriptsscripts/— helper scriptssamples/— synthetic sample data
Status
Working, and shaped by real use, but published as a reference implementation rather than a maintained product. Deployment files are included as written; the account-specific values have been replaced with placeholders, so they will need your own.
MIT licensed.
This server cannot be deployed
Maintenance
Related MCP Connectors
Open-source CRM your AI agents can write to: companies, people, deals, tasks, notes, pipeline.
CRM, relationship intelligence, and multi-agent orchestration for AI agents.
Agent-native CRM. 25 tools — contacts, deals, sequences, enrichment waterfall, audit log.
An AI-first personal CRM you run in natural language: contacts, reminders, notes, and more.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates CRM data with AI agents to manage leads, track pipeline statistics, and search price catalogs via Supabase. It enables automated lead creation, stage updates, and history tracking through natural language commands.-
- FlicenseNot gradedqualityCmaintenanceEnables lightweight CRM pipeline management with email sequences, project scanning, and MCP-based interaction for AI agents.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage contacts with full CRUD, dedup, merge, import/export, sync with Google/Apple/CardDAV, and git-backed rollback.4 npmAGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a CRM covering companies, people, leads, deals, and more, with role checks, scoped agent keys, approval gates, and a shared audit trail.AGPL 3.0