Sales MCP Server
Enterprise sales MCP server with 29 tools across 4 backends — PandaDoc, Apollo.io, Calendly, and Stripe Billing. Proposals with lifecycle management, CPQ (configure-price-quote), sales sequences, meeting scheduling, and revenue forecasting.
Architecture
Key Principles
- Full sales lifecycle — draft → sent → viewed → signed → won with tracking at every stage
- Modular backends — each backend is optional; use any combination
- Revenue-focused — proposals, quotes, and forecasting drive pipeline visibility
- Engagement tracking — know when prospects open emails, view proposals, click links
- No credential exposure — API keys stay in env vars
Sales Flow
Prospect → Sequence → Meeting → Quote → Proposal → Signature → Won ✓
(Apollo) (Apollo) (Calendly) (Stripe) (PandaDoc) (PandaDoc)
Tools (29)
Proposal Lifecycle
draft → sent → viewed → waiting_signature → partially_signed → signed → completed
↘ declined / expired / voided
Backends
Installation
cargo install mcp-sales --features all-backends
Feature flags
# Default: PandaDoc + Stripe Billing
cargo install mcp-sales
# All backends
cargo install mcp-sales --features all-backends
# Specific
cargo install mcp-sales --no-default-features --features "pandadoc,calendly"
Configuration
PandaDoc
export PANDADOC_API_KEY="your-api-key"
Apollo.io
export APOLLO_API_KEY="your-api-key"
Calendly
export CALENDLY_TOKEN="your-personal-access-token"
Stripe Billing
export STRIPE_SECRET_KEY="sk_live_xxx"
Client Configuration
{
"mcpServers": {
"sales": {
"command": "mcp-sales",
"args": [],
"env": {
"PANDADOC_API_KEY": "xxx",
"APOLLO_API_KEY": "xxx",
"CALENDLY_TOKEN": "xxx",
"STRIPE_SECRET_KEY": "sk_xxx"
}
}
}
}
Usage Examples
Create and send a proposal
"Create a proposal for Acme Corp's enterprise license"
→ create_proposal(name: "Acme Enterprise License", recipients: [{email: "[email protected]", first_name: "John", role: "signer"}])
"Send it with a personal message"
→ send_proposal(id: "doc-123", message: "Hi John, here's the proposal we discussed")
"Has John viewed it?"
→ get_proposal_views(id: "doc-123")
"Request his signature"
→ request_signature(id: "doc-123")
Build and send a quote
"What products do we have?"
→ list_products()
"Calculate a quote for 10 seats of Pro plan at $99/mo"
→ calculate_quote(line_items: [{description: "Pro Plan", quantity: 10, unit_price: 99, total: 990}], currency: "USD")
"Create a formal quote and send to the customer"
→ create_quote(line_items: [...], customer_email: "[email protected]", valid_days: 30)
Run an outbound sequence
"Show me our active sequences"
→ list_sequences()
"Enroll [email protected] in the Enterprise Outbound sequence"
→ enroll_contact(sequence_id: "seq-456", email: "[email protected]", first_name: "Sarah")
"How's that sequence performing?"
→ get_sequence_stats(id: "seq-456")
Schedule a meeting
"What's my availability next week?"
→ get_availability(date_range_start: "2026-06-01", date_range_end: "2026-06-07")
"Create a booking link for a 30-min demo"
→ create_booking_link(name: "Product Demo", duration_minutes: 30)
Revenue forecasting
"What's our pipeline forecast?"
→ get_pipeline_forecast()
"How are we tracking against quota?"
→ get_quota_progress()
"Show win/loss analysis"
→ get_win_loss_analysis()
Registry Compliance
- HealthCheck — reports which backends are active
- mcp-server.toml — 29 tools with risk classes and credential bindings
- Manifest validation — startup fails fast on invalid manifest
- Structured tracing —
RUST_LOGenv-filter
Contributors
License
Apache-2.0
Part of the ADK-Rust Enterprise MCP server ecosystem.
rmcp and MCP compatibility
This server is built with rmcp 3.1.2 and requires Rust 1.94.1 or newer. The rmcp 3 rollout retains legacy MCP initialization compatibility and targets MCP protocol revisions 2025-11-25 and 2026-07-28.
MCP 2026-07-28 rollout (P4 workflow/business)
This server uses rmcp 3.1.2 and adk-mcp-sdk 0.2 with a minimum supported
Rust version of 1.94.1. It accepts stateless MCP 2026 requests with
per-request protocol, client identity, and capability metadata while retaining
the legacy MCP 2025-11-25 initialize flow for ordinary tools.
- Tasks:
get_pipeline_forecast - MRTR approvals:
send_proposal,delete_proposal,request_signature,create_quote,enroll_contact,send_tracked_email - Discovery and routing: rmcp serves on-demand discovery and validates the
per-request protocol envelope; HTTP deployments can route with
Mcp-MethodandMcp-Name. The packaged binary currently uses stdio. - Caching:
tools/listreturns a publicttlMsof 60,000 for MCP 2026; rmcp omits the cache fields for legacy clients. - Deprecated extensions: this server does not add new Roots, Sampling, or dynamic client-registration dependencies.
Protected tools require MCP_REQUEST_STATE_KEY with at least 32 high-entropy
bytes. All replicas must share that key so sealed approval state can resume on
another instance. Approval state is bound to the client identity, tool, and
arguments and expires after two minutes. Missing identity, invalid state,
rejection, or legacy protocol use fails closed. Task records are process-local
for the current stdio runtime; use a durable task store before deploying the
server behind scale-to-zero HTTP infrastructure.