Every SDR repeats the same five minutes per lead: open the CRM, read the activity history, skim the company site, draft a personalized opener, pull up calendar slots. That sequence is a tool-using agent loop in disguise. The hard part is wiring the CRM, the inbox, the calendar, and the enrichment fetcher into one loop the model can actually run.
Salesforce’s API model is not HubSpot’s. Gmail’s draft schema is not Outlook’s. Calendar invites have their own RFC. Lead enrichment is six vendors with six pricing models. The minute you try to assemble all this into a single agent loop, you’ve hired a contractor for a quarter.
The teams that ship working SDR copilots short-circuit this: they pick a tool gateway that already speaks every shape, expose those tools through MCP, and spend their actual time on prompt design, deliverability, and the handoff UX. That’s where most of the lift is anyway.
wmcp.sh is that gateway. CRM OpenAPI specs, Google Workspace, public web enrichment — one /api/v1/tools call returns MCP-shaped methods your Claude or GPT loop can invoke. wmcp.sh is not affiliated with Salesforce, HubSpot, or Google.
1. Lead trigger. A new lead lands in your CRM. A webhook drops the lead ID into a queue. Each lead gets its own bounded agent run with a fixed turn budget.
2. Tool gateway (wmcp.sh). The agent materializes tools for your CRM (Salesforce or HubSpot via /integration/openapi), Gmail and Calendar via /integration/google, and a generic webpage fetcher for company-site enrichment.
3. Reasoning loop. The model fetches CRM activity, scrapes the lead’s company page, drafts a personalized email into the rep’s Gmail drafts folder, and proposes two calendar slots from the rep’s freebusy window.
4. Human approval. The rep opens drafts, edits if needed, clicks send, and accepts a proposed slot. The agent never sends or commits to a meeting on its own.
| Capability | Vendor | How wmcp.sh wires it |
|---|---|---|
| Read & update CRM records | Salesforce / HubSpot | ✅ Vendor OpenAPI spec via /integration/openapi |
| Create email drafts | Gmail | ✅ /integration/google — drafts.create scoped only |
| Propose calendar slots | Google Calendar | ✅ /integration/google — freebusy.query + events.insert |
| Enrich a company URL | Any public URL | ✅ Generic /api/v1/tools?url=... extraction |
| Log the loop to CRM | CRM activity API | ✅ Same OpenAPI adapter, scoped to activity.create |
| Approval / audit UI | Your dashboard | ✅ Included on /managed |
Minimal Python sketch using the Anthropic Messages API. The agent receives a lead ID and the rep’s email, and ends by leaving a draft in Gmail plus two proposed calendar slots.
import os, httpx
from anthropic import Anthropic
client = Anthropic()
WMCP = "https://wmcp.sh"
def tools_for(url):
return httpx.get(f"{WMCP}/api/v1/tools", params={"url": url}).json()["tools"]
tools = (
tools_for("https://acme.my.salesforce.com/services/data/v60.0")
+ tools_for("https://gmail.googleapis.com")
+ tools_for("https://www.googleapis.com/calendar/v3")
+ tools_for("about:fetch")
)
lead_id, rep = os.environ["LEAD_ID"], os.environ["REP_EMAIL"]
msg = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=2048,
tools=tools,
messages=[{"role": "user",
"content": f"Lead {lead_id}. Read CRM activity, scrape the company site, draft a "
f"personalized opener into {rep}'s Gmail drafts, and propose two 30-min slots "
"from their next-week freebusy. Never send. Never auto-confirm."}],
)
print(msg.content)
drafts.create only. The rep clicks send.Custom CRM + email + calendar adapter + hosted MCP at mcp.yourbrand.com + verified badge. Starter $499 one-time · Managed Retainer $999/mo · Enterprise $4,999+/mo.