MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

ADK-Rust Enterprise CRM MCP Server — Salesforce, HubSpot, Zoho CRM, Pipedrive with unified contacts, deals, pipelines

Created 5/25/2026
Updated about 18 hours ago
Repository documentation and setup instructions

CRM MCP Server

Crates.io License ADK-Rust Enterprise Registry Ready

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

MCP CRM 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 tracingRUST_LOG env-filter for observability

Contributors

| jkmaina - MCP Crm by zavora-ai
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

Quick Setup
Installation guide for this server

Installation Command (package not published)

git clone https://github.com/zavora-ai/mcp-crm
Manual Installation: Please check the README for detailed setup instructions and any additional dependencies required.

Cursor configuration (mcp.json)

{ "mcpServers": { "zavora-ai-mcp-crm": { "command": "git", "args": [ "clone", "https://github.com/zavora-ai/mcp-crm" ] } } }