ADK-Rust Enterprise CRM MCP Server — Salesforce, HubSpot, Zoho CRM, Pipedrive with unified contacts, deals, pipelines
CRM MCP Server
Unified CRM MCP server with 28 tools across 4 backends — Salesforce, HubSpot, Zoho CRM, and Pipedrive. Unified contacts, companies, deals, activities, pipelines, and notes with associations, search, and lifecycle management. Single Rust binary with feature-flagged backends and enterprise governance.
Architecture
Key Principles
- Unified schema — agents see consistent types (Contact, Company, Deal, Activity, Pipeline, Note) regardless of backend
- Feature-flagged backends — compile only what you need (
--features salesforce,hubspot) - Full CRM lifecycle — search contacts, manage deals through pipeline stages, log activities, attach notes
- No credential exposure — tokens stay in env vars, never reach LLM context
- Single binary — no Node.js, no Python, no runtime dependencies
Comparison
| Feature | Generic REST | Zapier | mcp-crm | |---------|:---:|:---:|:---:| | Multi-backend (4 CRMs) | ❌ | Partial | ✅ | | Unified schema | ❌ | ❌ | ✅ | | Pipeline stage management | ❌ | ❌ | ✅ | | Contact search | ❌ | ❌ | ✅ | | Activity logging | ❌ | Partial | ✅ | | Risk classification | ❌ | ❌ | ✅ | | Agent-native (MCP) | ❌ | ❌ | ✅ | | Single binary | ❌ | ❌ | ✅ |
Tools (28)
Contacts (6)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_contacts | List contacts with optional limit | Read-only |
| get_contact | Get a contact by ID | Read-only |
| create_contact | Create a new contact | Internal write |
| update_contact | Update an existing contact | Internal write |
| search_contacts | Search by name, email, or query | Read-only |
| delete_contact | Delete a contact by ID | External write |
Companies (5)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_companies | List companies/accounts | Read-only |
| get_company | Get a company by ID | Read-only |
| create_company | Create a new company | Internal write |
| update_company | Update an existing company | Internal write |
| search_companies | Search companies by name or domain | Read-only |
Deals (7)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_deals | List deals/opportunities | Read-only |
| get_deal | Get a deal with stage, value, probability | Read-only |
| create_deal | Create a new deal | Internal write |
| update_deal | Update deal (stage, value, close date) | Internal write |
| move_deal_stage | Move a deal to a different pipeline stage | Internal write |
| search_deals | Search deals by name, stage, or value | Read-only |
| delete_deal | Delete a deal by ID | External write |
Activities (3)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_activities | List activities for a contact or deal | Read-only |
| create_activity | Log a call, email, meeting, task, or note | Internal write |
| update_activity | Update an activity (mark done, change subject) | Internal write |
Pipelines (2)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_pipelines | List sales pipelines and their stages | Read-only |
| get_pipeline_summary | Get deal counts and values per stage | Read-only |
Notes (2)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| list_notes | List notes for a contact, company, or deal | Read-only |
| create_note | Add a note to a record | Internal write |
Associations (3)
| Tool | Purpose | Risk Class |
|------|---------|------------|
| associate_contact_company | Link a contact to a company | Internal write |
| associate_deal_contact | Link a deal to a contact | Internal write |
| list_deal_contacts | List contacts associated with a deal | Read-only |
Backends
| Backend | Protocol | Auth | Default Feature | |---------|----------|------|:---:| | Salesforce | REST v59.0 + SOQL | OAuth2 | ❌ | | HubSpot | CRM API v3 | Private App Token | ✅ | | Zoho CRM | REST API v2 | OAuth2 | ❌ | | Pipedrive | REST API v1 | API Token | ✅ |
Backend Capabilities
| Capability | Salesforce | HubSpot | Zoho CRM | Pipedrive | |-----------|:---:|:---:|:---:|:---:| | Contacts CRUD | ✅ | ✅ | ✅ | ✅ | | Contact search | ✅ (SOQL) | ✅ (native) | ✅ (criteria) | ✅ (term) | | Contact delete | ✅ | ✅ | ✅ | ✅ | | Companies CRUD | ✅ | ✅ | ✅ | ✅ | | Company search | ✅ (SOQL) | ✅ (native) | ✅ (criteria) | ✅ (term) | | Deals CRUD | ✅ | ✅ | ✅ | ✅ | | Deal search | ✅ (SOQL) | ✅ (native) | ✅ (criteria) | ✅ (term) | | Deal delete | ✅ | ✅ | ✅ | ✅ | | Pipeline stages | ✅ | ✅ | ✅ | ✅ (with counts) | | Activities | ✅ (Task) | ✅ (Engagement) | ✅ (Task) | ✅ (Activity) | | Activity update | ✅ | ✅ | ✅ | ✅ | | Notes | ✅ | ✅ | ✅ | ✅ | | Associations | ✅ (ContactRole) | ✅ (v3 assoc) | ✅ (lookup) | ✅ (participants) |
API Mapping
| Entity | Salesforce | HubSpot | Zoho CRM | Pipedrive | |--------|-----------|---------|----------|-----------| | Contact | Contact | contacts | Contacts | persons | | Company | Account | companies | Accounts | organizations | | Deal | Opportunity | deals | Deals | deals | | Activity | Task | tasks/engagements | Tasks | activities | | Note | Note | notes | Notes | notes | | Pipeline | OpportunityStage | pipelines | settings/pipeline | pipelines + stages |
Installation
cargo install mcp-crm --features all-backends
Or build from source:
git clone https://github.com/zavora-ai/mcp-crm
cd mcp-crm
cargo build --release --features all-backends
Feature flags
# Default: HubSpot + Pipedrive (lightest, token-based auth)
cargo install mcp-crm
# All backends
cargo install mcp-crm --features all-backends
# Specific backends
cargo install mcp-crm --no-default-features --features salesforce
cargo install mcp-crm --no-default-features --features "hubspot,zoho-crm"
Configuration
Salesforce
export SALESFORCE_INSTANCE_URL="https://yourorg.my.salesforce.com"
export SALESFORCE_TOKEN="00D..."
HubSpot
export HUBSPOT_TOKEN="pat-na1-xxxxxxxx"
Zoho CRM
export ZOHO_CRM_TOKEN="1000.xxxxxxxx"
Pipedrive
export PIPEDRIVE_TOKEN="xxxxxxxxxxxxxxxx"
Client Configuration
Claude Desktop
{
"mcpServers": {
"crm": {
"command": "mcp-crm",
"args": [],
"env": {
"HUBSPOT_TOKEN": "pat-na1-xxxx"
}
}
}
}
Kiro
Add to .kiro/settings/mcp.json:
{
"mcpServers": {
"crm": {
"command": "mcp-crm",
"args": [],
"env": {
"PIPEDRIVE_TOKEN": "xxxx"
}
}
}
}
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"crm": {
"command": "mcp-crm",
"args": [],
"env": {
"SALESFORCE_INSTANCE_URL": "https://yourorg.my.salesforce.com",
"SALESFORCE_TOKEN": "00D..."
}
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"crm": {
"command": "mcp-crm",
"args": [],
"env": {
"ZOHO_CRM_TOKEN": "1000.xxxx"
}
}
}
}
Usage Examples
Contact management
"List my top 10 contacts"
→ list_contacts(limit: 10)
"Search for contacts at Acme Corp"
→ search_contacts(query: "Acme")
"Create a contact for Sarah Chen at Acme, email sarah@acme.com"
→ create_contact(first_name: "Sarah", last_name: "Chen", email: "sarah@acme.com")
"Link Sarah to the Acme company"
→ associate_contact_company(contact_id: "sarah-id", company_id: "acme-id")
"Delete the test contact"
→ delete_contact(id: "test-id")
Deal pipeline
"Show me all open deals"
→ list_deals(limit: 50)
"Search for deals related to enterprise"
→ search_deals(query: "enterprise")
"Create a $50k deal for the Acme enterprise contract"
→ create_deal(name: "Acme Enterprise", amount: 50000, stage: "Negotiation")
"Link Sarah to the Acme deal"
→ associate_deal_contact(deal_id: "deal-123", contact_id: "sarah-id")
"Who's involved in the Acme deal?"
→ list_deal_contacts(id: "deal-123")
"Move the Acme deal to Closed Won"
→ move_deal_stage(id: "deal-123", stage: "closedwon")
"What does our pipeline look like?"
→ get_pipeline_summary()
Companies
"Search for companies in fintech"
→ search_companies(query: "fintech")
Activity logging
"Log a call with Sarah about the proposal"
→ create_activity(activity_type: "call", subject: "Proposal discussion", contact_id: "sarah-id")
"Mark that task as done"
→ update_activity(id: "activity-id", done: true)
"Show all activities for the Acme deal"
→ list_activities(deal_id: "deal-123")
Notes
"Add a note to the Acme deal: 'Budget approved by CFO'"
→ create_note(content: "Budget approved by CFO", deal_id: "deal-123")
Documentation
| Document | Description | |----------|-------------| | Architecture | System diagram | | mcp-server.toml | ADK-Rust Enterprise registry manifest | | CHANGELOG.md | Version history | | LICENSE | Apache-2.0 license |
Registry Compliance
This server implements the ADK MCP SDK contract:
- HealthCheck — verifies backend connectivity on startup
- mcp-server.toml — manifest with 28 tools, risk classes, and credential bindings
- Manifest validation — startup fails fast on invalid manifest (SDK 0.1.3+)
- Structured tracing —
RUST_LOGenv-filter for observability
Contributors
| 
James Karanja Maina |
|:---:|
License
Apache-2.0 — see LICENSE for details.
Part of the ADK-Rust Enterprise MCP server ecosystem.
Built with ❤️ by Zavora AI