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

protocontent

v0.3.0

Published

Co-located stdio MCP bridge for protocontent — read local files and publish them to the protocontent HTTP API.

Readme

protocontent

A co-located stdio MCP server that lets a coding agent publish local files to protocontent and get back a tappable, live-updating URL.

Because no MCP primitive lets a remote server read the client's disk (and Claude Code doesn't echo the HTTP Mcp-Session-Id), protocontent runs as a tiny bridge next to the agent — on your laptop or on a cloud agent VM. It reads the files you want to publish from the local filesystem and uploads them to the protocontent HTTP API, while holding a stable per-thread "space" id in memory.

Zero-config: on first run it mints an anonymous project token and caches it to ~/.protocontent/config.json.

Install / add to your agent

It runs straight from npx — no global install needed.

Claude Code

claude mcp add protocontent -- npx -y protocontent

To pass through a token or a custom API base:

claude mcp add protocontent \
  --env PROTOCONTENT_TOKEN=pc_live_xxx \
  --env PROTOCONTENT_API=https://api.protocontent.com \
  -- npx -y protocontent

Raw MCP server JSON config

For any client that takes an MCP server config block (Claude Desktop, Cursor, etc.):

{
  "mcpServers": {
    "protocontent": {
      "command": "npx",
      "args": ["-y", "protocontent"],
      "env": {
        "PROTOCONTENT_TOKEN": "pc_live_xxx",
        "PROTOCONTENT_API": "https://api.protocontent.com"
      }
    }
  }
}

Both env entries are optional. Omit PROTOCONTENT_TOKEN to use a cached or freshly-minted anonymous token; omit PROTOCONTENT_API to use the default (https://api.protocontent.com).

This works exactly the same on a cloud agent VM — the bridge just needs to run in the same place the files live, with network access to the protocontent API.

Configuration

| Env var | Default | Purpose | | --------------------- | -------------------------------- | -------------------------------------------------------------- | | PROTOCONTENT_API | https://api.protocontent.com | Base URL of the protocontent HTTP API. | | PROTOCONTENT_TOKEN | (cached / minted) | Bearer token. Falls back to ~/.protocontent/config.json, then to a freshly-minted anonymous project token. | | CLAUDE_SESSION_ID | (unset → random) | When set, deterministically seeds this process's space id so it lines up with the agent thread. |

Spaces

Each running bridge process owns one space — a DNS-safe id like amber-canyon-7f3 — generated once at startup and held in memory for the process lifetime. When CLAUDE_SESSION_ID is present the id is derived deterministically from it; otherwise it's random. A spaceLabel is derived from the current working directory's basename. Everything you publish in a session lands in the same space, served at https://<spaceId>.protocontent.app, which updates live.

Keeping artifacts out of git

protocontent artifacts are ephemeral — you publish them to a URL, you don't commit them. On startup the bridge makes a best-effort, idempotent check: if it's running inside a git repo, it ensures .protocontent/ is in your .gitignore. Stage anything you publish under .protocontent/ and it stays out of version control automatically. Opt out with PROTOCONTENT_NO_GITIGNORE=1.

Tools

| Tool | Arguments | What it does | | ---------------- | ------------------------------------------ | --------------------------------------------------------------------------- | | publish_html | { path?, content?, name?, ttl? } | Publish a single file (path) or inline content — exactly one of them. | | publish_folder | { dir, entry?, name?, ttl? } | Recursively publish a directory (skips node_modules, .git, dotfiles). | | list | {} | List artifacts in this space with URLs and versions. | | history | { name } | Show an artifact's version history. | | unpublish | { name } | Stop an artifact's URL from serving content. | | keep | { name } | Remove the expiry so an artifact is kept permanently. |

Every publish returns a tappable markdown link, the live space URL, and the direct artifact URL.

Develop

npm install
npm run build      # tsc -> dist/
node dist/index.js # run the stdio server directly (it talks MCP over stdio)

Requires Node 18+ (uses the built-in global fetch).

License

MIT