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

consulti-mcp

v2.4.1

Published

Consulti.ai MCP server — 10 stable tools for email verification (incl. catch-all mailbox resolution), B2B lead search/enrichment, LinkedIn-URL enrichment, Instagram profile search, list management, and credit-balance checks. Stable surface only; beta endp

Readme

Consulti MCP Server

npm version license

MCP server for the Consulti lead intelligence API — 10 stable tools to search 500M+ B2B leads, search Instagram profiles, verify emails (including catch-all mailbox resolution), enrich leads by email or LinkedIn URL, manage saved lists, and check credit balance.

Stable surface only. Beta endpoints (name-domain lookup, local-business search, creator search) are intentionally NOT exposed via MCP — their schemas may change. To use them, call the REST API directly: https://www.consulti.ai/api-docs

Installation

npx consulti-mcp

Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "consulti": {
      "command": "npx",
      "args": ["-y", "consulti-mcp"],
      "env": {
        "CONSULTI_API_KEY": "your-api-key-here"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "consulti": {
      "command": "npx",
      "args": ["-y", "consulti-mcp"],
      "env": {
        "CONSULTI_API_KEY": "your-api-key-here"
      }
    }
  }
}

Tools

verify_email

Verify if an email address is valid and deliverable.

Cost: 1 verification credit per call.

| Input | Type | Description | | ------- | ------ | --------------------------- | | email | string | The email address to verify |

Example:

{ "email": "[email protected]" }

verify_catchall

Resolve whether a specific mailbox on a catch-all domain actually exists — the ESP-engine probe that plain SMTP (verify_email) cannot do. Use it on addresses verify_email returns with is_catch_all: true.

Cost: 5 verification credits per call (charged on success, including cache hits; refunded on a 500). Requires a plan with catch-all verification enabled (Pro or higher).

| Input | Type | Description | | ------- | ------ | ------------------------------------------------- | | email | string | The email address on a catch-all domain to resolve |

Example:

{ "email": "[email protected]" }

Response shape:

{
  "success": true,
  "data": {
    "email": "[email protected]",
    "status": "good",
    "is_catch_all": true,
    "catch_all_verification": { "score": 95, "status": "Deliverable", "provider": "consulti" },
    "credits_used": 5,
    "cached": false
  }
}

enrich_lead

Enrich a lead's full profile using their email address.

Cost: 1 lead credit — only deducted on a successful match; 404 responses are free.

| Input | Type | Description | | ------- | ------ | --------------------------------------- | | email | string | The email address of the lead to enrich |

Example:

{ "email": "[email protected]" }

enrich_linkedin

Enrich a person by their LinkedIn profile URL → a verified work email plus their US mobile phone (free add-on). Cache-first: served instantly when we already hold a verified email for that profile, otherwise enriched live and cached.

Cost: 1 lead credit — charged only when an email is returned; phone-only or no-match responses are free.

| Input | Type | Description | | -------------- | ------ | ------------------------------------------------------ | | linkedin_url | string | The LinkedIn profile URL, e.g. https://linkedin.com/in/johndoe |

Example:

{ "linkedin_url": "https://linkedin.com/in/johndoe" }

search_b2b_leads

Search a database of 500M+ B2B leads with filters like job title, industry, location, and company size. All inputs are optional. Results are always restricted to leads carrying our verified email label — there is no option to include unverified leads.

Cost: 1 lead credit per result returned. Credits are reserved up to size then refunded down to the actual row count; 0 results = 0 credits. Call get_credits first before using large size values.

| Input | Type | Description | | ---------------- | -------- | ------------------------------------------------------------------ | | q | string | Free text search across name, title, company, and industry | | titles | string[] | Job titles to filter by (e.g. ["CEO", "VP Marketing"]) | | industries | string[] | Industries to filter by (e.g. ["Technology", "Finance"]) | | technologies | string[] | Website tech, exact Wappalyzer-style names (e.g. ["Shopify"]); OR-matched. Canonical list: GET /api/v1/meta/technologies | | excludeTechnologies | string[] | Website tech to EXCLUDE (same names). A lead is dropped if its company uses ANY listed tech; leads with no technology data are kept | | countries | string[] | Countries to filter by (e.g. ["United States"]) | | states | string[] | States/regions to filter by (e.g. ["California"]) | | cities | string[] | Cities to filter by (e.g. ["San Francisco"]) | | company | string | Company name to search for | | empMin | number | Minimum employee count | | empMax | number | Maximum employee count | | excludeListId | string | UUID of a saved list owned by the API key holder — leads in this list will be excluded from results. Canonical singular field name; exclude_list_id and other variants return HTTP 400. | | page | number | Page number (default: 1) | | size | number | Results per page (default: 25, max: 100) |

Strict validation: unknown fields in the request body return HTTP 400 with the offending field name. Send only the inputs documented above.

Response shape: the response includes both total (size of the addressable set before excludeListId is applied) and total_after_exclusion (size after). When excludeListId is omitted, both values are equal. Clients can sanity-check exclusion by asserting total_after_exclusion < total whenever a non-empty list is supplied.

Example:

{
  "titles": ["CEO", "CTO"],
  "industries": ["Technology"],
  "countries": ["United States"],
  "empMin": 50,
  "empMax": 500,
  "excludeListId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "size": 25
}

get_lists

Get all saved lead lists for the authenticated user, with member counts. No inputs required.

Example:

{}

create_list

Create a new saved lead list.

| Input | Type | Description | | ------------- | ------ | ---------------------------------- | | name | string | Required. Name of the list | | description | string | Optional description of the list |

Example:

{ "name": "Tech CEOs", "description": "CEOs at tech companies with 50-500 employees" }

add_leads_to_list

Add leads to a saved list by email addresses (B2B leads) or business IDs (local leads).

| Input | Type | Description | | ------------- | -------- | -------------------------------------- | | listId | string | Required. UUID of the target list | | emails | string[] | Email addresses of B2B leads to add | | businessIds | number[] | Business IDs of local leads to add |

Example:

{
  "listId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "emails": ["[email protected]", "[email protected]"]
}

get_credits

Check the authenticated user's current lead and verification credit balance. Free — no credits deducted. Use before bulk operations to avoid running out mid-task. No inputs required.

Example:

{}

Response shape:

{
  "success": true,
  "data": {
    "lead_credits": 1500,
    "verification_credits": 5000
  }
}

Get your API key

Sign up at www.consulti.ai and generate an API key under Settings → Integrations → API Keys.

Environment variables

| Variable | Required | Default | Description | | ------------------ | -------- | ----------------------------------- | --------------------------------------------------------------------------------- | | CONSULTI_API_KEY | Yes | — | Your Consulti API key (starts with capi_). | | MCP_BASE_URL | No | https://www.consulti.ai/api/v1 | Override the API base URL. Only set this for staging / local dev — never in prod. |

The server enforces a 30-second timeout on every API request; timed-out calls return a structured {"error": "Request timed out after 30s"} so MCP clients can parse and retry.

Versioning

Print the installed version:

npx -y consulti-mcp --version
# → 2.3.0

Releases are published to npm via GitHub Actions trusted publishing on tags matching mcp-v* — each release carries an npm provenance attestation.