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

@writhq/mcp

v0.2.1

Published

Writ MCP server — give an MCP-capable runtime (Claude Code, etc.) a verifiable agent passport. Tools to check status and present signed X-Passport assertions for real economic actions.

Readme

@writhq/mcp

Writ — KYA (Know Your Agent). A verifiable agent passport, over MCP.

An MCP server that gives an MCP-capable runtime (Claude Code, and any other MCP client) a Writ passport: it holds the agent's local keypair and exposes tools to check status and present signed X-Passport assertions for real economic actions.

npx @writhq/mcp

Tools

| Tool | What it does | |---|---| | passport_status | Show the agent's identity: registered agt_ id, configured mandate/platform, and whether the passport is reachable. Call this first. | | passport_present | Sign an assertion and present it to any platform endpoint via the X-Passport header. Amount in minor units (cents). | | passport_sign | Present signed authority to sign a document — class, counterparty, liability. Writ attests the authority; the counterparty executes the signature. | | passport_refill_demo | Refill the Northbank Sandbox brokerage with a signed assertion. Amount in dollars. Demonstrates ALLOW / per-tx DENY / period DENY / revoked DENY. |

passport_sign — signature authority

The second thing a mandate can authorize. Instead of may this agent move $500, it asks may this agent put its principal's name on this paper, at this liability:

passport_sign
  url               https://esign.example.com/envelopes/env_8821/sign
  document_class    nda            # nda | msa | sow | order_form | dpa | other
  counterparty      Northwind Logistics GmbH
  liability_minor   2500000        # $25,000 of exposure, in cents
  document_text     "MUTUAL NON-DISCLOSURE AGREEMENT\n\n…"

Pass either document_text (hashed locally with the same function the counterparty uses — nothing but the digest ever leaves the machine) or document_hash if you already computed it. Supplying both, or neither, is an error rather than a guess.

The mandate decides. Paper of a class it does not list denies document_class; a document over the per-document liability cap denies per_tx_cap; too much cumulative exposure this period denies period_cap.

Writ attests the authority — that a live, scoped mandate from a KYC'd principal covered paper of this class at this liability — and signs a record of that decision. It never produces the signature; the e-signature platform still does that. None of this is a qualified electronic signature (eIDAS/QES).

Configure it in Claude Code

Add to your MCP config (e.g. ~/.claude/mcp.json, or a project .mcp.json):

{
  "mcpServers": {
    "writ": {
      "command": "npx",
      "args": ["-y", "@writhq/mcp"],
      "env": {
        "PASSPORT_URL": "https://api.writhq.com"
      }
    }
  }
}

Generic MCP client

Any stdio MCP client can launch it:

{
  "command": "npx",
  "args": ["-y", "@writhq/mcp"],
  "env": { "PASSPORT_URL": "https://api.writhq.com" }
}

Point it at a local stack by setting PASSPORT_URL to it — e.g. http://localhost:8787 for wrangler dev. Production is the default precisely so that forgetting the variable cannot leave an agent talking to nothing.

Configuration

| Env var | Default | Purpose | |---|---|---| | PASSPORT_URL | https://api.writhq.com | Passport service base URL. Set it to point at a local stack. | | NORTHBANK_URL | http://localhost:3100 | Demo brokerage base URL (for passport_refill_demo). | | PASSPORT_AGENT_HOME | ./.passport-agent | Where the agent keypair + context are stored. |

Before it can transact

The agent needs a registered identity and a mandate first. Either:

  • run @writhq/sdk / passport-agent CLI to create the keypair, have a principal register the public key, and set the mandate/platform context; or
  • run the repo's npm run seed, which provisions a KYC'd principal, registers the agent, issues the Northbank mandate, and wires the context in one step.

Then passport_status will show registered: true and passport_refill_demo will run the full ALLOW/DENY flow. The keystore is shared with @writhq/sdk (same PASSPORT_AGENT_HOME), so seeding once wires both.

To see the entire flow end to end without any setup, run npx @writhq/demo against the live sandbox.

Home: https://writhq.com · Docs: https://writhq.com/docs/ · API: https://api.writhq.com

License

MIT © Tundra Industries