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

nostr-explore-mcp

v0.4.0

Published

MCP server for exploring Nostr protocol data

Readme

Nostr Explore MCP

A Model Context Protocol (MCP) server that enables AI assistants to explore and interact with the Nostr network — conversation discovery, content publishing, and real-time event subscriptions.

What You Can Do

Conversation Exploration

  • Track conversations — Search and retrieve threads by keywords or hashtags
  • Get full thread context — Retrieve complete conversation threads from any event, including all parents

Content Publishing

  • Publish short notes — Post kind:1 messages with hashtags, mentions, and replies
  • Create long-form articles — Publish kind:30023 articles with markdown, summaries, and header images
  • Publish raw events — Sign and publish any arbitrary Nostr event

Real-time Resource Subscriptions

All resources support MCP resources/subscribe — the client receives a push notification whenever a new event arrives, without polling.

  • User notes — Live stream of root notes from a specific user
  • Notifications — Live stream of events that mention a specific pubkey
  • Event feed — Live stream of all events from a user, optionally filtered by kind

Installation

npx nostr-explore-mcp

Or add to your MCP client config (e.g. Claude Desktop):

{
  "mcpServers": {
    "nostr-explore": {
      "command": "npx",
      "args": ["nostr-explore-mcp"]
    }
  }
}

Configuration

Default relays:

  • wss://relay.primal.net
  • wss://tenex.chat

Authentication for Publishing

Publishing requires a signing key. Three ways to provide one:

  1. Environment variable — set NOSTR_PRIVATE_KEY (hex or nsec)
  2. Per-call parameter — pass nsec in the tool arguments
  3. NIP-46 bunker — set NOSTR_BUNKER_KEY (bunker URL, hex pubkey, npub, or NIP-05), or pass publish_as per call

NIP-46 still needs a local key for bunker authentication (nsec param or NOSTR_PRIVATE_KEY).

Precedence: publish_as > NOSTR_BUNKER_KEY, nsec > NOSTR_PRIVATE_KEY.

Available Tools

Conversation

| Tool | Description | |------|-------------| | get_conversation | Retrieve a full thread from any Nostr event (nevent, hex ID, etc.) | | nostr_conversation_tracker | Search threads by keyword or hashtag |

Publishing

All publish tools return the encoded event ID and the list of relays where the event was accepted.

| Tool | Returns | Description | |------|---------|-------------| | nostr_publish_note | { nevent, relays } | Publish a short kind:1 note | | nostr_publish_article | { naddr, relays } | Publish a long-form kind:30023 article | | nostr_publish_raw | { nevent1, relays } | Sign and publish a raw event JSON |

Available Resources

All resources support resources/subscribe for push-based update notifications.

nostr://user/{userId}/notes

Root notes (kind:1 without e tags) from a specific user.

  • userId — NIP-05, npub, nprofile, or hex pubkey
  • ?limit=N — max events to return (default 100)
  • ?resolveContent=true — resolve embedded nostr: references

nostr://notifications/{userId}

Events that mention a specific user (events with a p tag pointing to their pubkey).

  • userId — NIP-05, npub, nprofile, or hex pubkey
  • ?limit=N — max events to return (default 50)
  • ?since=<unix> — only events after this timestamp

nostr://feed/{userId}/{kinds}

All events from a user, optionally filtered by kind.

  • userId — NIP-05, npub, nprofile, or hex pubkey
  • {kinds} — optional comma-separated kinds, e.g. 1,30023
  • ?relays=wss://... — override default relays

Development

bun run dev    # run from source
bun run build  # compile to dist/

Project Structure

src/
├── index.ts                        # Server entry point
├── resources/
│   ├── feed.ts                     # nostr://feed/ resource
│   ├── userNotes.ts                # nostr://user/{userId}/notes resource
│   ├── notifications.ts            # nostr://notifications/{userId} resource
│   └── subscriptionManager.ts      # Live NDK subscriptions for all resources
├── tools/
│   ├── getConversation.ts
│   ├── nostrNotePublisher.ts
│   ├── nostr/
│   │   ├── conversationTracker.ts
│   │   ├── contentPublisher.ts
│   │   └── rawPublish.ts
│   └── utils/
│       └── contentResolver.ts
└── utils/
    ├── signer.ts                   # Signing / NIP-46 logic
    └── userResolver.ts             # NIP-05 / npub / hex resolution

License

MIT — @pablof7z