@imazhar101/mcp-zoominfo-server
v0.1.0
Published
ZoomInfo MCP server — read-only company/contact enrichment, intent, scoops, news and Copilot insights (ZI API, client-credentials)
Maintainers
Readme
ZoomInfo MCP Server
MCP server for the ZoomInfo ZI API (the new developer.zoominfo.com platform) — company/contact
enrichment, search, intent, scoops, news, taxonomy lookups, and Copilot insights.
Read-only. Every tool maps to a read/discovery endpoint; no ZoomInfo records are created or modified.
Authentication
OAuth2 client credentials (server-to-server). The server mints a bearer token from your
DevPortal app's client_id / client_secret, caches it until shortly before expires_in, and
refreshes automatically (and once on a 401).
| Variable | Required | Notes |
| ------------------------ | -------- | ---------------------------------------------------------------- |
| ZOOMINFO_CLIENT_ID | yes* | DevPortal app client id (Okta 0oa…). |
| ZOOMINFO_CLIENT_SECRET | yes* | DevPortal app client secret. |
| ZOOMINFO_ACCESS_TOKEN | no | Pre-minted bearer token — testing only (ZI tokens last ~16 min). |
| ZOOMINFO_BASE_URL | no | Override API base (default https://api.zoominfo.com/gtm). |
* Provide ZOOMINFO_CLIENT_ID + ZOOMINFO_CLIENT_SECRET or ZOOMINFO_ACCESS_TOKEN.
Token endpoint: POST https://api.zoominfo.com/gtm/oauth/v1/token (HTTP Basic, grant_type=client_credentials).
Tools
Connection / usage
| Tool | Description |
| -------------------------- | ----------------------------------------------------------------- |
| zoominfo_test_connection | Mint a token and hit the usage endpoint to verify credentials. |
| zoominfo_get_usage | Current usage/limits (request/record buckets). Free — pre-flight. |
Data — Search (credit-free discovery → returns IDs)
| Tool | Endpoint |
| --------------------------- | --------------------------------------------------------------------------------------- |
| zoominfo_search_companies | POST /data/v1/companies/search |
| zoominfo_search_contacts | POST /data/v1/contacts/search |
| zoominfo_search_intent | POST /data/v1/intent/search (topics required — see zoominfo_lookup intent-topics) |
| zoominfo_search_news | POST /data/v1/news/search |
| zoominfo_search_scoops | POST /data/v1/scoops/search |
Data — Enrich (⚠️ credit-consuming: 1 credit per newly enriched record)
| Tool | Endpoint |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------- |
| zoominfo_enrich_companies | POST /data/v1/companies/enrich |
| zoominfo_enrich_contacts | POST /data/v1/contacts/enrich |
| zoominfo_enrich_company_hierarchy | POST /data/v1/companies/corporate-hierarchy/enrich (pass hierarchy outputFields, e.g. familyTree) |
Data — Lookup (taxonomies, free)
| Tool | Endpoint |
| ----------------- | ------------------------------------------------------------------------------------ |
| zoominfo_lookup | GET /data/v1/lookup/{fieldName} — e.g. industries, job-titles, intent-topics |
Copilot / Context (read)
| Tool | Endpoint |
| ---------------------------------- | ------------------------------------------------------- |
| zoominfo_account_summary | GET /copilot/v1/companies/{companyId}/account-summary |
| zoominfo_account_summary_ask | POST …/account-summary/actions/ask |
| zoominfo_company_insights | POST /copilot/v1/companies/insights |
| zoominfo_company_lookalikes | GET /copilot/v1/companies/lookalikes |
| zoominfo_contact_recommendations | GET /copilot/v1/contacts/recommendations |
Account Summary and Insights require the corresponding Copilot entitlement on the ZoomInfo account; a 400/404 there typically means the account/token isn't provisioned for that surface, not a bad request.
Escape hatch
| Tool | Description |
| ---------------------- | -------------------------------------------------------------------------------------------------- |
| zoominfo_api_request | Call any read endpoint the typed tools don't cover. GET/POST only. Path is relative to /gtm. |
Request conventions (handled for you)
- POST bodies use the JSON:API envelope
{ "data": { "type": "…", "attributes": {…} } }withContent-Type: application/vnd.api+json. - Pagination/sort are query params: pass
page_number,page_size,sortas flat tool args — they're translated topage[number]/page[size]/sort(fully percent-encoded; the ZI gateway 400s on raw brackets). - Search → collect
ids → Enrich by id is the canonical, credit-efficient workflow.
Examples
// Find a company (free) — returns companyId
{ "tool": "zoominfo_search_companies", "arguments": { "companyName": "ZoomInfo", "page_size": 1 } }
// Enrich by id (1 credit unless already under management)
{ "tool": "zoominfo_enrich_companies",
"arguments": { "matchCompanyInput": [{ "companyId": "344589814" }],
"outputFields": ["id", "name", "website", "revenue"] } }
// Intent — topics must be valid (see lookup intent-topics)
{ "tool": "zoominfo_search_intent", "arguments": { "topics": ["Adaptive Learning"], "page_size": 5 } }
// Buyer-intent topics taxonomy
{ "tool": "zoominfo_lookup", "arguments": { "fieldName": "intent-topics" } }Build
cd servers/zoominfo && npx tsc
# → dist/servers/zoominfo/src/index.jsLicense
MIT
