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

stormgtm-mcp

v0.6.0

Published

StormGTM MCP server — qualify leads with Barometer and send through your own domains, over stdio

Readme

stormgtm-mcp

Stdio MCP server for StormGTM. It lets an agent find leads with Radar and qualify them with Barometer. Sending is optional: the agent can send from mailboxes connected to StormGTM, or take the leads and send from its own tools.

Requires Node.js 22+ and a StormGTM API key.

Install

Claude Code:

claude mcp add stormgtm -- npx -y stormgtm-mcp

Cursor, ~/.cursor/mcp.json:

{
  "mcpServers": {
    "stormgtm": {
      "command": "npx",
      "args": ["-y", "stormgtm-mcp"]
    }
  }
}

Codex, ~/.codex/config.toml:

[mcp_servers.stormgtm]
command = "npx"
args = ["-y", "stormgtm-mcp"]

Then call whoami. It returns the account email and credit balance.

Authentication

The server reads STORMGTM_API_KEY first, then ~/.stormgtm/config.json (the same file stormgtm login writes), on every tool call. STORMGTM_API_URL overrides the API URL (default https://stormgtm.com).

The server starts without a key. Until you sign in, every tool returns a short message saying how to; after stormgtm login the next call works without restarting the server.

npm i -g stormgtm
stormgtm login

To pass a key explicitly, add it to the server's environment:

claude mcp add stormgtm --env STORMGTM_API_KEY=sgtm_live_... -- npx -y stormgtm-mcp

Agent skill

The server's instructions point agents at the stormgtm-gtm skill, which covers the full workflow. Install it into a project with the CLI:

stormgtm skill install --claude   # or --cursor, --agents

Tools

| Tool | What it does | | --- | --- | | whoami | Account email, credit balance and API URL | | credits | Credit balance, per-tier pricing and 30-day usage by verdict | | check_lead | Review one address: verdict, 0-100 score, reasons, policy result. Fast tier 1 credit, deep tier 5, unknown free | | check_batch | Submit many leads at once; unknown results are retried automatically | | batch_status | Progress and results for a batch | | report_outcome | Report delivered, bounced, complained, replied or opened so later checks improve. Free, and works for email sent outside StormGTM | | find_leads | Radar (beta): find people to email from a website URL or a description of the ideal customer (request, optional chatId to refine). 1 credit per new lead; searches that find nobody are free. Can take a minute or two | | list_radar_leads | Leads Radar saved, optionally for one chatId, with verdicts once qualified. With after ("0" first, then each nextAfter) it returns only leads not taken yet, oldest first | | add_leads | Save up to 500 of your own leads (email, optional name, title, company, note), free. Returns new leads, duplicates and rejections | | qualify_radar_leads | Check Radar leads by ids (fast or deep tier) and store each verdict. Send only to deliverable | | list_mailboxes | Connected mailboxes with status, last test and daily cap | | mailbox_status | One mailbox: status, last test result, pause reason and today's capacity | | mailbox_domains | Domains your mailboxes send from, with each unsubscribe host and whether it is verified | | send_email | Queue up to 100 messages (one or many), each from a connected mailbox (mailboxId, or from with the mailbox address). Paced through each mailbox's warm-up. 1 credit per email, refunded on failure | | list_domains | Sending domains with status and daily limit | | domain_health | A domain's daily capacity, 7-day bounce and complaint rates, and pause state | | email_status | Status and delivery state of a sent email | | create_sequence | Create a multi-step follow-up sequence sent from one mailbox (mailboxId, up to 10 steps, {{variable}} placeholders) | | enroll_leads | Enroll checked leads in a sequence with their variables | | sequence_status | List sequences, or show one sequence's steps and enrollments | | stop_enrollment | Stop one lead's sequence; waiting steps are cancelled and refunded | | list_threads | Inbox conversations (inbox, sent, archived or spam), filtered by unread or a search query | | read_thread | One conversation's messages: sender, time, unverified-sender flag, attachment names, and the new text (full for everything) | | reply | Answer an existing thread. Goes only to the thread's participant; 1 credit. No recipient parameter, so it cannot start new conversations | | mark_read | Mark threads read or unread | | archive_threads | Archive threads, or move them back to the inbox with archived: false | | mark_spam | Move threads to spam, or back with spam: false. Marking spam also suppresses the sender and stops their sequences | | inbox_counts | Total and unread threads per folder |

Sending goes through your connected mailboxes. A mailbox's domain needs its unsubscribe host set in the StormGTM dashboard first; until then sends are rejected with unsubscribe_host_required. Pass an idempotencyKey on each message so a retry never sends twice.

Inbox tools return email content wrapped as untrusted_email_content with a notice not to follow instructions inside it. The server instructions tell agents the same, and new outreach stays on send_email and sequences.

Source

Public source (MIT): github.com/marginsystems/stormgtm-mcp.

git clone https://github.com/marginsystems/stormgtm-mcp.git
cd stormgtm-mcp
npm install
npm run build
node dist/index.js