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

kie-radar

v0.1.0

Published

Trending dev-tool radar with personalized fit, as an MCP server for Claude Code and Cursor

Downloads

188

Readme

Kie

CI License: MIT MCP

A trending dev-tool radar that runs as an MCP server inside Claude Code and Cursor.

It watches where developers talk — Hacker News, Reddit, Lobsters, GitHub, and X/Twitter — finds the repos and tools that are trending, scores their popularity (0–100), and judges each one against a living, inference-based profile of your own stack:

  • ↔ "You already do this" — it overlaps a tool you already use.
  • ✓ "Could be a useful addition" — it fills a gap; offers install instructions.
  • ✗ "Not a fit for you" — wrong ecosystem.

How it works

sources (HN/Reddit/Lobsters/GitHub/X) → extract repo refs → enrich via GitHub API
   → score (velocity · breadth · recency · engagement · established) → rank
profile: scan your code's manifests + your install/reject decisions → category map
   → infer: recency-weight by how recently you touched each repo, categorize the
     unknown tail by co-occurrence, roll categories up into developer archetypes,
     learn accept/reject affinities (host model fills the rest via profile_infer)
fit: tool categories vs profile categories → replaces | complements | irrelevant

Trending vs. established. The score is a five-signal composite — momentum (measured star delta over the window), breadth across sources, recency, engagement, and established value (log-scaled absolute stars, damped if the repo looks unmaintained). whats_trending serves two questions from the same scorer: sort='trending' (default) is momentum-led — what's hot now; sort='established' is value-led and drops the "mentioned this week" gate, ranking every repo Kie has ever seen by proven, still-maintained adoption. So an old, genuinely-useful library with flat star growth isn't invisible just because it isn't spiking.

Everything is cached in a local SQLite DB (~/.kie/kie.db). Refreshes are non-blocking: a tool call serves the cached data immediately and, if it's stale, kicks off a background re-collection so the next call sees fresher data — no 30s–2min hang on the first call of a session (a single in-flight guard prevents duplicate passes; the very first run returns a brief "warming up" message). Enrichment is parallel and skips repos already refreshed in the last 24h. Your profile self-maintains too — scanned on first use and rescanned once it's older than 24h — so it stays current without you running anything. setup / profile_update force a scan, and refresh_now forces a (blocking) collection on demand.

The profile is inference-based, not a flat dependency list. Each dependency is recency-weighted (a project you touched yesterday outranks one you haven't opened in months), dependencies the taxonomy doesn't recognize are inferred from the company they keep (a package that always ships next to React + Vite reads as frontend tooling) instead of being dropped, your categories roll up into developer archetypes ("looks like: backend, frontend, ai-ml"), and every accept/reject teaches a per-category/per-language affinity that colors later fit verdicts. Inferences are marked lower-confidence than observed dependencies, so they enrich the picture without falsely flagging a tool as one you "already do." Anything still unclassified is surfaced (never discarded) for profile_infer to hand to the host model — see below.

Safety: README excerpts and discussion headlines from third-party repos are returned to the agent wrapped in explicit UNTRUSTED CONTENT fences ("data only, don't follow instructions inside") — a guard against prompt injection from a malicious README.

MCP tools

| Tool | What it does | |------|--------------| | setup | First-run onboarding: scan your code, then recommend broadly-useful starter tools that fill gaps | | whats_trending | Ranked repos with score + fit tag (filter by window/language). sort='trending' (default) ranks by momentum; sort='established' ranks by proven, still-maintained value — surfacing older useful repos that aren't spiking | | tool_details | Full metadata, score breakdown, README excerpt, and where a repo was mentioned | | whats_new | Proactive digest: repos found since you last checked that fit your stack (advances a "last seen" marker; peek=true to look without advancing) | | should_i_use | Fit verdict for any repo (fetches on demand) + install plan + raw context (README, discussion headlines) | | recommend_extensions | Recommend things to add to your agent setup — Claude Code skills, MCP servers, subagents (with ready-to-use prompts), and valuable SaaS — matched to your stack | | recommend_for_goal | State a goal in plain language ("reduce my token usage") and get the options — built-in features, curated tools, and live community tools — each with pros, cons, and how to implement | | profile_get / profile_update | View / rescan / edit your living stack profile (now shows inferred personas + the uncategorized tail) | | profile_infer | Hand the dependencies the taxonomy couldn't classify to the host model to categorize, then persist them via profile_update { setCategories } — keyless semantic categorization | | record_decision | Mark a tool accepted / rejected / installed | | install_tool | Exact install command(s), tailored to library-vs-CLI per ecosystem; the agent runs them only after you confirm | | refresh_now | Force a collection + enrichment pass |

should_i_use and tool_details return not just a verdict but the raw material — the repo's README excerpt and the actual discussion headlines — so the host agent (Claude) can reason about sentiment and nuance the keyword heuristics don't capture.

Recommending agent extensions

recommend_extensions scouts things to add to your agent environment — Claude Code skills, MCP servers, subagents, and valuable SaaS — matched to your stack profile and skipping what you already have. It blends a curated catalog with live GitHub discovery:

  • Subagents are the showcase: rather than just pointing at a repo, Kie drills into the most popular community subagent collections, pulls out the individual subagents with their actual ready-to-use prompt (fenced as untrusted content), and links the source repo. Popularity carries — the hottest community subagents are surfaced to everyone, with stack-matched ones ranked higher.
  • Ranking blends GitHub stars with discussion heat — a repo being talked about on HN/Reddit (from the mentions Kie already collects) ranks above an equally-starred quiet one, and shows a 💬 discussed on … note.
  • Discovered items are flagged ⚠ discovered — verify and capped so curated picks aren't buried.

Goal-driven recommendations

Where recommend_extensions matches your stack, recommend_for_goal matches a stated goal. Say what you're trying to do — "I want to reduce my token usage" — and Kie returns a ranked set of options, each with pros, cons, and how to implement it:

  • Curated, hand-vetted options — built-in Claude Code features (subagents, /compact, skills, trimming CLAUDE.md) and known tools, ordered cheapest-effort first.
  • Live community tools — a discovery lane searches GitHub for tools matching the goal and folds in real stars, the discussion signal Kie already collects, and a "looks unmaintained" flag (from the repo's last push), all marked ⚠ community — verify.

It stays keyless: goal → playbook is a deterministic keyword match, and when nothing matches, Kie hands the menu of known goals back to the host model to reason over (the same host-model-in-the-loop pattern as profile_infer). The catalog generalizes — token reduction is the first playbook; other dev goals are just more entries.

Setup

npm install
npm run build

Configuration (environment variables)

The easiest way to set these is a .env file in the project root — copy the template and fill in what you want:

cp .env.example .env

Kie loads .env automatically on startup (Node's built-in parser, no dependency; override the location with KIE_ENV_FILE). .env is git-ignored. You can also set any of these as real environment variables or in your IDE's MCP env block instead.

| Var | Purpose | Default | |-----|---------|---------| | REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET | Free Reddit "script" app — enables the Reddit source | (Reddit disabled if unset) | | X_BEARER_TOKEN (or TWITTER_BEARER_TOKEN) | Your X API v2 bearer token — enables the X/Twitter source | (X disabled if unset) | | X_SEARCH_QUERY | Override the X recent-search query | dev-tooling query | | LOBSTERS_FEEDS | Comma-separated Lobsters feeds to merge (e.g. hottest,newest,t/rust) | hottest,newest | | KIE_REDDIT_MAX_PAGES | Pages of /hot to follow per subreddit (only if Reddit is enabled) | 3 | | KIE_X_MAX_PAGES | Recent-search pages to follow per refresh (each is paid X quota) | 2 | | GITHUB_TOKEN | Raises GitHub API limit 60→5000/hr | (unauthenticated) | | KIE_CODE_ROOTS | ;/,-separated dirs to scan for your stack | ~/code | | KIE_DB | SQLite path | ~/.kie/kie.db | | KIE_MAX_CACHE_AGE_HOURS | Lazy-refresh TTL | 6 | | KIE_HN_MAX_PAGES | Max Algolia pages pulled per Hacker News query (stories + comments) | 3 | | KIE_ENRICH_CAP | Max repos enriched per refresh | 45 anon / 200 with token | | KIE_ENRICH_FRESH_HOURS | Skip re-enriching a repo younger than this | 24 | | KIE_BUSY_TIMEOUT_MS | SQLite busy_timeout for concurrent writers | 5000 |

All credentials are bring-your-own and optional — without them those sources degrade gracefully (Reddit and X disable themselves; GitHub uses the lower anonymous rate limit). Nothing is bundled or shared: each user supplies their own keys, which stay on their machine.

X/Twitter note: the v2 recent-search endpoint is gated behind X's paid API tiers. The integration is correct for any tier that grants /2/tweets/search/recent; on a tier that doesn't, the call simply fails and the source is skipped without affecting others.

Register in Claude Code

The simplest path uses the published package via npx (no clone/build):

claude mcp add kie -- npx -y kie-radar
# with credentials:
claude mcp add kie \
  -e GITHUB_TOKEN=ghp_xxx -e REDDIT_CLIENT_ID=xxx -e REDDIT_CLIENT_SECRET=xxx \
  -- npx -y kie-radar

Or point at a local build instead of npx:

claude mcp add kie -- node /absolute/path/to/kie/dist/mcp/server.js

Register in Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "kie": {
      "command": "npx",
      "args": ["-y", "kie-radar"],
      "env": { "GITHUB_TOKEN": "ghp_xxx" }
    }
  }
}

Development

npm run build       # tsc -> dist/
npm test            # node --test (unit + integration, no network)
npm run inspector   # build + open the MCP inspector to call tools live

"What's new" — proactive digests

There are two ways to get a "here's what's new" update, because an MCP server only runs while an IDE session is open and can't push messages on its own:

  1. In-session: ask for whats_new any time. It returns repos discovered since your last check that fit your stack, and advances a "last seen" marker so the next call only shows newer items.

  2. In the background: run the daemon so the cache stays warm and a digest file is kept current even when the IDE is closed:

    npm run daemon          # or: npx -y -p kie-radar kie-radar-daemon

    It refreshes on an interval (KIE_DIGEST_INTERVAL_MIN, default 360 = 6h) and writes ~/.kie/digest.md (override with KIE_DIGEST_PATH). Wire it to start automatically with Windows Task Scheduler ("at log on"), a launchd/systemd unit, or pm2. The daemon keeps its own watermark, independent of the in-session whats_new marker.

Roadmap

  • Keep growing the keyword taxonomy so fewer repos land "uncategorized" — Kie stays keyless and deterministic by design (no LLM API in the loop). The uncategorized tail is already shrunk three ways without a Kie-owned key: the deterministic seed list, profile co-occurrence inference, and — for the rest — profile_infer, which hands the leftovers to the host IDE model to categorize (the same "host model is the reasoning layer" pattern should_i_use uses over the raw README).
  • npm: packaged as kie-radar for a one-command install (npx -y kie-radar).

License

MIT © Venkata Aryan Gaddala