@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.jsonbeside 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.jsonDays 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 onceregister 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 inspirationsData 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.
