Call before paying any x402 seller: 402/OFAC precheck, verify, approval, ledger
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a human approval request (Approval Relay). Show approveUrl / approve_url to your human, then poll approval_status. Served by Approval Relay at relay.moneytools.dev (0.005 USDC, 3 free/day; signed Ed25519 receipt). Old field names (title, approveUrl, id, agentToken, proof) are still accepted and returned as aliases. approve.moneytools.dev stays available for existing HTTP/MCP callers.
Optional context folded into action_summary
Risk level shown to the approver (default med)
Optional context folded into action_summary
Alias of action_summary (legacy approval_request field)
Legacy; notify.webhook is used as callback_url if set
Optional extra context folded into action_summary
Optional context folded into action_summary
Optional label shown to the approver
Legacy alias of expires_in_s (minutes, 5-1440)
Optional https callback that receives the signed receipt
Seconds until expiry (default 3600)
Plain-language description of the action (preferred)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http payment-safety https://mcp.moneytools.dev/mcp/payment-safety
Create a human approval request (Approval Relay). Show approveUrl / approve_url to your human, then poll approval_status. Served by Approval Relay at relay.moneytools.dev (0.005 USDC, 3 free/day; signed Ed25519 receipt). Old field names (title, approveUrl, id, agentToken, proof) are still accepted and returned as aliases. approve.moneytools.dev stays available for existing HTTP/MCP callers.
| Argument | Type | Description |
|---|---|---|
| host | string | Optional context folded into action_summary |
| risk | string | Risk level shown to the approver (default med) |
| payTo | string | Optional context folded into action_summary |
| title | string | Alias of action_summary (legacy approval_request field) |
| notify | object | Legacy; notify.webhook is used as callback_url if set |
| details | string | Optional extra context folded into action_summary |
| network | string | |
| amountUsd | number | Optional context folded into action_summary |
| requester | string | Optional label shown to the approver |
| ttlMinutes | number | Legacy alias of expires_in_s (minutes, 5-1440) |
| callback_url | string | Optional https callback that receives the signed receipt |
| expires_in_s | integer | Seconds until expiry (default 3600) |
| action_summary | string | Plain-language description of the action (preferred) |
{
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "Optional context folded into action_summary"
},
"risk": {
"enum": [
"low",
"med",
"high"
],
"type": "string",
"description": "Risk level shown to the approver (default med)"
},
"payTo": {
"type": "string",
"description": "Optional context folded into action_summary"
},
"title": {
"type": "string",
"description": "Alias of action_summary (legacy approval_request field)"
},
"notify": {
"type": "object",
"description": "Legacy; notify.webhook is used as callback_url if set"
},
"details": {
"type": "string",
"description": "Optional extra context folded into action_summary"
},
"network": {
"type": "string"
},
"amountUsd": {
"type": "number",
"description": "Optional context folded into action_summary"
},
"requester": {
"type": "string",
"description": "Optional label shown to the approver"
},
"ttlMinutes": {
"type": "number",
"description": "Legacy alias of expires_in_s (minutes, 5-1440)"
},
"callback_url": {
"type": "string",
"description": "Optional https callback that receives the signed receipt"
},
"expires_in_s": {
"type": "integer",
"maximum": 86400,
"minimum": 60,
"description": "Seconds until expiry (default 3600)"
},
"action_summary": {
"type": "string",
"description": "Plain-language description of the action (preferred)"
}
}
}Check whether the human approved, denied or let the request expire (free). Approved results include receipt_jws (also aliased as proof).
| Argument | Type | Description |
|---|---|---|
| id | string | |
| wait | integer | Optional long-poll seconds for get/status (Relay max 25 without SSE) |
| agentToken | string | Legacy; ignored for Relay requests (apr-… ids) |
| approval_id | string | |
| wait_seconds | integer | Optional long-poll seconds for get/status (Relay max 25 without SSE) |
{
"type": "object",
"required": [],
"properties": {
"id": {
"type": "string"
},
"wait": {
"type": "integer",
"maximum": 25,
"minimum": 0,
"description": "Optional long-poll seconds for get/status (Relay max 25 without SSE)"
},
"agentToken": {
"type": "string",
"description": "Legacy; ignored for Relay requests (apr-… ids)"
},
"approval_id": {
"type": "string"
},
"wait_seconds": {
"type": "integer",
"maximum": 25,
"minimum": 0,
"description": "Optional long-poll seconds for get/status (Relay max 25 without SSE)"
}
}
}Verify a Relay receipt_jws (free). The legacy 'proof' argument is also accepted.
| Argument | Type | Description |
|---|---|---|
| proof | string | |
| receipt_jws | string |
{
"type": "object",
"properties": {
"proof": {
"type": "string"
},
"receipt_jws": {
"type": "string"
}
}
}Totals, by supplier, by day and exceptions for payments relayed by the MoneyTools Pay Gateway for this API key (free; needs X-API-Key). Currency default USD. [served by ledger.moneytools.dev]
| Argument | Type | Description |
|---|---|---|
| days | number | |
| month | string | YYYY-MM |
| currency | string |
{
"type": "object",
"properties": {
"days": {
"type": "number"
},
"month": {
"type": "string",
"description": "YYYY-MM"
},
"currency": {
"type": "string"
}
}
}Before paying an x402 endpoint: fetch it, validate its HTTP 402 payment requirements (scheme, network, payTo, amount, asset) and screen payTo against the OFAC SDN crypto-address list. Returns verdict ok|warn|block|not_402. Free to try: 20 MCP calls/day per client, no API key or wallet needed (beyond that: prepaid credits via header X-API-Key, see server instructions).
| Argument | Type | Description |
|---|---|---|
| url* | string | x402 endpoint you plan to pay |
| method | string | HTTP method the endpoint expects; default GET |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"examples": [
"https://x402.payai.network/api/base/paid-content"
],
"description": "x402 endpoint you plan to pay"
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method the endpoint expects; default GET"
}
}
}Verify an on-chain USDC settlement: tx hash on network (base, base-sepolia, polygon, arbitrum, avalanche, bsc) paid amount to payTo. Returns verdict valid|invalid|pending|not_found. Free to try: 20 MCP calls/day per client, no API key or wallet needed (beyond that: prepaid credits via header X-API-Key, see server instructions).
| Argument | Type | Description |
|---|---|---|
| from | string | expected payer 0x address (optional) |
| match | string | exact (default) or atLeast |
| payTo* | string | expected recipient 0x address |
| amount* | string | decimal USDC, e.g. 0.01 |
| txHash* | string | 0x transaction hash (66 chars) |
| network | string | base | base-sepolia | polygon | arbitrum | avalanche | bsc |
| minConfirmations | integer | default 2 |
{
"type": "object",
"required": [
"txHash",
"payTo",
"amount"
],
"properties": {
"from": {
"type": "string",
"description": "expected payer 0x address (optional)"
},
"match": {
"enum": [
"exact",
"atLeast"
],
"type": "string",
"description": "exact (default) or atLeast"
},
"payTo": {
"type": "string",
"description": "expected recipient 0x address"
},
"amount": {
"type": "string",
"description": "decimal USDC, e.g. 0.01"
},
"txHash": {
"type": "string",
"description": "0x transaction hash (66 chars)"
},
"network": {
"type": "string",
"default": "base",
"description": "base | base-sepolia | polygon | arbitrum | avalanche | bsc"
},
"minConfirmations": {
"type": "integer",
"description": "default 2"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 12, 2026.