hermes-mpp makes Hermes Agent HTTPX
traffic payment-aware. It answers supported MPP 402 challenges with a Tempo
charge and retries the request through the same client.
Maintained by Tempo, the team behind MPP.
Important
This is experimental v0 software. It can authorize real payments automatically with the configured Tempo key. Use a dedicated, low-balance key and restrict allowed origins.
v0 targets Hermes Agent 0.19, HTTPX 0.27–0.28, and pympp 0.10.
After installing Hermes, run:
uvx hermes-mpp install --allowed-origin https://mpp.devThe installer adds and enables the plugin, then prompts for a Tempo private key;
leave it blank to generate one. It stores the key in ~/.hermes/.env with
owner-only permissions, saves each --allowed-origin, and prints the address to
fund.
The installer discovers standard, root, and PATH-based Hermes installations.
For a custom environment, run uvx hermes-mpp install --hermes-python PATH or
set HERMES_PYTHON.
Generated wallets start empty. For testnet resources, fund the printed address with the Tempo faucet.
On first install, omitting --allowed-origin allows any origin presenting a valid
MPP challenge to charge the wallet. Repeat the option to allow multiple exact
origins. Reinstalling without it preserves the allowlist; passing it replaces the
list.
Paths and wildcards are rejected. Use plaintext http:// only for trusted local
development; an on-path attacker can inject a payment challenge.
Hermes 0.21.3 or later can install the Python package as a directory plugin, using the runtime dependencies declared in its manifest:
hermes plugins install 'https://github.com/tempoxyz/hermes-mpp#src/hermes_mpp' --no-enableIf migrating from the uvx installation above, run uvx hermes-mpp uninstall
first. This preserves the wallet configuration and avoids loading a second copy
through the pip entry point.
Before enabling, configure TEMPO_PRIVATE_KEY and MPP_ALLOWED_ORIGINS in the
active Hermes profile's .env file (~/.hermes/.env for the default profile).
Use an existing dedicated, low-balance wallet and keep that file owner-readable
only. Enter the key locally, never in an agent conversation. For example, set
MPP_ALLOWED_ORIGINS=https://mpp.dev to allow only that origin. Omitting the
allowlist permits any origin with a supported MPP challenge to charge the wallet.
hermes plugins enable mppRestart Hermes after changing the wallet or allowlist. Without a configured key, the plugin leaves HTTPX untouched and its payment tool is unavailable.
The proposed Plugin Catalog entry is named hermes-mpp; once admitted, install
it with hermes plugins install hermes-mpp --no-enable and follow the same
configuration steps. Catalog installations use a reviewed commit and update via
hermes plugins update mpp. Do not run the uvx installer to update a catalog
installation, because that installs a separate pip distribution.
Ask Hermes for the resource normally:
hermes chat -q "Make a request to https://mpp.dev/api/ping/paid"The model gets one generic mpp_fetch tool for arbitrary HTTP APIs. Payment is
not a separate tool call: it and every other in-process HTTPX client handle
supported MPP challenges automatically.
- Existing and future sync and async clients retain their transport, pool,
cookies, hooks, redirects, extensions, and streaming behavior. Response hooks
observe the final logical response rather than the internal
402. - Free responses pass through. Malformed, unsupported, and disallowed
challenges remain ordinary
402responses. - A paid request is retried at most once. Distinct payments are serialized; equivalent, repeated, and uncertain attempts fail closed.
mpp_fetchblocks private-network redirects, hides sensitive response headers, and truncates large bodies.- Only HTTPX traffic in the Hermes process is instrumented. Shell commands and
Requests, aiohttp, or urllib3 are not; use
mpp_fetchfor arbitrary HTTP.
If a payment outcome is uncertain, verify the wallet transaction before restarting Hermes; later payments remain blocked in that process.
hermes plugins list
uvx --refresh hermes-mpp install # update
uvx hermes-mpp uninstallUninstalling leaves the private key in Hermes's .env file.
uv sync
uv run pytest
uv run ruff check .CI tests Python 3.11–3.13 and HTTPX 0.27–0.28.
Report vulnerabilities privately as described in SECURITY.md.
MIT