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

twitter-signal-mcp

v0.4.0

Published

MCP server for live X/Twitter search and AI trend digests — no Twitter API key, no subscription. Pays per call in USDC on Base via x402 from your own wallet.

Readme

twitter-signal-mcp

Live X/Twitter search and AI trend digests inside Claude, Cursor, or any MCP client — no Twitter/X API key, no subscription, no monthly minimum. Your agent pays a fraction of a cent per call in USDC on Base using x402.

x_search           $0.02/call    up to 20 newest matching tweets + engagement
x_digest           $0.05/call    the same tweets + an AI-written trend summary
x_leads            $0.05/call    the people behind matching posts, enriched (bio, website, emails, followers)
x_pain_points      $0.05/call    clustered complaints / feature requests / praise for a product, with quotes
x_user_timeline    $0.02/call    one account's own recent posts
x_profile          $0.02/call    one account's bio, stats, and links
x_tweet            $0.01/call    one tweet by ID, full text + engagement
x_replies          $0.02/call    the reply thread under one tweet
x_find_accounts    $0.02/call    accounts matching a name/topic, not posts
x_account_verdict  $0.02/call    AI read on whether an account is worth engaging
x_watch            $0.05/call    only the posts newer than your last check

Why this exists

The official X API starts at a monthly subscription and a developer-account approval. If an agent just needs to know what people are saying right now, that's a lot of setup for a handful of queries. This server charges per request instead — a hundred searches costs about sixty cents, and there is nothing to cancel.

Tools

x_search — $0.02

Full advanced-search syntax. Returns up to 20 newest matches with author handle, follower count, text, timestamp, permalink, likes, retweets, replies, and views. Need more than 20? A full answer ends with next.older — pass its cursor value back (same query) for the next 20 older matches, $0.02 a page. No slicing dates by hand.

x_digest — $0.05

Everything above plus an AI-written digest generated only from the returned tweets:

{
  "summary": "3-5 sentences on what's actually being said",
  "sentiment": "positive | negative | mixed | neutral",
  "sentiment_note": "why it leans that way",
  "key_themes": ["..."],
  "driving_accounts": ["@handle", "..."],
  "notable_post_urls": ["https://x.com/..."]
}

Use x_digest when you want the takeaway; x_search when you want the raw posts.

x_leads — $0.05

Same advanced-search syntax as x_search, but returns the PEOPLE behind the matching posts instead of the posts themselves — enriched with bio, website, emails found in the bio, follower count, location, a DM-open flag, and every matching post per person:

{
  "result_count": 20,
  "lead_count": 8,
  "leads": [{ "username": "someone", "followers": 5000, "emails": [], "matched_posts": [] }]
}

Inputs: query (required, same syntax as x_search), max (optional, "20" or "40" — default 20). Use for recruiting, cofounder search, B2B lead generation, influencer discovery, community sourcing.

x_pain_points — $0.05

Pass a product or brand name/handle, get clustered complaints, feature requests, and praise mined from live X posts, with verbatim quotes and URLs:

{
  "product": "Cursor",
  "analysis": { "summary": "...", "pain_points": [{ "theme": "...", "count": 4, "severity": "medium" }] }
}

Input: product (required — a name or an X handle). Use for product research, competitor research, churn signals, roadmap input.

x_user_timeline — $0.02

An account's own recent posts (originals, replies, retweets), newest first. Input: username (required). Use: x_user_timeline username="elonmusk" to track a competitor's or founder's own feed.

x_profile — $0.02

One account's bio, website, location, join date, follower/following counts, and verified status. Input: username (required). Use: x_profile username="cursor_ai" to qualify a lead before you reach out.

x_tweet — $0.01

One tweet by numeric ID: full text, author, timestamp, permalink, engagement. Input: id (required). Use: x_tweet id="1859012345678901234" to re-check a specific post you already found.

x_replies — $0.02

The reply thread under one tweet, newest first. Input: id (required, same as x_tweet). Use: x_replies id="1859012345678901234" to see how people reacted to a specific post.

x_find_accounts — $0.02

Search for ACCOUNTS matching a name, keyword, or topic — not posts. Input: query (required, same syntax as x_search). Use: x_find_accounts query="solar installer hawaii" to build a shortlist of accounts to follow up on.

x_account_verdict — $0.02

A short AI-written read on one account: what it's about, how active/engaged it is, and whether it's worth following up with. Input: username (required). Use: x_account_verdict username="someone" to triage a lead fast without reading the profile yourself.

x_watch — $0.05

Same search as x_search, but only returns posts newer than a cursor you supply. Inputs: query (required), since (optional — an ISO timestamp or the cursor.newest_id from your last x_watch call). Use: poll a brand/ticker/hashtag on a schedule without re-paying for posts you've already seen. A check that finds nothing new is not charged — you only pay when there is news.

Query syntax (x_search, x_digest, x_leads, x_find_accounts, x_watch)

Both tools take one query string:

| Pattern | Example | |---|---| | Keywords / phrases | "rate cut" inflation | | Account | from:elonmusk starship | | Hashtag / cashtag | #bitcoin · $NVDA | | Engagement floor | min_faves:100 · min_retweets:50 | | Language / dates | lang:en since:2026-08-01 until:2026-08-09 | | Exclusions | airdrop -giveaway |

Setup

You need a Coinbase CDP wallet funded with a little USDC on Base — that wallet pays per call. Create one at portal.cdp.coinbase.com (API key + wallet secret).

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "twitter-signal": {
      "command": "npx",
      "args": ["-y", "twitter-signal-mcp"],
      "env": {
        "CDP_API_KEY_ID": "your-key-id",
        "CDP_API_KEY_SECRET": "your-key-secret",
        "CDP_WALLET_SECRET": "your-wallet-secret",
        "X402_MAX_PRICE": "0.05"
      }
    }
  }
}

X402_MAX_PRICE is a hard per-call ceiling in USD. If the endpoint ever quotes more than this, the request is refused before anything is signed — no charge. The default 0.05 already covers every tool above (the priciest are x_digest, x_leads, x_pain_points, and x_watch at $0.05) — you don't need to raise it.

Cost & safety

  • You are only ever charged for a successful response. Invalid queries are rejected before payment (HTTP 400, no settlement).
  • Nothing found = nothing charged. An empty x_search / x_digest / x_leads / x_pain_points / x_watch comes back as no_results with charged: false — the payment is never settled.
  • Same call within 10 minutes = free. Repeat the exact call from the same wallet and you get the saved answer (meta.charged: false) at no cost.
  • If the upstream tweet source fails after payment, the API returns an explicit error and logs the call for refund rather than pretending it worked.
  • Gas is covered by the facilitator — you spend USDC only.
  • Identical queries within 60 seconds are served from cache.

How it works

MCP client → twitter-signal-mcp → 402 challenge → sign USDC authorization
           → facilitator settles on Base → data returned

Protocol: x402 v2 (CAIP-2 networks, PAYMENT-REQUIRED challenge header). A v1 client cannot talk to this API.

License

MIT