npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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)

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": {…} } } with Content-Type: application/vnd.api+json.
  • Pagination/sort are query params: pass page_number, page_size, sort as flat tool args — they're translated to page[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.js

License

MIT