abm.dev
The account-based marketing API for AI agents: Search, Enrich, and Create across B2B people and companies.
What it can do
- Create Enrichment: Start an async enrichment of a person or company (type + input). Returns immediately with a job_id; the job runs ~30-60s without blocking — poll get_enrichment for status and get_en
- Get Enrichment: Poll an enrichment job by its sequential id for current status (queued, processing, completed, failed, approved). Returns status ONLY — when status is completed, fetch the enriched VAL
- List Enrichments: List enrichment jobs for the current org, newest first. Filter by status (queued, processing, completed, failed, approved) and page with skip/take (default take 50). Each row is a jo
What data it sees
Do you need an account
No: the server works without sign-in
The account-based marketing API for AI agents: Search, Enrich, and Create across B2B people and companies. Every field cited with a source and confidence score. One key, ten sources, no per-field bills.
How to connect
How to connect abm.dev to Claude
The server address to paste into Claude settings:
https://gtm--abm-dev.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect abm.dev to ChatGPT
The server address to paste into ChatGPT settings:
https://gtm--abm-dev.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect abm.dev to Cursor
The server address to paste into Cursor settings:
https://gtm--abm-dev.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (13)
Raw names from tools/list. Only developers need these.
| create_enrichment | Start an async enrichment of a person or company (type + input). Returns immediately with a job_id; the job runs ~30-60s without blocking — poll get_enrichment for status and get_enrichment_fields / get_enrichment_sources for results. Optionally pass a progressToken in _meta to stream live progress. Sources: LinkedIn, Hunter, Perplexity, Tavily. |
| get_enrichment | Poll an enrichment job by its sequential id for current status (queued, processing, completed, failed, approved). Returns status ONLY — when status is completed, fetch the enriched VALUES with get_enrichment_fields (value, confidence, winning source) and the per-source breakdown with get_enrichment_sources. On failed, check get_enrichment_sources for the per-source error. |
| list_enrichments | List enrichment jobs for the current org, newest first. Filter by status (queued, processing, completed, failed, approved) and page with skip/take (default take 50). Each row is a job summary (id, status, entity_type); fetch full results with get_enrichment then get_enrichment_fields. |
| cancel_enrichment | Cancel an in-flight enrichment job by id. Only queued/processing jobs are stopped; on a completed, failed, or cancelled job it is a harmless no-op. Returns the resulting status. |
| get_enrichment_sources | Get per-source attribution results for an enrichment (which data came from LinkedIn vs Hunter vs Perplexity etc.) |
| get_enrichment_fields | Return the ENRICHED RESULT VALUES for a completed enrichment job: each field with its value, confidence, and the winning source. Call this after get_enrichment reports completed (get_enrichment returns status only, not the values). |
| get_me | Get the calling user identity: Clerk user id, email, name, org membership, roles. |
| get_org | Get the current organisation: id, name, slug, subscription tier, member limits. |
| get_linkedin_status | Get the org's LinkedIn connection status: connected/expired/disconnected, profile name + URL, last verified, cookie expiry. |
| get_linkedin_usage | Get the org's LinkedIn usage metrics: profile views today, recent activity, quota state. |
| list_entities | List + search canonical entities (deduplicated people / companies) in this org. Each row carries identifiers (dedup_key, display_name), entity type, and first/last-seen timestamps. Use search to look someone up by name or identifier. |
| get_entity | Get a single canonical entity by its numeric entity id (from list_entities, NOT a job id): display name, type, identifiers (email, linkedin_url, domain), most recent enrichment summary, merged source data. |
| list_entity_enrichments | List every enrichment run that touched a canonical entity (by entity id from list_entities/get_entity), newest first. Each row is a job summary; fetch full results with get_enrichment then get_enrichment_fields. |