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

portable-llm-wiki-mcp

v0.1.2

Published

MCP server that exposes a Portable LLM Wiki to Cursor, Claude Desktop, or any MCP-aware LLM client.

Readme

portable-llm-wiki-mcp

A native MCP (Model Context Protocol) server that exposes the Portable LLM Wiki as typed tool calls to Cursor, Claude Desktop, or any MCP-aware client.

Thin Node.js shim over the FastAPI backend at WIKI_BASE_URL. All wiki state, tier filtering, and ownership decisions live in one place (the backend) — the MCP server just provides the typed surface clients want.

Install

The fastest path is npx. You don't need to install anything explicitly; your MCP client will fetch the package on first run and cache it.

If you want to install it globally for inspection:

npm install -g portable-llm-wiki-mcp
portable-llm-wiki-mcp --help

For development against a local copy of the source:

git clone https://github.com/professorpalmer/portable-llm-wiki
cd portable-llm-wiki/mcp
npm install && npm run build

Configure your LLM client

Cursor

Add to ~/.cursor/mcp.json (or your workspace's .cursor/mcp.json):

{
  "mcpServers": {
    "portable-llm-wiki": {
      "command": "npx",
      "args": ["-y", "portable-llm-wiki-mcp"],
      "env": {
        "WIKI_BASE_URL": "https://portable-llm-wiki.vercel.app",
        "WIKI_OWNER_TOKEN": "<paste OWNER_TOKEN if you want write access>"
      }
    }
  }
}

Restart Cursor (Cmd+Shift+P → "Reload Window"). The wiki tools appear in any chat — they show up as available functions for the model.

Claude Desktop (macOS / Windows)

Edit the Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Use the same mcpServers block as the Cursor example. Then fully quit and relaunch Claude Desktop.

Other clients

Any MCP-aware client. The server uses stdio transport — point the client at npx -y portable-llm-wiki-mcp (or the absolute path to dist/server.js if running from source).

Environment variables

| Var | Purpose | Default | |---|---|---| | WIKI_BASE_URL | Base URL of your wiki's FastAPI backend. | http://localhost:8000 | | WIKI_OWNER_TOKEN | Optional. With it: owner tier + write tools. Without: public tier only. | (none) | | WIKI_API_BASE | Legacy alias for WIKI_BASE_URL. Still works. | — |

When pointing at the hosted Vercel demo, use the full Vercel URL (https://portable-llm-wiki.vercel.app) — backend routes are proxied through Next.js so MCP calls work without the *.onrender.com URL.

Tools exposed

| Tool | Purpose | Owner-only | |---|---|---| | list_pages | Manifest of every visible page (slug, title, section, tier, excerpt). Call once at session start. | no | | read_page | Full body + frontmatter + cross-references for one page. | no | | search_wiki | Fast keyword search across visible pages. | no | | query_wiki | The primary tool. Natural-language question → graph-aware retrieval → sourced answer with citations. | no | | get_neighbors | All pages within N hops of a slug along the wikilink graph. | no | | ingest_source | Save a new raw source + optionally kick off the Puppetmaster ingest agent. | yes | | lint_wiki | Structural lint report (orphans, stale, broken provenance, etc.). | yes |

Without WIKI_OWNER_TOKEN, the server only surfaces public-tier pages and the owner-only tools return errors. This is the safe default for sharing your wiki with someone else's MCP client.

Tier model

Every page in the wiki has a tier: frontmatter field (public, recruiter, friend, private). The backend enforces tier-based filtering on every request based on the bearer token, so the same MCP server config can yield very different views depending on which token you give it.

To mint a tier-scoped share token (e.g., recruiter-scoped) without exposing the master OWNER_TOKEN, use the Share Tokens panel in the owner console at /owner. The plaintext token is shown once at mint time — paste it into the recipient's WIKI_OWNER_TOKEN env var.

Smoke test

WIKI_BASE_URL=https://portable-llm-wiki.vercel.app npx -y portable-llm-wiki-mcp@latest \
  <<< '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0.0"}}}'

The handshake should return a JSON-RPC response listing protocolVersion, capabilities, and the server's name/version.

Troubleshooting

  • "backend at … is not reachable" in stderr → the configured WIKI_BASE_URL isn't responding. Verify with curl $WIKI_BASE_URL/healthz.
  • Tools return "owner-only" → no WIKI_OWNER_TOKEN in your MCP env, or the token is wrong.
  • Cursor doesn't see the tools → check the MCP server logs in Cursor (Cmd+Shift+P → "Output: Show Output Channels…" → look for MCP).

License

MIT