MCP · Model Context Protocol

The first CRM where the agent isn’t a feature.

Anchorr ships an MCP server with 24 tools and 4 composite resources. Wire it into Claude, Cursor, or any MCP-compatible agent and your sales motion becomes a programmable surface — enrich contacts, run sequences, move deals, qualify replies — with a shared cache, audit log, and scoped API keys per agent.

Connect
URLhttps://mcp.anchorr.app/mcp
AuthAuthorization: Bearer ancr_live_…
ScopesPer-key — issue narrow keys per agent. Mint at /settings → API Keys.
Every tool call is logged to mcp_audit_log with the calling key, parameters, success state, and duration. Every enrichment is logged to enrichment_requests with the per-attempt provider trail and cost in micro-dollars.

Enrichment

Resolve contacts and companies through a provider waterfall — Apollo first, Hunter for email-finder/verifier, AI research as the catch-all. Cache is shared with the web product, so a hit from one runtime warms the other.

enrich_contact
enrichment:write

Resolve a single contact via the waterfall. Provide an email, OR all of (first_name, last_name, domain). Returns the resolved data plus which provider answered, whether it came from cache, per-attempt cost in micro-dollars, and total latency. Optional contact_id additively merges only-empty fields onto that record.

{
  "tool": "enrich_contact",
  "input": { "email": "[email protected]" }
}
→ {
  "data": { "first_name": "Patrick", "last_name": "Collison", "title": "CEO", … },
  "resolved_by": "apollo",
  "served_from": "provider",
  "attempts": [{ "provider": "apollo", "ok": true, "latency_ms": 412, "cost_micros": 50000 }],
  "total_cost_micros": 50000
}
enrich_company
enrichment:write

Resolve a single company via the waterfall. Provide a domain or a name. Hunter has no firmographic product, so the company waterfall is Apollo → AI only. Optional company_id additively merges only-empty fields.

{
  "tool": "enrich_company",
  "input": { "domain": "stripe.com" }
}
→ {
  "data": { "name": "Stripe", "industry": "Financial Services", "size": "8000+", … },
  "resolved_by": "apollo",
  "served_from": "provider"
}
bulk_enrich_contacts
enrichment:write

Enrich up to 200 existing contact IDs in a single call. Concurrency capped at 5 to stay under provider rate limits. Each contact gets the same waterfall + only-empty merge. Returns aggregate counts (resolved / cached / missed / errored), total cost, breakdown by provider, and per-contact outcomes — the workflow Clay charges $349/mo for.

{
  "tool": "bulk_enrich_contacts",
  "input": { "contact_ids": ["a1...", "b2...", "c3..."] }
}
→ {
  "processed": 200, "resolved": 142, "cached": 38, "missed": 18, "errored": 2,
  "by_provider": { "apollo": 96, "hunter": 31, "ai_research": 53 },
  "total_cost_micros": 8245000
}

Contacts & Companies

Standard CRUD plus bulk import and sequence enrollment.

list_contacts
contacts:read

List contacts. Filter by status (lead/prospect/customer/churned) or company_id.

{ "tool": "list_contacts", "input": { "status": "prospect", "limit": 50 } }
get_contact
contacts:read

Get a contact with company and custom_fields.

{ "tool": "get_contact", "input": { "id": "uuid" } }
create_contact
contacts:write

Create a contact. If company_name is given, the company is created or linked automatically.

{ "tool": "create_contact", "input": { "first_name": "Ada", "email": "[email protected]", "company_name": "Analytical Engines" } }
bulk_create_contacts
contacts:write

Bulk-import up to 200 contacts in a single call. Resolves company_name → company_id in batch, dedupes against existing emails, returns per-row errors instead of failing the whole batch.

{ "tool": "bulk_create_contacts", "input": { "contacts": [{ "first_name": "Ada", "email": "[email protected]" }] } }
enroll_contact_in_sequence
sequences:write

Enroll a contact into a sequence. Starts the contact at step 0 with next_action_at = now + 1 minute.

{ "tool": "enroll_contact_in_sequence", "input": { "contact_id": "uuid", "sequence_id": "uuid" } }
list_companies
companies:read

List companies. Filter by industry, size, or query.

{ "tool": "list_companies", "input": { "industry": "SaaS" } }
get_company / create_company / update_company
companies:read / companies:write

Standard company operations.

{ "tool": "create_company", "input": { "name": "Acme", "domain": "acme.com" } }

Deals & Pipeline

Move deals through stages, log strategy notes, close won/lost.

list_deals
deals:read

List deals filtered by pipeline, stage, owner, or status.

{ "tool": "list_deals", "input": { "stage_id": "uuid" } }
get_deal
deals:read

Get a deal with contact, company, stage, and recent activities.

{ "tool": "get_deal", "input": { "id": "uuid" } }
create_deal / update_deal
deals:write

Create or update a deal. update_deal supports next_step (the single concrete action you owe this deal).

{ "tool": "update_deal", "input": { "id": "uuid", "next_step": "Send pricing Tuesday" } }
move_deal_stage
deals:write

Move a deal to a new stage. Resets the staleness clock on the deal.

{ "tool": "move_deal_stage", "input": { "deal_id": "uuid", "stage_id": "uuid" } }
close_deal
deals:write

Mark a deal closed-won or closed-lost. Stamps closed_at and runs deal_won / deal_lost automations.

{ "tool": "close_deal", "input": { "id": "uuid", "won": true } }

Sequences & Templates

Programmatic outbound — design, enroll, and run.

list_sequences / get_sequence
sequences:read

List or get a sequence with its ordered steps.

{ "tool": "get_sequence", "input": { "id": "uuid" } }
create_sequence / update_sequence
sequences:write

Create or update a sequence with email / wait / task steps. Wait steps use wait_days; email steps use subject + body with {{first_name}}, {{company}} placeholders.

{
  "tool": "create_sequence",
  "input": {
    "name": "Outbound — Payments SaaS",
    "steps": [
      { "type": "email", "subject": "Quick question about {{company}}", "body": "Hi {{first_name}}…" },
      { "type": "wait", "wait_days": 3 },
      { "type": "email", "subject": "Re: {{company}}", "body": "Following up…" }
    ]
  }
}
list_templates / create_template / update_template
templates:read / templates:write

Reusable email templates with the same {{placeholder}} system.

{ "tool": "create_template", "input": { "name": "Cold open", "subject": "{{first_name}}", "body": "…" } }

Activities

Read the timeline, log calls, create and complete tasks.

list_activities
activities:read

List activities filtered by type (email, call, note, meeting, task), contact, company, or deal.

{ "tool": "list_activities", "input": { "contact_id": "uuid", "type": "call" } }
log_activity
activities:write

Log a call, note, meeting, or email summary against a contact / company / deal.

{ "tool": "log_activity", "input": { "type": "call", "contact_id": "uuid", "subject": "Discovery", "body": "Budget confirmed" } }
create_task / complete_task
activities:write

Create an open task with due_at, mark it complete when done. Tasks show in the global Tasks queue.

{ "tool": "create_task", "input": { "subject": "Send proposal", "due_at": "2026-04-30T17:00:00Z", "deal_id": "uuid" } }

Agent

The autonomous agent that runs continuous prospecting + reply qualification on top of the CRM.

get_agent_overview
agent:read

Snapshot of agent activity: candidates this week, sending health, replies pending review, last run timestamp.

{ "tool": "get_agent_overview", "input": {} }
get_agent_config / update_agent_config
agent:read / agent:write

Read or update the agent's ICP, prospecting cadence, sequence preferences, and autosend rules.

{ "tool": "update_agent_config", "input": { "icp_keywords": ["payments", "SaaS"], "autosend": true } }
list_candidates / update_candidate_status
agent:read / agent:write

Review prospects the agent surfaced; approve to enroll, reject with a reason that feeds the agent's learnings.

{ "tool": "update_candidate_status", "input": { "id": "uuid", "status": "rejected", "reason": "Not ICP — outside payments" } }

Resources

Composite reads tuned for “prep me for this meeting” / “brief me on this account” style prompts. One resource fetch replaces five or six tool chains.

anchorr://org/overview

Pipeline + contacts + agent + tasks snapshot — one fetch instead of many tool calls.

anchorr://deal/{id}/brief

Deal + contact + company + recent activities + research, prep-for-meeting style.

anchorr://contact/{id}/brief

Contact + company + activities + deals + sequence enrollments + research.

anchorr://company/{id}/brief

Company + contacts + deals + activities + research.

Why this matters

Every CRM was built for humans typing into forms. We built one for agents executing pipeline.

The agent layer is the next computing surface. Salesforce and HubSpot are bolting it on; we built around it. MCP isn’t a side door to Anchorr — it’s a first-class entry point with the same data, the same automations, the same audit trail.

When your Cursor agent enriches a lead, it warms the cache the web product reads from. When your in-house agent enrolls a contact in a sequence, the same sequence engine runs it. One system of action, two surfaces, infinite agents.