crmbridge-mcp
v1.0.0
Published
Sales pipeline and CRM intelligence MCP server — HubSpot, Pipedrive, Salesforce
Maintainers
Readme
Sales pipeline and CRM intelligence for AI agents. Connect Claude, Cursor, or any MCP-compatible agent to HubSpot, Pipedrive, and Salesforce — read-only, no webhooks, no setup beyond an access token.
Overview
CRMBridge MCP gives AI agents direct read access to your CRM data:
graph LR
A[AI Agent<br/>Claude / Cursor] -->|MCP Tools| B[CRMBridge MCP]
B --> C[HubSpot ✅]
B --> D[Pipedrive ✅]
B --> E[Salesforce ✅]
style A fill:#1e293b,stroke:#3b82f6,color:#fff
style B fill:#1e3a5f,stroke:#3b82f6,color:#fff
style C fill:#1e293b,stroke:#22c55e,color:#fff
style D fill:#1e293b,stroke:#22c55e,color:#fff
style E fill:#1e293b,stroke:#22c55e,color:#fffUse cases: Ask your AI agent to summarize your pipeline, find stale deals, identify top customers by lifecycle stage, or search contacts by company — all without leaving your coding environment.
Quick Start
npx (no install required)
npx crmbridge-mcpClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"crmbridge": {
"command": "npx",
"args": ["-y", "crmbridge-mcp"],
"env": {
"HUBSPOT_ACCESS_TOKEN": "your-hubspot-private-app-token"
}
}
}
}Config file location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Getting a HubSpot Token
- Go to HubSpot Settings → Integrations → Private Apps
- Create a new private app
- Grant scopes:
crm.objects.contacts.read,crm.objects.deals.read,crm.pipelines.read - Copy the access token
Tools
Phase 1 — Core CRM Access (Free, HubSpot)
| Tool | Description |
|:-----|:-----------|
| list_contacts | Paginated contacts with lifecycle stage, owner, and date filters |
| list_deals | Deals by stage, pipeline, amount range, and close date |
| get_pipeline | Pipeline overview with stages, positions, and weighted values |
| search_contacts | Full-text search by name, email, company, or phone |
Phase 2 — Extended Access (Free)
| Tool | Description |
|:-----|:-----------|
| activity_feed | Recent CRM activities — emails, calls, meetings, notes |
| deal_stage_history | Stage progression with timestamps and duration |
| contact_timeline | Chronological touchpoint history per contact |
Phase 3 — Pro Features (requires PRO_LICENSE)
| Tool | Description |
|:-----|:-----------|
| pipeline_forecast | Weighted forecast with conservative / realistic / optimistic scenarios |
| deal_scoring | Deal health score 0-100 with specific risk factors |
| churn_signals | At-risk customer detection with confidence scores |
| cohort_analysis | Monthly cohorts with retention and LTV metrics |
| crm_hygiene | Data quality report — duplicates, stale deals, missing fields |
| cross_crm_sync | Diff contacts and deals across two CRMs (dry-run, never writes) |
Provider Support
| Provider | Status | Auth | Notes |
|:---------|:-------|:-----|:------|
| HubSpot | ✅ | HUBSPOT_ACCESS_TOKEN | Private app token or OAuth2 |
| Pipedrive | ✅ | PIPEDRIVE_API_TOKEN + PIPEDRIVE_COMPANY_DOMAIN | API key in query string |
| Salesforce | ✅ | SALESFORCE_ACCESS_TOKEN + SALESFORCE_INSTANCE_URL | OAuth2 Bearer token |
Example Usage
List contacts by lifecycle stage
List all HubSpot contacts with lifecycle_stage = "customer"Search for a contact
Search HubSpot for contacts at Acme CorpPipeline overview
Show me the full HubSpot sales pipeline with all stagesFind large deals
List HubSpot deals with amount over $10,000 in the Contract Sent stageEnvironment Variables
| Variable | Required | Description |
|:---------|:---------|:-----------|
| HUBSPOT_ACCESS_TOKEN | For HubSpot | Private app token from HubSpot Settings |
| PIPEDRIVE_API_TOKEN | For Pipedrive | API token from Pipedrive Personal preferences |
| PIPEDRIVE_COMPANY_DOMAIN | For Pipedrive | Your Pipedrive subdomain (e.g. mycompany) |
| SALESFORCE_ACCESS_TOKEN | For Salesforce | OAuth2 access token |
| SALESFORCE_INSTANCE_URL | For Salesforce | Your Salesforce instance URL (e.g. https://myorg.my.salesforce.com) |
| PRO_LICENSE | For Pro tools | License key from craftpipe.dev (format: CPK-...) |
Architecture
CRMBridge uses a provider-based adapter pattern — each CRM has an adapter implementing the shared CrmProvider interface. All operations are read-only; CRMBridge never writes to your CRM.
src/
index.ts — McpServer with 13 tools + Zod schemas
types.ts — Shared types (Contact, Deal, Pipeline, ...)
adapters/
types.ts — CrmProvider interface + query types
hubspot.ts — HubSpot v3 API adapter
pipedrive.ts — Pipedrive v1 API adapter
salesforce.ts — Salesforce REST API v59.0 adapter (SOQL)
tools/
list_contacts.ts — Contacts with filters + audit log
list_deals.ts — Deals with filters + audit log
get_pipeline.ts — Pipeline stages + audit log
search_contacts.ts — Full-text search + audit log
activity_feed.ts — CRM activities with filters
deal_stage_history.ts — Stage changes, duration, skipped stages
contact_timeline.ts — Chronological contact events
lib/
providers.ts — Cached provider factory (hubspot/pipedrive/salesforce)
fetch-retry.ts — Retry on 429/5xx with exponential backoff
audit.ts — SQLite audit log at ~/.crmbridge/audit.db
premium/
gate.ts — requirePro() license gate
pipeline_forecast.ts — 3-scenario weighted forecast
deal_scoring.ts — 0-100 deal health scoring
churn_signals.ts — At-risk customer detection
cohort_analysis.ts — Monthly cohort retention + LTV
crm_hygiene.ts — Data quality issue detection
cross_crm_sync.ts — Dry-run cross-CRM diffAudit log: All tool calls are logged to ~/.crmbridge/audit.db (SQLite, 90-day retention). Sensitive values (tokens, keys) are automatically redacted.
Development
git clone https://github.com/craftpipe/crmbridge-mcp
cd crmbridge-mcp
npm install
npm test # vitest run — 245 tests
npm run build # tsc → dist/
npm run typecheck # tsc --noEmitLicense
MIT — see LICENSE
