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

@goodagent/mcp-server

v0.4.0

Published

Model Context Protocol server for verifying GoodDollar Agent IDs and reading GoodDollar state on Celo. Read-only, non-custodial.

Readme

@goodagent/mcp-server

A Model Context Protocol server that lets any MCP-compatible agent runtime (Claude Desktop, Cursor, custom frameworks) verify a GoodDollar Agent ID and read basic GoodDollar state on Celo.

All tools are read-only — the server never holds keys, signs, or broadcasts transactions. Agent verification re-reads both the GoodDollar whitelist and the agent's required G$ bond (AgentVault) live on Celo, so a credential auto-invalidates if the human's verification lapses or the operator withdraws the bond (insufficient_bond).

Use it (no install)

Point your MCP client at the published binary via npx:

{
  "mcpServers": {
    "gooddollar": {
      "command": "npx",
      "args": ["-y", "@goodagent/mcp-server"],
      "env": {
        "CELO_RPC_URL": "https://forno.celo.org",
        "GOODDOLLAR_ENV": "production"
      }
    }
  }
}

Transport is stdio — the client spawns the server as a subprocess.

Tools

| Tool | Purpose | Input | |------|---------|-------| | gooddollar_verify_agent | Confirm an AI agent is vouched for by a real, currently-verified GoodDollar human and still carries its required refundable G$ bond on-chain | { credential } (full signed wire-form credential) | | gooddollar_verify_status | Is a wallet a verified (whitelisted) GoodDollar identity? Returns root + expiry | { wallet } | | gooddollar_get_balance | G$ token balance (raw + formatted) | { wallet } | | gooddollar_claim_eligibility | Can a wallet claim its daily UBI now, and how much? | { wallet } | | gooddollar_get_daily_stats | GoodDollar UBI cycle stats for the current day | {} | | gooddollar_ping | MCP + Celo RPC connectivity check | {} |

gooddollar_verify_agent

The standalone server is stateless, so pass the full credential to verify:

{
  "credential": {
    "fields": { "agent": "0x...", "operator": "0x...", "humanRoot": "0x...", "nonce": "0", "issuedAt": "...", "expiresAt": "..." },
    "signature": "0x...",
    "chainId": 42220,
    "verifyingContract": "0x..."
  }
}

Returns:

{ "found": true, "valid": true, "operator": "0x...", "humanRoot": "0x...", "expiresAt": "1735689600", "stake": "250000000000000000000", "minStake": "250000000000000000000" }

valid is true only if the signature recovers to operator, the credential is not expired, the operator is still a whitelisted GoodDollar identity, and the agent's live G$ bond in the AgentVault still meets the vault minimum (250 G$ on Celo mainnet). If the operator withdrew the bond, the result is { "valid": false, "reason": "insufficient_bond", ... } until it is re-staked.

Looking up a stored credential by agent address (without holding the credential) is served by the hosted REST API: GET https://gcopilot-api.geinz.lol/agent/verify/:address.

Verify in code instead

The same verification is available directly via the SDK @goodagent/agent-id:

import {
  verifyAgentId,
  liveHumanRootLookup,
  liveStakeLookup,
} from "@goodagent/agent-id";

const { valid, operator } = await verifyAgentId(credential, {
  humanRootLookup: liveHumanRootLookup,
  stakeLookup: liveStakeLookup, // enforce the live G$ bond too
});

Configuration

| Env var | Default | Purpose | |---------|---------|---------| | CELO_RPC_URL | https://forno.celo.org | Celo JSON-RPC endpoint | | GOODDOLLAR_ENV | production | GoodDollar contracts environment |

License

MIT