Announcing CIMD support for MCP Client registration
Learn more

Should you use Amplemarket MCP or Amplemarket API for building AI Agents?

TL;DR

  • Amplemarket MCP and the Amplemarket REST API cover different surfaces, and the gap runs in both directions. The MCP server authors sequences, reads Unibox, inspects workflows, and answers analytics questions. The REST API does batch enrichment, bulk email validation, call logging, mailbox management, and webhooks. Neither is a superset.
  • Amplemarket MCP is OAuth 2.0 only, per user, at https://mcp.amplemarket.com/mcp. There is no API key option. The REST API is the opposite: a bearer API key that authenticates a workspace, not a person.
  • That asymmetry is the real decision. On the MCP path every call carries the individual rep's permissions. On the API path one key can read every rep's tasks, mailboxes, and sequences, and you pass user_id yourself to narrow it.
  • Rate budgets differ by an order of magnitude in opposite directions. MCP allows 100 requests per minute per user. The REST API allows 500 requests per minute per consumer, with tighter per-endpoint caps such as 30 per minute on sequence lead enrollment.
  • Scalekit's Amplemarket connector exposes 47 tools over a per-user connected account, and a Virtual MCP server lets you scope that surface down to the handful of tools a given agent role needs. The MCP vs API decision stops changing your credential infrastructure.

Your agent needs to work with Amplemarket. It has to search the prospect database, enrich leads before a meeting, enroll people into sequences, and check what a rep has due today. Amplemarket ships both a hosted MCP server and a REST API that has been in production for years. They are not two views of the same thing. They expose different actions, authenticate on opposite models, and one of those differences is a hard constraint for multi-tenant agents. Here is how to pick.

What Amplemarket MCP and the Amplemarket API actually are

Two objects, two auth models, two different generations of the product surface. The REST API was built for integrations. The MCP server was built for AI clients, and it shows in what each one exposes.

Amplemarket MCP

Amplemarket MCP is a remote, Amplemarket-hosted server reachable at https://mcp.amplemarket.com/mcp. Amplemarket runs it, versions it, and adds tools on its own cadence. At the time of writing the published catalog is 54 tools across 13 groups: Searcher, Enrichment, Contacts, Accounts, Exclusion List, Lead Lists, Sequences, Workflows, Analytics, Duo, Unibox, Personas, and Tasks.

Authentication is OAuth 2.0 and nothing else. A browser opens, the user signs in to Amplemarket, and approves read and write access. Each user authenticates individually, and the server resolves data against that person's own Amplemarket permissions. Adding it to Claude as a custom connector requires a Pro, Max, Team, or Enterprise plan, because it is not in the Claude connector directory yet. Full details live in Amplemarket's MCP server documentation.

The Amplemarket REST API

The REST API is a JSON API at https://api.amplemarket.com, organized into roughly a dozen resource groups: searcher, people and companies enrichment, lead lists, sequences, contacts, accounts, calls, tasks, mailboxes, email validations, exclusion lists, job openings, and users. It also ships webhooks for replies, sequence stages, and workflow JSON pushes, which the MCP server has no equivalent for.

Auth is a bearer API key generated from Settings > API in the Amplemarket dashboard and passed in the Authorization header. Keys are named, but nothing in the documentation scopes a key to a single user. The reference is at docs.amplemarket.com.

Comparing them where it matters for agents

Four dimensions decide this for an agent: what actions exist, what auth model you inherit, what you operate in production, and what each path costs you in rate budget and credits.

What your agent can actually do

The overlap is smaller than you would expect, and the gap is bidirectional. Search and single-record enrichment are near-parity. Everything else splits.

Capability
Amplemarket MCP
Amplemarket REST API
People and company search
Yes
Yes
Single-record person and company enrichment
Yes
Yes
Batch enrichment, up to 10,000 records per request
No
Yes
Bulk email validation
No
Yes
Sequence authoring: create, append stages, edit copy, launch
Yes
No
Enroll leads into an existing sequence
Yes
Yes
Lead list column and cell edits
Yes
No
Call logging and recording retrieval
No
Yes
Mailbox listing and daily send-limit changes
No
Yes
Unibox inbox and outbox reads
Yes
No
Workflow inspection and AI draft generation
Yes
No
Natural-language analytics questions
Yes
No

Two more asymmetries do not fit the table. Exclusion lists are read-only on MCP, which offers check_excluded_emails and check_excluded_domains; the REST API creates and deletes entries. And webhooks exist only on the API side, so an agent that needs to react to a prospect reply has no MCP path to subscribe.

Where the MCP server goes further than the API

Sequence authoring is the headline. The REST API's sequences surface is two endpoints: list sequences, and add leads to one. It cannot create a sequence, append a stage, or edit step copy.

The MCP server can do all three, plus update_sequence_status to launch a draft. If your agent's job is "draft a three-step multichannel sequence and enroll these twelve leads with per-lead personalization," that workflow does not exist on the REST API. Same for ask_analytics, the Unibox reads, persona lookups, saved searches, and the Duo tools.

Where the API goes further than the MCP server

Volume and telephony. The API's batch endpoints take up to 10,000 leads or companies per enrichment request with a 15,000 per hour ceiling, and up to 100,000 emails per validation request. The MCP server's enrichment tools are single-record and synchronous.

Call logging is API-only: POST /calls, disposition lookups, and recording retrieval. So is mailbox management, including changing a mailbox's daily send limit. If you are building a dialer integration, a deliverability watchdog, or a nightly enrichment pipeline, the MCP catalog does not contain the primitives.

The auth path each one puts you on

MCP uses OAuth 2.0 Authorization Code with a browser consent step, per user, every time a new user connects. There is no API key fallback documented. Amplemarket's own guidance frames connection through MCP clients, which means if you are building a backend agent you own the OAuth client registration and refresh handling yourself, and that path is not documented.

The REST API inverts every one of those properties. One bearer key, no interactive step, works from a cron job on day one. That convenience is also the problem.

The workspace key problem

An Amplemarket API key authenticates a workspace, not a person. The account_info endpoint returns the workspace the key belongs to. The users endpoint lists everyone in it. The tasks endpoint requires you to pass user_id explicitly, which is the tell: the credential itself carries no user identity, so you supply it as a parameter.

For a single-tenant internal tool, fine. For a B2B agent, it is the whole ballgame.

What that costs you at forty reps

Serving forty reps across eight customer workspaces on the API path means every call from every rep's agent session runs under the same credential, and your audit trail in Amplemarket cannot distinguish them. Filtering by user_id is application logic, not enforcement. A prompt injection or a logic bug reaches the whole workspace.

The MCP path gives you the opposite guarantee at the cost of the interactive flow: what the rep cannot do, the agent cannot do. That property is worth more in a multi-tenant agent than the convenience of a static key.

Recommended reading: Access Control for Multi-Tenant AI Agents

What you own in production

On the MCP path Amplemarket owns hosting, scaling, and the tool schemas. You own the OAuth grant per user per workspace, token storage, refresh, and revocation when a rep leaves. You also absorb schema drift: Amplemarket adds tools on its own schedule, and the knowledge base explicitly tells clients to refresh their tool list when new tools do not appear.

On the API path you own more. Endpoint adapters for every resource group you touch, polling loops for the async batch endpoints, webhook receivers with signature verification, and retry logic against per-endpoint rate limits that differ by an order of magnitude.

Rate limits: a shared pool against a per-user pool

The REST API allows 500 requests per minute per consumer by default, with tighter per-endpoint caps: 300 per minute on /people/search, 350 on /people/find, 30 on /sequences/{id}/leads, and 50 per hour on /calls/{id}/recording. The MCP server allows 100 requests per minute per user.

Those numbers are not comparable directly, and that matters. The API budget is shared across your whole workspace, so fifteen concurrent agent sessions contend for one pool. The MCP budget scales with your seat count. For a fleet of per-rep agents, the MCP model is the one that holds up.

Credits run on a separate meter

The MCP enrich_person tool consumes 0.5 credits per enrichment with a 24-hour result cache, and revealing an email or phone number costs extra on top. The API's enrichment and validation endpoints draw from the same pool and return an insufficient_credits error when it runs dry.

Budget for credits separately from rate limits. Hitting either one stalls the agent, but in different ways and at different times.

When to use MCP, when to use the API

Both are correct for different agent shapes. The split follows almost exactly the interactive versus batch line, with one exception worth knowing.

Use Amplemarket MCP when

  • Your agent composes or edits outreach: drafting a multichannel sequence, rewriting a subject line on a draft stage, or launching a sequence after human review. The REST API has no authoring surface at all.
  • Reps interact with the agent directly and you want Amplemarket's own permission model to constrain it, so that a rep's agent cannot read another rep's Unibox or Duo queue.
  • The agent needs conversational context: inbox threads, outbox status, account notes, or a natural-language analytics question like reply rate by sequence over the last 60 days.
  • You want the per-user rate budget rather than a shared workspace pool, because your agent count scales with your seat count.

Use the Amplemarket REST API when

  • You are enriching or validating in volume. Ten thousand leads per enrichment batch and a hundred thousand emails per validation batch are not reachable one record at a time.
  • Your agent runs headless on a schedule with no user session to attach to, such as a nightly lead list refresh or an overnight list enrichment job.
  • The workflow touches calls or mailboxes: logging a dial with a disposition, pulling a recording for transcription, or dropping a mailbox's daily send limit when deliverability slips.
  • You need to react to events. Reply and sequence-stage webhooks are the only push mechanism Amplemarket offers, and they are API-side only.

Most production agents use both

A sales agent that preps a rep before a call is an MCP agent. The pipeline that enriches tomorrow's list at 2am and logs yesterday's dials is an API job. Splitting them is the normal answer, not a compromise.

What that split does not change is the credential layer. You now have two credential types across two paths, and both need the same vault, the same rotation, and the same revocation story. Understanding credential ownership across agent tool-calling patterns becomes critical once you operate both paths in parallel.

Building Amplemarket agents with Scalekit

Scalekit's Amplemarket connector wraps the REST API as 47 named tools behind a per-user connected account, authenticated with a bearer token. The connector marketing page is at scalekit.com/connectors/amplemarket.

The credential is held in Scalekit's vault and injected at call time, so it never reaches your agent runtime, your logs, or the model context. Below, a Python agent using Anthropic's SDK, then a TypeScript agent using Mastra over a Virtual MCP server.

Connect the rep's Amplemarket account

Install the SDK and initialize the client. Your .env needs SCALEKIT_ENVIRONMENT_URL, SCALEKIT_CLIENT_ID, and SCALEKIT_CLIENT_SECRET from Developers > API Credentials in the Scalekit dashboard.

pip install scalekit-sdk-python anthropic
import os import scalekit.client import anthropic from google.protobuf.json_format import MessageToDict scalekit_client = scalekit.client.ScalekitClient( client_id=os.getenv("SCALEKIT_CLIENT_ID"), client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"), env_url=os.getenv("SCALEKIT_ENV_URL"), ) actions = scalekit_client.actions client = anthropic.Anthropic()

Each rep authorizes once. The connection_name string must match the connection name configured in your Scalekit dashboard exactly; a mismatch here is the single most common integration error.

IDENTIFIER = "rep_014" response = actions.get_or_create_connected_account( connection_name="amplemarket", identifier=IDENTIFIER, ) if response.connected_account.status != "ACTIVE": link = actions.get_authorization_link( connection_name="amplemarket", identifier=IDENTIFIER, ) print("Connect Amplemarket:", link.link)

Retrieve the tools authorized for this connected account

The agent is not loading a flat connector catalog. It loads the tools this rep's connected account is authorized to call, which is what separates a per-user agent from a shared-credential one. Pass page_size above the default so none of the 47 tools are silently dropped.

scoped_response, _ = actions.tools.list_scoped_tools( identifier=IDENTIFIER, filter={"connection_names": ["amplemarket"]}, page_size=100, ) llm_tools = [ { "name": MessageToDict(t.tool).get("definition", {}).get("name"), "description": MessageToDict(t.tool).get("definition", {}).get("description", ""), "input_schema": MessageToDict(t.tool).get("definition", {}).get("input_schema", {}), } for t in scoped_response.tools ]

The tools most outbound agents reach for first:

Tool
What it does
amplemarket_people_search
Search the prospect database across 46 person and company filters
amplemarket_person_find
Synchronously enrich one person by email, LinkedIn URL, or name plus company
amplemarket_lead_list_create
Create a lead list from up to 10,000 leads, with optional enrich and validate
amplemarket_sequence_add_leads
Enroll leads into an existing sequence
amplemarket_tasks_list
List a rep's due tasks, filtered by type, status, or sequence

Run the agent loop

execute_tool resolves the connected account for this identifier, injects the credential, calls Amplemarket, and returns the result. The full loop, including the stop_reason check and the message append:

messages = [{ "role": "user", "content": ( "Find VPs of Sales at B2B SaaS companies in Europe with 51-200 employees " "that raised a Series A in the last 12 months. Create a lead list called " "'EMEA Series A VPs', then tell me how many leads it contains." ), }] while True: response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, tools=llm_tools, messages=messages, ) if response.stop_reason == "end_turn": print(response.content[0].text) break tool_results = [] for block in response.content: if block.type == "tool_use": result = actions.execute_tool( tool_name=block.name, identifier=IDENTIFIER, tool_input=block.input, ) tool_results.append({ "type": "tool_result", "tool_use_id": block.id, "content": str(result.data), }) messages.append({"role": "assistant", "content": response.content}) messages.append({"role": "user", "content": tool_results})

TypeScript: a Mastra agent over a Virtual MCP server

Handing a Mastra agent all 47 Amplemarket tools costs roughly 9,000 tokens of context before it does any work, and grants it write access to sequences and exclusion lists it has no business touching. A Virtual MCP server fixes both. Define the server once per agent role, listing only the tools that role needs.

from scalekit.actions.models.mcp_config import McpConfigConnectionToolMapping vmcp_response = scalekit_client.actions.mcp.create_config( name="outbound-research-agent", connection_tool_mappings=[ McpConfigConnectionToolMapping( connection_name="amplemarket", tools=[ "amplemarket_people_search", "amplemarket_companies_search", "amplemarket_person_find", "amplemarket_lead_list_create", ], ), ], ) config_id = vmcp_response.config.id mcp_server_url = vmcp_response.config.mcp_server_url

At runtime, generate the per-user URL on your backend and hand it to the Mastra app for that user only. Never share one URL across users; each is pre-authenticated for a single identity.

inst_response = scalekit_client.actions.mcp.ensure_instance( config_name="outbound-research-agent", user_identifier="rep_014", ) mcp_url = inst_response.instance.url

Mastra's MCP client discovers the four tools and their schemas directly, so there is no Zod conversion to write.

npm install @scalekit-sdk/node @mastra/core @mastra/mcp @ai-sdk/openai
import { Agent } from '@mastra/core/agent'; import { MCPClient } from '@mastra/mcp'; import { openai } from '@ai-sdk/openai'; // Fetched from your backend for the authenticated user, not a process-wide secret const mcpUrl = await getAmplemarketMcpUrlForUser(currentUserId); const mcp = new MCPClient({ servers: { scalekit: { url: new URL(mcpUrl) }, }, }); const tools = await mcp.getTools(); const agent = new Agent({ name: 'outbound_research_agent', instructions: 'You research prospects in Amplemarket. Search, enrich, and build lead lists. ' + 'Never enroll anyone into a sequence.', model: openai('gpt-4o'), tools, }); const result = await agent.generate( 'Build a list of Heads of RevOps at Series B fintech companies in the US.', ); console.log(result.text); await mcp.disconnect();

Why the Scalekit path holds up for multi-tenant outbound agents

Three properties matter once you move past one workspace and one agent. None of them are about Amplemarket specifically, which is exactly the point.

Virtual MCP servers keep the tool surface small and the identity correct

The research agent above sees four tools. A sequence-authoring agent gets a different server with a different four. An enrichment pipeline gets a third. One server definition per agent role serves every user, and each run receives a short-lived session token bound to that specific user's connected accounts. The default session token expiry is about one hour, and you remint it by calling create_session_token again.

This is the direct answer to the workspace key problem. The Amplemarket credential is still a workspace bearer token underneath, but the agent never holds it, and the tool surface it can reach is declared by you rather than by whatever the connector happens to expose.

Downstream tool-calling logs give you attribution the API cannot

A shared Amplemarket key produces one audit identity in Amplemarket for every action your agents take. Scalekit captures each execute_tool call as a structured event with the authorizing user, the agent, the tool, and the response, and streams it to Datadog, Splunk, or any SIEM without instrumentation on your side. Errors are classified by source, so you know whether your agent failed or Amplemarket did.

That distinction stops being academic the first time a customer asks which rep's agent enrolled a lead in the wrong sequence.

Recommended reading: Agent Tool Observability: Your Agent Is Running. Is It Actually Working?

One credential model across the rest of the GTM stack

An outbound agent is rarely Amplemarket-only. It reads the CRM, checks the calendar, and posts to Slack. Scalekit's connectors for Salesforce, HubSpot, Gmail, and Slack use the same connected account model and the same execute_tool call, and a single Virtual MCP server can span all of them.

If you want a working shape to start from, the outbound prospecting agent and sales call prep agent templates are the closest fits, and the full GTM and RevOps template library covers the adjacent patterns. AgentKit pricing starts at 5,000 tool calls free with audit logs included.

The credential problem that exists on both paths

Neither path ships credential infrastructure. Both hand you a secret and leave the lifecycle to you.

What each path hands you

MCP gives you an OAuth grant per user: a token that expires, a refresh token that can be revoked from the Amplemarket side, and a browser flow you have to orchestrate and re-orchestrate when a grant dies. The REST API gives you a static workspace key with no expiry and no user identity, which is less to manage and far more to lose.

What you still have to build

For a B2B agent serving forty reps across eight customer workspaces, the MCP path means forty OAuth grants to store encrypted, refresh proactively, and revoke on offboarding. The API path means eight workspace keys, no rotation mechanism in the product, and no way to prove in an audit which rep's agent made a given call. Getting token refresh right for AI agents at this scale is non-trivial regardless of which path you pick.

The token type differs. The infrastructure required does not: an encrypted store, per-tenant isolation, proactive refresh, event-driven revocation, and a log that records who authorized what. Scalekit's Amplemarket connector handles the authorization flow, per-tenant token storage, injection at call time, and revocation for both paths, so choosing MCP or the API stops being a credential architecture decision.

Which one to build against

If your agent writes outreach, reads a rep's inbox, or answers questions about their pipeline in conversation, build against Amplemarket MCP. The per-user permission model and the per-user rate budget are both working in your favor, and the sequence authoring tools do not exist anywhere else.

If your agent enriches in bulk, validates emails, logs calls, manages mailboxes, or needs to react to a reply webhook, build against the REST API. Those primitives are API-only and will stay that way for as long as the MCP catalog stays focused on conversational workflows.

Plan for both, and solve the credential layer first

Most teams shipping serious Amplemarket agents will run both, and that is when the workspace key stops being an implementation detail and starts being the thing a security questionnaire fails on. Solve the credential layer first, and the path choice becomes what it should be: a question about capability coverage, not architecture. The tool-calling auth production patterns that trip teams up are the same regardless of which Amplemarket surface you choose.

Talk to other Amplemarket agent builders

Browse the Scalekit Amplemarket connector and the full connector catalog.

Building an outbound agent on Amplemarket and want to compare notes on the auth model? Join the Scalekit Slack community, or talk to an engineer if you need an answer today.

No items found.
Agent
Auth Quickstart
On this page
Share this article
Agent
Auth Quickstart

Acquire enterprise customers with
‍zero upfront cost.

Every feature unlocked. No hidden fees.