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

@sprid/scout

v0.1.0

Published

Local MCP server that researches a niche over your own Chrome: the accounts winning it, and the ads running in it.

Readme

@sprid/scout

A local MCP server that researches the accounts already winning in your niche by driving your own Chrome. It finds accounts posting photo slideshows about your keywords, measures each one, and files what it learns into a library on your machine.

Nothing leaves this computer unless you ask for it. There is no account and no server behind it; the Sprid plugin's scout skill teaches your agent how to use it well.

What it does

  • Discovery: searches for accounts posting slideshows about your keywords, then visits each candidate profile and measures it. Accounts that clear your filters are the answer; the ones that miss are kept too, with the margin by which they missed.
  • Analysis: reads one named account in depth and reports what it is doing.
  • Evidence: pulls slideshows to disk with a metadata.json beside each one, so a format can be taken apart.
  • A local library: everything discovery passes is filed and answers instantly from then on, with no second browser run.

The ads lane

The same niche, read from the other side: start_ad_harvest collects the ads currently running in a country from Meta's public Ad Library, which covers Facebook and Instagram. One source shows what people choose to watch, the other shows what somebody is paying to put in front of them.

It needs no login and uses a throwaway browser rather than your signed-in research profile. From a terminal instead of an agent:

npm run ads -- harvest --country US --q "budget app" --brand "Acme"
npm run ads -- push --account yourapp --file out/us-2026-01-31.json

Days live is the only performance signal the Ad Library exposes outside EU political ads. There is no spend, no impressions, no click-through rate. An ad running 200 days means somebody keeps paying for it, which is survival rather than efficiency - so nothing found here is "best-performing", however tempting the phrase.

What comes down is evidence, not material

The numbers are facts about the world and yours to reason from. The posts belong to the people who made them, and they come down so you can study the structure - the order of the cards, where the hook sits, what the last one does - and rebuild it in your own words and images. Not to repost, and not to place in a draft.

How it works

Plain Playwright launches your real Google Chrome, not a bundled Chromium, headless off, with a dedicated profile. You log in once in that window.

Pages are loaded and scrolled the way a person would. The data comes from the JSON the pages fetch for themselves, read off the wire, plus the server-rendered blob stashed by an init script before hydration removes it. No private API is called directly, and there is no bot-detection evasion in this package - it reads pages you could open yourself, signed in as you.

Runs are asynchronous: a tool returns a job_id immediately and await_job blocks server-side for up to an hour, sending progress notifications on a heartbeat so a long run survives inside one agent turn. When a verification appears, the job parks, Chrome is brought to the front, and your agent asks you to solve it and resume.

Install

npm install -g @sprid/scout
sprid-scout                  # or: npm run start, from a checkout
npm run register             # registers the stdio MCP server with Claude Code
npm run login                # opens Chrome; log in once

register runs claude mcp add --transport stdio --scope user scout -- <node> <path>/src/server.js. If the claude CLI is not on PATH it prints the command to run by hand. The skill lives in the Sprid plugin, so nothing is copied into a skills directory from here.

Start a new session afterwards and ask for something research-shaped.

Layout

src/config.js      paths, Chrome discovery, the name constant
src/chrome.js      launch, profile, page leases, challenge detection, login
src/tiktok.js      endpoint parsers, metrics, verdicts, marks
src/discover.js    phase 1 search, phase 2 measure, the round loop
src/analyze.js     one account, in depth
src/download.js    slideshows to disk
src/jobs.js        the async job registry and the wait protocol
src/store.js       the local library
src/server.js      the MCP surface
src/register.js    registers the server with your agent
src/push-to-sprid.js  optional: send a pull into Sprid as inspirations

Data lives in ~/.scout/: chrome-profile/, runs/, downloads/, and library.json. A library written under the tool's previous name is read where it already is rather than moved.

Sending findings to Sprid

Optional, and it needs a Sprid personal access token:

SPRID_PAT=sprd_... npm run push -- <account-slug> ~/.scout/downloads/<job-id>

They land in the inspiration library as reference for analysis - what the format was and how it performed - which is what lets Sprid cluster them into formats with evidence behind them.