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

datacartel-mcp

v0.3.0

Published

MCP server that lets Claude keep a client's Data Cartel portal (changelog, roadmap, roadmap plans, health, updates, overview metrics) up to date via propose-then-approve writes.

Readme

Data Cartel MCP

An MCP server that lets Claude keep one client's Data Cartel portal current: changelog, roadmap, health, meeting recaps, and dashboard metrics. It never writes anything the user hasn't approved.

How it works

Every write is two phases:

  1. A propose_* tool validates a draft and returns a preview + token. It writes nothing.
  2. Claude shows the preview to you (via its question UI) and only calls commit_proposal with that token after you approve. Or choose Send to Inbox: send_to_inbox stores that same previewed change in the portal's Inbox (Admin, Inbox), where anyone on the data team can publish or dismiss it later. Nothing reaches the business unit until someone publishes it.

The token encodes the exact previewed content, so a commit can only write what you saw. There is no delete capability, and every commit is appended to an audit log in the portal database.

Per-client setup (one directory per client)

No code to clone or build. The server runs directly via npx. Client identity comes from config + token, never the directory name.

In the client's working directory:

  1. Create .datacartel.json:

    { "apiUrl": "https://acme.datacartel.io", "clientSlug": "sales" }

    Use your organization's Data Cartel address for apiUrl, and replace sales with the client's slug from the Data Cartel admin.

  2. Get a token for this client from your Data Cartel admin (minted once, then carried to any machine). Keep it secret.

  3. Create .mcp.json:

    {
      "mcpServers": {
        "datacartel": {
          "command": "npx",
          "args": ["-y", "datacartel-mcp@latest"],
          "env": { "DATACARTEL_TOKEN": "pp_..." }
        }
      }
    }

    The @latest tag makes npx re-resolve on each launch, so a published update rolls out with just a Claude Code restart (no cache to clear).

  4. Restart Claude Code. Run portal_status to confirm the connection.

The server refuses to start without a valid .datacartel.json and token, so it can't be accidentally driven against the wrong client.

Moving from priora-portal-mcp

This package was previously published as priora-portal-mcp. That name now belongs to a different product. To move a Data Cartel setup over:

  • Rename .priora-portal.json to .datacartel.json.
  • Rename the PRIORA_PORTAL_TOKEN env var to DATACARTEL_TOKEN (and PRIORA_PORTAL_CONFIG to DATACARTEL_CONFIG, if you set it).
  • In .mcp.json, change priora-portal-mcp@latest to datacartel-mcp@latest.

The old names are recognised only to tell you what to rename. They are never read, so an old config can't send your token to another product's API.

Tools

Read

  • portal_status — confirm which client you're locked to and that the API is reachable.
  • get_changelog / get_roadmap / get_health / get_updates / get_overview_metrics — read current state before drafting.
  • get_roadmap_plan — read the full Claude scoping plan attached to a roadmap item (get_roadmap shows a hasPlan flag; plans are elided from the list).

Propose (writes nothing; returns a preview + token)

  • propose_changelog_entry — draft a changelog entry.
  • propose_roadmap_update — draft a roadmap item create/update, or mark one shipped (complete: true also drafts a linked changelog entry). Schedule it with startDate/endDate (YYYY-MM-DD) and datePrecision (day, month, quarter), and mark recurring work with cadence (weekly, monthly, quarterly). Omitted fields are left unchanged; null clears one.
  • propose_roadmap_plan — attach a Claude scoping plan (Markdown) to an existing roadmap item, with an optional client-visibility toggle.
  • propose_health_update — draft a health check update (stage + five dimensions; status derived automatically).
  • propose_update — draft a meeting recap.
  • propose_overview_metric_update — draft a dashboard metric create/update.

Commit, or defer

  • commit_proposal — apply an approved proposal. The only tool that writes portal content.
  • send_to_inbox — store an approved-for-review proposal in the Inbox instead of applying it. Publishing from the Inbox applies exactly the previewed content.

Develop

npm install
npm run dev    # tsx src/index.ts (stdio)
npm run build  # tsc -> dist/
npm publish    # builds first via prepublishOnly