Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Las reseñas y las cuentas llegarán en una etapa posterior.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

Purser

de ahmad-codexversión 0.1.2i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.ahmad-codex/purser

Instalar

Resumen

Descripción del creador (original en inglés)

Wallet for AI agents with on-chain spending limits and owner approval over the limit

Los tres pilares de PopNx MCP

Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: Streamable HTTP
  • Categoría: Otros
  • Debes completar: PURSER_RPC_URL, PURSER_ACCOUNT, PURSER_AGENT_PRIVATE_KEY, PURSER_RELAYER_PRIVATE_KEY, PURSER_API_TOKEN

Instalación

Elige la app de IA que usas y copia la configuración.

Antes de instalar

  • Revisiones básicas: 1 de 1 superadas
  • Se ejecuta en tu computadora con los permisos de tu usuario (archivos, red, apps).
  • Debes completar tú: PURSER_RPC_URL, PURSER_ACCOUNT, PURSER_AGENT_PRIVATE_KEY, PURSER_BUNDLER_URL, PURSER_RELAYER_PRIVATE_KEY, PURSER_API_TOKEN

Los valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.

Necesitas

¿Qué app usas?

Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.

Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json

{
  "mcpServers": {
    "purser": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "PURSER_RPC_URL",
        "-e",
        "PURSER_ACCOUNT",
        "-e",
        "PURSER_AGENT_PRIVATE_KEY",
        "-e",
        "PURSER_BUNDLER_URL",
        "-e",
        "PURSER_RELAYER_PRIVATE_KEY",
        "-e",
        "PURSER_API_TOKEN",
        "ghcr.io/ahmad-codex/purser:0.1.2"
      ],
      "env": {
        "PURSER_RPC_URL": "your-value",
        "PURSER_ACCOUNT": "your-value",
        "PURSER_AGENT_PRIVATE_KEY": "your-value",
        "PURSER_BUNDLER_URL": "your-value",
        "PURSER_RELAYER_PRIVATE_KEY": "your-value",
        "PURSER_API_TOKEN": "your-value"
      }
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add purser --env PURSER_RPC_URL=your-value --env PURSER_ACCOUNT=your-value --env PURSER_AGENT_PRIVATE_KEY=your-value --env PURSER_BUNDLER_URL=your-value --env PURSER_RELAYER_PRIVATE_KEY=your-value --env PURSER_API_TOKEN=your-value -- docker run -i --rm -e PURSER_RPC_URL -e PURSER_ACCOUNT -e PURSER_AGENT_PRIVATE_KEY -e PURSER_BUNDLER_URL -e PURSER_RELAYER_PRIVATE_KEY -e PURSER_API_TOKEN ghcr.io/ahmad-codex/purser:0.1.2

Completa los valores vacíos antes de ejecutarlo.

Abrir en Cursor

O copia la configuración tú

Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json

{
  "mcpServers": {
    "purser": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "PURSER_RPC_URL",
        "-e",
        "PURSER_ACCOUNT",
        "-e",
        "PURSER_AGENT_PRIVATE_KEY",
        "-e",
        "PURSER_BUNDLER_URL",
        "-e",
        "PURSER_RELAYER_PRIVATE_KEY",
        "-e",
        "PURSER_API_TOKEN",
        "ghcr.io/ahmad-codex/purser:0.1.2"
      ],
      "env": {
        "PURSER_RPC_URL": "your-value",
        "PURSER_ACCOUNT": "your-value",
        "PURSER_AGENT_PRIVATE_KEY": "your-value",
        "PURSER_BUNDLER_URL": "your-value",
        "PURSER_RELAYER_PRIVATE_KEY": "your-value",
        "PURSER_API_TOKEN": "your-value"
      }
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Abrir en VS Code

O copia la configuración tú

Pégalo en .vscode/mcp.json de tu proyecto

{
  "servers": {
    "purser": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "PURSER_RPC_URL",
        "-e",
        "PURSER_ACCOUNT",
        "-e",
        "PURSER_AGENT_PRIVATE_KEY",
        "-e",
        "PURSER_BUNDLER_URL",
        "-e",
        "PURSER_RELAYER_PRIVATE_KEY",
        "-e",
        "PURSER_API_TOKEN",
        "ghcr.io/ahmad-codex/purser:0.1.2"
      ],
      "env": {
        "PURSER_RPC_URL": "your-value",
        "PURSER_ACCOUNT": "your-value",
        "PURSER_AGENT_PRIVATE_KEY": "your-value",
        "PURSER_BUNDLER_URL": "your-value",
        "PURSER_RELAYER_PRIVATE_KEY": "your-value",
        "PURSER_API_TOKEN": "your-value"
      }
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.

Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.

Valores que debes completar

  • PURSER_RPC_URL obligatorio env
    JSON-RPC URL of the chain the account is on
  • PURSER_ACCOUNT obligatorio env
    Address of the Purser smart account
  • PURSER_AGENT_PRIVATE_KEY secreto obligatorio env
    The agent's session key. The server never needs the owner key.
  • PURSER_BUNDLER_URL env
    ERC-4337 bundler URL. Without one, the relayer key submits handleOps itself.
  • PURSER_RELAYER_PRIVATE_KEY secreto env
    Pays for handleOps when there is no bundler. Defaults to the agent key.
  • PURSER_API_TOKEN secreto env
    Bearer token for the approvals API and console

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub ahmad-codex, dueña del repo

  • … Aún sin revisar

    Sigue en mantenimiento

    Todavía no hemos leído este repo en GitHub

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Comparado con otros en Otrosi

  • Más estrellas que el 0% de los otros 32564 servidores de esta categoría
  • Publicado en el registro más recientemente que el 86% de los otros 32564 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 32564 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro Purser?

Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

Debes completar: PURSER_RPC_URL, PURSER_ACCOUNT, PURSER_AGENT_PRIVATE_KEY, PURSER_RELAYER_PRIVATE_KEY, PURSER_API_TOKEN

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez –, y la última versión (0.1.2) llegó al registro hace 5 días.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Docker en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: Spec Driven Development, Remote Desktop Commander, Tools MCP

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

Spec Driven Development

de formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Se ejecuta en tu computadora★ 440MITActualizado hace 14 meses
Instalar

Remote Desktop Commander

de desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Se ejecuta en la nube★ 211Actualizado ayer
Instalar

Tools MCP

de First-CH

Web production tools for AI agents: contrast, JP text, WebP, JSON-LD, slugs, dates and 40+ more

Se ejecuta en tu computadoraActualizado hoy
Instalar

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

Purser

Give an AI agent a wallet without giving it your keys.

Purser is an ERC-4337 smart account where each agent gets its own session key with a policy: which contracts and functions it may call, how much it may spend per payment and per day, and until when. Payments inside the policy go through on their own. Anything over the limits waits for you to approve. An MCP server lets Claude, Cursor or any MCP client use the wallet, and a console shows budgets, spending and pending approvals as they happen.

Why

Agents are starting to pay for things: API credits, compute, data, subscriptions. Today that usually means one of two bad options:

  • Hand the agent a private key. One prompt injection or bug away from an empty wallet.
  • Approve every payment by hand. Safe, and it defeats the point of an agent.

Purser sits in between. The limits live in the contract, so they hold even if the agent, the server it runs on, or its key is compromised. The worst a leaked agent key can do is spend the rest of the current budget at allowed places, and burn some ETH on gas, until you revoke it or freeze the account, which takes one transaction. (A gas budget per key is on the roadmap.)

What's inside

LayerWhat it shows
Smart contractsERC-4337 v0.7 account with session keys, allow-lists, per-transaction caps and rolling budgets; owner co-signature for over-limit operations; UUPS upgrades, ERC-1271, CREATE2 factory with the same address on every chain
Protocol rulesValidation that follows ERC-7562 (no clock reads), so public bundlers accept it; time-based budgets moved to the execution phase through executeUserOp
Testing41 unit tests through a real EntryPoint, fuzz tests against a budget model, invariant tests with a stateful handler, gas snapshot, Slither in CI
TypeScript SDKviem client that builds, signs and submits user operations through a bundler or handleOps, decodes policy errors, and indexes events within public RPC log limits
AI integrationMCP server (streamable HTTP and stdio) with six tools, model-readable refusals, and a human-in-the-loop approval flow
ProductReact console with budget meters, live activity, approvals, revoke and a kill switch
DeliveryOne-command demo image, Docker Compose, CI that plays the full story end to end, testnet deploy script

How it works

flowchart LR

Agent["AI agent (Claude, Cursor, ...)"] -- MCP tools --> Server["Purser server holds the session key only"] Server -- "user operation signed by the session key" --> EP["EntryPoint v0.7"] EP --> Wallet["PurserAccount policy checks"] Wallet --> Targets["Allowed contracts and recipients"] Owner["Owner"] -- "approve, reject, revoke, freeze" --> Console["Console"] Console --> Server

  1. The owner grants an agent a session key with a policy: an allow-list of (contract, function) pairs, a per-transaction cap and a per-period budget for each token (ETH or ERC-20), and a validity window.
  2. The agent calls MCP tools such as send_eth or call_contract. The server dry-runs the call against the policy, signs a user operation with the session key and submits it.
  3. The account checks the signature, the window, the allow-list and the per-transaction caps during validation, so a disallowed operation fails before it costs anything. Budgets need the block time, which ERC-4337 forbids in validation, so they are enforced in executeUserOp.
  4. Over the limit? The server turns it into an approval request. When the owner approves, the operation carries both the session signature and the owner's signature, and it runs without using the agent's budget. An approval raises the amount, never the scope: the allow-list still applies.
  5. The owner can revoke a key or freeze the whole account at any time. A revoke or freeze earlier in the same bundle still stops a later agent operation.

Try it in one command

You need Docker. Nothing to clone, nothing to install:

docker run --rm -it -p 127.0.0.1:8787:8787 ghcr.io/ahmad-codex/purser:demo

The container starts a local chain, deploys the EntryPoint, the factory and a fresh account with a seeded agent, and starts the MCP server and the console. Open http://localhost:8787 and watch: ten seconds later the agent story plays in the terminal while the console updates live.

The agent pays a merchant, pays in a token, buys from a shop contract, tries a payment over the limit (the approval request appears in the console), gets approved, is refused for a recipient that is not on its allow-list, and is stopped by the kill switch. Then the wallet stays up for your own agent. Everything uses Anvil's public development keys and is gone when you press Ctrl+C.

From a clone, docker compose up runs the same stack as separate services, and docker compose run --rm demo plays the story against it.

Connect your own agent

With the demo running, point any MCP client at http://localhost:8787/mcp:

claude mcp add --transport http purser http://localhost:8787/mcp

Then ask Claude: *"Check the wallet status, then pay the merchant 0.01 ETH for API credits."* Try *"pay the merchant 0.3 ETH"* to see an approval request show up in the console. docs/mcp-clients.md covers Claude Desktop, Cursor and stdio.

MCP tools

ToolWhat it does
wallet_statusBalances, the agent's remaining budget per token, caps, reset times, expiry, freeze state, pending approvals
send_ethPay ETH to an address or a known name
send_tokenPay ERC-20 tokens by symbol or address
call_contractCall an allowed contract function, optionally with ETH, e.g. buy(uint256)
get_requestStatus of an approval request
list_requestsRecent approval requests

Each payment tool returns one of: done (with the transaction hash and the budget left), waiting for the owner (with the request id), or refused (with a reason the model can act on).

The policy

FieldMeaning
permissions(target, selector) pairs. 0xffffffff allows any function on a target; 0x00000000 allows plain ETH transfers. The account itself can never be a target.
limitsPer token (address(0) is ETH): perTx cap and perPeriod budget. ERC-20 transfer, approve and transferFrom from the account count as spending.
periodBudget window in seconds, for example 86400 for a daily budget.
validAfter, validUntilWhen the key works. Enforced by the EntryPoint through the validation data.

Granting a key again replaces its whole policy; old permissions do not leak into the new one.

Contracts

ContractPurpose
PurserAccountThe account: ERC-4337 v0.7, UUPS upgradeable by its owner, ERC-1271, token callbacks
PurserFactoryCREATE2 factory, so an account's address is known before it is deployed

Built on the eth-infinitism reference EntryPoint v0.7 and OpenZeppelin 5. The factory deploys through the deterministic CREATE2 proxy, so it has the same address on every chain with the canonical EntryPoint.

Tests. 41 unit tests through a real EntryPoint, fuzz tests that check random payment and time sequences against a model of the budget, and invariant tests (about 16,000 random calls per run) for three properties: an agent never spends more than its budget per period without approval, a revoked key never moves funds again, and the policy never changes behind the owner's back. Slither runs in CI. See docs/security.md for the threat model.

Deployments. See docs/deployments.md.

Repository layout

contracts/        Foundry project: PurserAccount, factory, tests, deploy and demo scripts

packages/sdk/ TypeScript client on viem: build, sign and send user operations, read state packages/server/ MCP server (HTTP and stdio), approvals API, serves the console apps/console/ React console for the owner scripts/ local-up.sh, deploy-testnet.sh, demo.ts, demo-entrypoint.sh Dockerfile.demo all-in-one demo image (chain, contracts, server, console) docs/ architecture, security, MCP clients, deployments

Development

npm install

cd contracts && forge test # unit, fuzz and invariant tests cd .. && npm test # TypeScript unit tests ./scripts/local-up.sh # Anvil + deploy + demo account, writes .env.local npm run build -w @purser/console npm run server # console and MCP on http://localhost:8787 npm run demo # the end-to-end story; CI runs it too

No Foundry installed? contracts/forge.sh forge test runs it from the official Docker image, and scripts/local-up.sh falls back to Docker on its own.

To deploy to Base Sepolia or Sepolia, see docs/deployments.md: one script, and a faucet drip of under 0.01 ETH covers everything.

Status

Early, version 0.1.2. Not audited. Use testnets, and do not put real funds in an account you have not reviewed yourself. What is planned next is in ROADMAP.md, and issues labelled good first issue are a good place to start contributing.

Contributing

See CONTRIBUTING.md. Security reports go through private advisories, not issues.

License

MIT

Pregunta a PopNx