Allows an AI client to perform payment preflight checks, monitor outstanding authorizations, and evaluate HIP-3 trade orders against local policies.
Also known as base-buzz/paystage, mcp, @paystage/mcp
- Stars
- 5
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- 0.3.2
- Last commit
- Nov 14, 2026
- License
- MIT
What is PayStage MCP?
PayStage allows an AI client to perform payment preflight checks, monitor outstanding authorizations, and evaluate HIP-3 trade orders against local policies.
Summary generated from the project's README
About PayStage MCP server
Managing financial safety and trade compliance from within an AI agent is what PayStage enables. Developers can use this umbrella MCP server to perform preflight checks on x402 payments and HIP-3 trade orders against local spending rules. It functions as a local policy gate that provides verdicts such as allow, review, or do not trade without actually placing orders or recommending specific trades.
Users set up the server via npx or npm, configuring it through a stdio connection. The server can be customized using the PAYSTAGE_POLICY_PATH environment variable to point to a local policy.json file for spending rules, or PAYSTAGE_RPC_URL to override the Base RPC URL. It provides specific tools to list outstanding ERC-20, Permit2, and EIP-3009 authorizations, as well as tools to flag authorizations that have been authorized but never settled.
Beyond simple checks, the system supports verifying signed receipts to ensure decisions have not been altered. This makes it suitable for developers building agents that require strict adherence to local policy files and spending patterns.
What you can do with it
- 1Validate proposed paymentsAsk the AI to check if a proposed x402 payment complies with your local spending policy before signing.
- 2Monitor pending authorizationsHave the agent identify outstanding ERC-20 or Permit2 authorizations that require attention.
- 3Audit trade ordersUse the agent to evaluate HIP-3 trade orders against a specific TradePolicy to decide if they should proceed.
- 4Verify decision integrityCheck a signed receipt to confirm that a policy verdict is authentic and has not been tampered with.
Written from the project's README. Every use case is checked against a quote from it.
How to install PayStage MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall PayStage MCP in Claude Code
$ claude mcp add mcp -- npx -y @paystage/mcpInstall PayStage MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@paystage/mcp"
]
}
}
}Install PayStage MCP in VS Code
.vscode/mcp.json
{
"servers": {
"mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@paystage/mcp"
]
}
}
}Install PayStage MCP in VS Code CLI
$ code --add-mcp '{"name":"mcp","type":"stdio","command":"npx","args":["-y","@paystage/mcp"]}'Install PayStage MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@paystage/mcp"
]
}
}
}Install PayStage MCP in Codex
$ codex mcp add mcp -- npx -y @paystage/mcpInstall PayStage MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.mcp] command = "npx" args = ["-y", "@paystage/mcp"]
Install PayStage MCP in Gemini CLI
$ gemini mcp add -s user mcp npx -- -y @paystage/mcpInstall PayStage MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@paystage/mcp"
]
}
}
}Configuration
PAYSTAGE_POLICY_PATHPath to policy.json spending rules
PAYSTAGE_RPC_URLBase RPC URL override
| Name | Description | |
|---|---|---|
| PAYSTAGE_POLICY_PATH | Path to policy.json spending rules | |
| PAYSTAGE_RPC_URL | Base RPC URL override |
Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHub@paystage/mcp
PayStage umbrella MCP server: payment preflight, auth watch, HIP-3 trade preflight, and velocity checks.
Not financial advice. The trade preflight tool is a local policy gate only — it does not place orders or recommend trades.
Published on npm as @paystage/mcp — see the npm page for the current version rather than a number here that can go stale.
What a valid receipt means
paystage-verify returning exit 0 means the key it verified against signed this receipt
and it has not been altered. That is all it means — and which key that was matters:
key_source: "published"→ PayStage's published key: the issuer signed it.key_source: "supplied"(you passed--keyor--key-url) → the key you named signed it, which is a weaker claim and not evidence about PayStage at all. Exit 0 on that path says nothing more than that the holder of that key produced the receipt.
It does not mean the payment happened — settlement is a separate on-chain event. It does not mean the verdict was correct — a receipt records a decision, not the soundness of the policy behind it. And it does not identify the caller; no caller identity is bound into the payload, by design.
Two narrower points a careful reader should know:
key_sourcetells you where the verifying key came from:published(PayStage's endpoint) orsupplied(someone passed--key). A receipt verified against a supplied key proves only that the holder of that key signed it.- A receipt with
signed: falseis still useful: the request and policy digests are checkable, so "over these inputs" survives even when provenance does not. --max-ageis your policy, not the issuer's. Nothing in the signed payload says how long a verdict is meant to hold, so a freshness bound is set by the verifier. If "this verdict is good for 24 hours" ever becomes the issuer's promise it has to be signed, and that is a format change.
Install
npx -y -p @paystage/mcp paystage-mcp
The server waits silently for an agent app to connect. That's normal; press Ctrl+C to exit. To try the tools without an app, run npx @modelcontextprotocol/inspector npx -y -p @paystage/mcp paystage-mcp.
Or:
npm install @paystage/mcp
The package exposes a stdio MCP server (bin: paystage-mcp).
MCP configuration
{
"mcpServers": {
"paystage": {
"command": "npx",
"args": ["-y", "-p", "@paystage/mcp", "paystage-mcp"],
"env": {
"PAYSTAGE_POLICY_PATH": "./policy.json"
}
}
}
}
Environment variables (all optional):
PAYSTAGE_POLICY_PATH— path topolicy.jsonspending rulesPAYSTAGE_RPC_URL— Base RPC URL override
Tools
evaluate_mcp_payment — Available now
Evaluates a proposed x402 payment against a local policy file and returns a verdict before the agent signs anything.
list_outstanding_auths — Available now
Lists outstanding ERC-20, Permit2, and EIP-3009 authorizations.
evaluate_outstanding_auths — Available now
Flags outstanding authorizations that need attention (e.g. authorized but never settled).
evaluate_hip3_trade — Available now
Evaluates a proposed HIP-3 / trade.xyz order against a local TradePolicy and returns a
decision: allow | review | do_not_trade.
Backed by @paystage/trade-preflight
(published separately), which can also be run standalone:
npx -y @paystage/trade-preflight
The policy is passed as a tool argument; no extra environment variables are required for this tool.
Packages
| Package | Version | Purpose |
|---|---|---|
@paystage/mcp |
Umbrella server (5 tools) | |
@paystage/preflight |
x402 payment preflight | |
@paystage/auth-watch |
Outstanding-auth tools | |
@paystage/trade-preflight |
HIP-3 / trade.xyz trade preflight | |
@paystage/velocity |
Rate / spend-pattern checks | |
@paystage/policy |
Shared policy schema + loader |
Verify a receipt
Every verdict can carry a signed receipt. paystage-verify checks one without trusting
us — it fetches the published key and verifies the signature over the canonical payload.
npx -y -p @paystage/mcp paystage-verify receipt.json
cat receipt.json | npx -y -p @paystage/mcp paystage-verify -
Exit codes are distinct on purpose:
| Code | Meaning |
|---|---|
| 0 | signature matches the payload |
| 1 | invalid — altered, or signed by a different key |
| 2 | unsigned — a record of the decision, with no proof of who made it |
| 3 | unverifiable — the key could not be fetched, or an input file could not be read, so nothing can be checked |
| 4 | inputs-mismatch — the receipt is genuine but does not cover the --request/--policy you supplied |
| 5 | stale — the receipt is genuine but older than --max-age allows |
"Invalid" and "could not check" are different facts and must not collapse into one
failure. --key <file> verifies against a local JWK for point-in-time checks.
Supply chain and access
This is the umbrella, so its install tree is wider than any single tool and Socket flags it accordingly. What it actually contains:
| Flag | Where it comes from |
|---|---|
| Network access, URL strings | @paystage/auth-watch (Base RPC reads) and @paystage/trade-preflight (one Hyperliquid info query). |
| Filesystem access | @paystage/policy reading your policy file. |
| Environment variable access | PAYSTAGE_POLICY_PATH, PAYSTAGE_RPC_URL. |
| "AI-detected code anomaly" | The official @modelcontextprotocol/server SDK's bundled JSON-schema validator, not PayStage code. |
The umbrella itself is ~16 KB with no network, no filesystem and no eval — the
capability lives in the dependencies, because that is what the tools are for.
Install a narrower surface if you only need part of it: @paystage/preflight and
@paystage/policy make no network calls at all.
Full table: SECURITY.md.
Links
-
Verify receipts:
npx -y -p @paystage/mcp paystage-verify <receipt.json> -
Website: paystage.xyz
-
HIP-3 context: docs.trade.xyz
-
Source: github.com/base-buzz/paystage
License
MIT
PayStage MCP questions
How do I add PayStage MCP to Claude Code?
Run claude mcp add mcp -- npx -y @paystage/mcp in your terminal. Add --scope user to make it available in every project.
How do I add PayStage MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
Does the trade preflight tool place actual trades?
No, the tool acts only as a local policy gate and does not place orders or provide trade recommendations.
How can I verify a decision receipt?
You can use the paystage-verify command to check a signed receipt against a published key to ensure it hasn't been altered.