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

deep-research-mcp

v1.0.0

Published

B2B web research agent — give it a company and a question, get a specific answer. MCP tool for Claude Code.

Readme

deep-research

Give it a company and a question. Get a specific answer.

Costs ~$0.0003–$0.0005 per run. No browser automation — plain HTTP fetch only.

Use in Claude Code (agents dialog)

One command — no cloning, no setup:

claude mcp add deep-research -e OPENROUTER_API_KEY=sk-or-... -- npx deep-research-mcp

Get an OpenRouter key at openrouter.ai (free to sign up, ~$0.0003/run).

For multi-domain search, add your Serper key too:

claude mcp add deep-research -e OPENROUTER_API_KEY=sk-or-... -e SERPER_API_KEY=... -- npx deep-research-mcp

Then in any Claude Code session just ask naturally:

"Research what equipment hatchstamping.com operates"

Claude calls the research tool automatically and returns the answer.


Use in Clay

  1. Deploy to Railway (see below) — takes 3 minutes
  2. In Clay, add an HTTP API enrichment column
  3. POST https://your-app.railway.app/research
  4. Body: { "query": "what does {{domain}} sell?", "mode": "single" }
  5. Map answer and prospectFit.score to columns

Deploy to Railway

  1. Fork this repo on GitHub
  2. Go to railway.app → New Project → Deploy from GitHub repo → select your fork
  3. Add env vars: OPENROUTER_API_KEY (required), SERPER_API_KEY (optional)
  4. Deploy — Railway auto-detects Node and runs npm start, gives you a public URL

Quick start

git clone https://github.com/yourusername/deep-research
cd deep-research
npm install
cp .env.example .env
# add your OPENROUTER_API_KEY to .env
npm start
curl -X POST http://localhost:3000/research \
  -H "Content-Type: application/json" \
  -d '{"query": "what equipment does hatchstamping.com operate at their facilities?"}'
{
  "answer": "Hatch Stamping operates stamping presses, robotic welding cells, progressive die tooling, 3D printing, laser scanning, and CMMs across their facilities.",
  "prospectFit": {
    "score": "high",
    "reason": "Manufacturer that designs and maintains its own heavy equipment."
  },
  "sources": ["https://hatchstamping.com", "https://hatchstamping.com/capabilities"],
  "costUSD": 0.000398,
  "model": "google/gemini-2.0-flash-lite-001",
  "mode": "single"
}

Two modes

Single search (default)

Crawls the company's own website using a ReAct loop. Include a domain in your query — no startUrl needed.

{
  "query": "what equipment does hatchstamping.com operate?",
  "mode": "single"
}

Multi search

Searches across the web via Serper.dev. Better for companies with thin websites or when you need LinkedIn/news/third-party coverage. Requires SERPER_API_KEY.

{
  "query": "what equipment does Hatch Stamping operate?",
  "mode": "multi"
}

API

POST /research

| Field | Type | Required | Description | |-------|------|----------|-------------| | query | string | yes | Your research question. Include the company domain for single mode. | | mode | string | no | single (default) or multi | | model | string | no | OpenRouter model ID (default: google/gemini-2.0-flash-lite-001) | | startUrl | string | no | Override the URL for single mode instead of extracting from query |

Response

| Field | Description | |-------|-------------| | answer | Specific answer with names, numbers, dates | | prospectFit.score | high / medium / low / wrong_target | | prospectFit.reason | One sentence about the company | | prospectFit.angle | Best approach if fit is not high | | sources | Pages visited (single) or search results fetched (multi) | | steps | Each navigation step with findings and specificity rating (single only) | | costUSD | LLM cost only. Add $0.001 per run for Serper if using multi. | | mode | single or multi |

Environment variables

| Variable | Required | Description | |----------|----------|-------------| | OPENROUTER_API_KEY | yes | Get one at openrouter.ai | | SERPER_API_KEY | only for multi | Get one at serper.dev |

Models

Any model on OpenRouter. Recommended:

| Model | Cost/run | Notes | |-------|----------|-------| | google/gemini-2.0-flash-lite-001 | ~$0.0003 | Default. Best cost/quality. | | google/gemini-2.5-flash-lite | ~$0.0004 | Slightly better reasoning | | qwen/qwen3-4b:free | $0 | Free but rate limited |

How it works

Single mode — ReAct loop:

  1. Fetches homepage, extracts internal nav links
  2. Step 0 builds company context (industry, type, vocabulary)
  3. Each step: reads current page → rates specificity → picks next path or declares done
  4. Information density filtering removes marketing fluff before the LLM sees anything
  5. Two-stage synthesis: compress findings → generate final answer + fit score

Multi mode — Web search:

  1. Fires one Serper search with your query
  2. Fetches top 3 result pages
  3. Runs the same density filter + synthesis

See docs/cost-reduction.md for how cost dropped from $0.11 → $0.0003.

Limitations

  • JS-rendered sites — SPAs that return no nav links will get weak answers in single mode. Use multi mode for these.
  • Single mode is domain-scoped — only crawls the company's own website.
  • Public pages only — no login support.

License

Apache 2.0