presign-guard
Server Details
Safe to sign? EVM, Solana, XRPL, Algorand txs, permits, tokens; OFAC wallet screen: green/orange/red
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Fizzl13/presign-guard
- GitHub Stars
- 1
TDQS
Scored across 7 tools
Each tool targets a distinct resource and depth: presign checks (quick/full/explain), token checks (quick/full), wallet approvals, and feedback. The apparent overlaps are intentional free-vs-paid tiers with explicit cross-references, so an agent can reliably pick the right one.
All names use snake_case and follow a domain-prefix pattern (presign_*, token_*, wallet_*), making the set highly readable. Minor deviations: the standalone 'feedback' tool and slightly inconsistent modifier ordering (presign_quick_check vs presign_check_explain).
Seven tools is well-scoped for a pre-signature and token security service, covering the core surfaces without bloat. Each tool earns its place, and the free/paid tiering is clearly delineated.
The surface covers EVM and XRPL presign checks, EVM/Solana token verdicts, EVM wallet approval audits, and a feedback channel. Minor gaps remain (NFT approvals explicitly excluded, no Solana wallet approval audit, no XRPL token verdict), but agents can work around them.
Available Tools
8 toolsfeedbackSend feedback (free)Inspect
Report a bug, a missing feature or anything else about this service, in a structured way. Free. A person reads every report; nothing is run or changed automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | bug, feature (something missing) or other | |
| contact | No | Optional: how to reach you about it | |
| message | Yes | What happened or what you need | |
| endpoint | No | Optional: the route or tool it is about, e.g. /v1/token |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Report id, to refer to it later |
| note | No | |
| type | No | |
| service | No | |
| received | Yes | true: a person will read it |
presign_checkPre-sign risk check ($0.01 via x402)Read-onlyInspect
Paid ($0.01 USDC via x402 on Base or Solana): call this before you sign. Send the transaction, token approval or EIP-712 signature (Permit, Permit2, EIP-3009 x402 payment, Seaport) your agent is about to sign; get back green, orange or red with reason codes: who gets access, whether the spender or recipient is flagged, sanctioned (OFAC SDN) or unverified, unlimited allowances, and the token itself (honeypot, fake look-alike, high tax). On Solana (type solana, the base64 wire transaction): every instruction decoded and the transaction simulated (token account takeovers, System Assign, unlimited delegates, durable nonces, hidden owner or delegate changes). On the XRP Ledger (type xrpl, the unsigned tx JSON): account takeovers (SetRegularKey, SignerListSet, disabling the master key), fake RLUSD, partial payments, missing destination tags, trust-line and issuer risks, and DEX offers far below market. On Algorand (type algorand, base64 msgpack transaction or group in transactions): rekeys, closing the account or an asset to someone else, clawbacks, fake USDC, app update/delete/clear, simulated. Only proceed on green; on orange ask your user; never sign on red. Same as POST /v1/check. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | transaction: the target contract | |
| tx | No | xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …) | |
| data | No | transaction: 0x-prefixed calldata | |
| from | No | transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike) | |
| type | Yes | What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions | |
| x402 | No | optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain | |
| token | No | approval: the token contract | |
| value | No | transaction: native value in wei | |
| amount | No | approval: amount in base units (0 = revoke) | |
| intent | No | optional: what you are trying to do, in one sentence (e.g. "swap 10 USDC for ETH on Uniswap"); orange INTENT_MISMATCH when signing would do more or something else | |
| method | No | message: how it is signed (default personal_sign); eth_sign is always red | |
| origin | No | optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange | |
| chainId | No | EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message | |
| message | No | message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange | |
| network | No | xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet) | |
| spender | No | approval: who gets the allowance | |
| typedData | No | signature: the exact eth_signTypedData_v4 payload (Permit, Permit2, EIP-3009 x402 payment, Seaport) | |
| transaction | No | solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated | |
| transactions | No | algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked |
Output Schema
| Name | Required | Description |
|---|---|---|
| accepts | No | Only on an unpaid call: the x402 payment options |
| reasons | No | Why the verdict is what it is |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) |
| version | No |
presign_check_explainPre-sign risk check with explanation ($0.03 via x402)Read-onlyInspect
Paid ($0.03 USDC via x402 on Base or Solana): the same verdict and reason codes as presign_check, plus a 3 to 5 sentence plain-language explanation a person can read before approving (lang en or nl). Same as POST /v1/check/explain. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | transaction: the target contract | |
| tx | No | xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …) | |
| data | No | transaction: 0x-prefixed calldata | |
| from | No | transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike) | |
| lang | No | Language of the explanation (default en) | |
| type | Yes | What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions | |
| x402 | No | optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain | |
| token | No | approval: the token contract | |
| value | No | transaction: native value in wei | |
| amount | No | approval: amount in base units (0 = revoke) | |
| intent | No | optional: what you are trying to do, in one sentence (e.g. "swap 10 USDC for ETH on Uniswap"); orange INTENT_MISMATCH when signing would do more or something else | |
| method | No | message: how it is signed (default personal_sign); eth_sign is always red | |
| origin | No | optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange | |
| chainId | No | EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message | |
| message | No | message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange | |
| network | No | xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet) | |
| spender | No | approval: who gets the allowance | |
| typedData | No | signature: the exact eth_signTypedData_v4 payload (Permit, Permit2, EIP-3009 x402 payment, Seaport) | |
| transaction | No | solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated | |
| transactions | No | algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked |
Output Schema
| Name | Required | Description |
|---|---|---|
| accepts | No | Only on an unpaid call: the x402 payment options |
| reasons | No | Why the verdict is what it is |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) |
| version | No | |
| explanation | No | Plain-language explanation for a person |
presign_quick_checkQuick pre-sign verdict (free)Read-onlyInspect
Free: the green/orange/red verdict only, for a transaction, token approval, EIP-712 signature, XRP Ledger transaction (type xrpl) or Algorand transaction (type algorand) your agent is about to sign. Limited to 10 calls per hour. For the reason codes and details use presign_check ($0.01); for a plain-language explanation presign_check_explain ($0.03).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | transaction: the target contract | |
| tx | No | xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …) | |
| data | No | transaction: 0x-prefixed calldata | |
| from | No | transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike) | |
| type | Yes | What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions | |
| x402 | No | optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain | |
| token | No | approval: the token contract | |
| value | No | transaction: native value in wei | |
| amount | No | approval: amount in base units (0 = revoke) | |
| intent | No | optional: what you are trying to do, in one sentence (e.g. "swap 10 USDC for ETH on Uniswap"); orange INTENT_MISMATCH when signing would do more or something else | |
| method | No | message: how it is signed (default personal_sign); eth_sign is always red | |
| origin | No | optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange | |
| chainId | No | EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message | |
| message | No | message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange | |
| network | No | xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet) | |
| spender | No | approval: who gets the allowance | |
| typedData | No | signature: the exact eth_signTypedData_v4 payload (Permit, Permit2, EIP-3009 x402 payment, Seaport) | |
| transaction | No | solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated | |
| transactions | No | algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| verdict | Yes | green: go ahead; orange: ask the user; red: do not sign or buy |
screen_walletWallet sanctions screen ($0.01 via x402)ARead-onlyInspect
Paid ($0.01 USDC via x402 on Base or Solana): call this before your agent pays an address, or before accepting money from one. Send any chain's wallet address (EVM 0x..., Solana, Tron, Bitcoin, XRP Ledger, Algorand, or another currency OFAC lists). Get back green/orange/red: red SANCTIONED_ADDRESS with the SDN entry (name, programs, currency) when the address is on the OFAC SDN list, red or orange when GoPlus reports theft, phishing, laundering or mixer use (EVM). Never pay or accept funds on red. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address to screen, any chain: EVM (0x...), Solana, Tron, Bitcoin, XRP Ledger, Algorand, or another currency OFAC lists |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | No | SAFE, CAUTION, RISKY or AVOID |
| accepts | No | Only on an unpaid call: the x402 payment options |
| reasons | No | Why the verdict is what it is |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) |
| version | No | |
| one_liner | No | One-line summary |
| sanctions | No | OFAC SDN result: listed, matches (name, programs, currency), published |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/openWorld, yet the description adds substantial behavioral context: the $0.01 USDC x402 cost and chains, the green/orange/red verdict scale, the data sources (OFAC SDN, GoPlus for EVM only), the SANCTIONED_ADDRESS field contents, and the EIP-191 signed receipt bound to arguments. That is real disclosure well beyond the safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with cost, then the trigger condition, then the verdict semantics — a logical order with no filler. It is dense and long-ish, but nearly every clause (cost, chains, verdict tiers, receipt) carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, single-parameter screening tool with an output schema, the description supplies everything needed to decide and invoke: cost, chains, verdict meanings, the action rule on red, and receipt provenance. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single address parameter, and the description's chain list (EVM, Solana, Tron, Bitcoin, XRP Ledger, Algorand, other OFAC currencies) duplicates what the schema already says. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource — screen a wallet address for OFAC sanctions and risk — and frames the moment it matters ('before your agent pays an address, or before accepting money from one'). It is clearly a wallet-level screener distinct from the presign_check and token_verdict siblings that operate on transactions or tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states clearly when to call it (pre-payment and pre-receipt) and gives an action rule ('Never pay or accept funds on red'). It does not name any sibling or explain when to prefer presign_check / wallet_approvals instead, so the routing guidance stops short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token_quick_verdictQuick token verdict (free)Read-onlyInspect
Free: the green/orange/red verdict and grade only, for a Solana or EVM token your agent is about to buy, hold or accept. Limited to 10 free calls per hour (shared with presign_quick_check). For the reasons, one-line summary and market data use token_verdict ($0.01).
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain the token lives on | |
| address | Yes | Solana mint address (base58), EVM token contract (0x...), XRPL token as CURRENCY.rIssuer, or Algorand asset id (e.g. 31566704) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| grade | No | SAFE, CAUTION, RISKY or AVOID |
| verdict | Yes | green: go ahead; orange: ask the user; red: do not sign or buy |
token_verdictToken verdict ($0.01 via x402)Read-onlyInspect
Paid ($0.01 USDC via x402 on Base or Solana): call this before your agent buys, holds or accepts a token. Send the chain (solana, base, ethereum, arbitrum, optimism, polygon, bsc, xrpl, algorand) and the token address, mint, CURRENCY.rIssuer or Algorand asset id; get back green/orange/red, a grade (SAFE, CAUTION, RISKY, AVOID), reason codes (mint or freeze authority still active, honeypot, tax or transfer fee, LP not locked, low liquidity, new token, concentrated holders, rugged), a one-line summary, and market data (price, liquidity, market cap, 24h volume, age). Same as GET /v1/token. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain the token lives on | |
| address | Yes | Solana mint address (base58), EVM token contract (0x...), XRPL token as CURRENCY.rIssuer, or Algorand asset id (e.g. 31566704) |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | No | SAFE, CAUTION, RISKY or AVOID |
| accepts | No | Only on an unpaid call: the x402 payment options |
| reasons | No | Why the verdict is what it is |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) |
| version | No | |
| one_liner | No | One-line summary |
wallet_approvalsWallet approval audit ($0.02 via x402)Read-onlyInspect
Paid ($0.02 USDC via x402 on Base or Solana): audit the open token approvals of a wallet on an EVM chain (base, ethereum, arbitrum, optimism, polygon, bsc) or on Solana, for example your agent's own wallet as a periodic check. Get back green/orange/red, a grade, a one-line summary and every approval with its spender. EVM, every ERC-20 allowance: flagged malicious (red), a plain wallet, on a doubt list, an unverified contract or an unlimited allowance to a spender not on the GoPlus trust list (orange), with a revoke.cash link. Solana, every SPL token delegation (Approve): a delegate on the OFAC SDN list (red), a delegate that is a plain wallet or an unlimited delegation (orange), with the token account to revoke on; Token-2022 tokens with a permanent delegate are listed too. NFT approvals are not covered. Same as GET /v1/approvals. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain to audit: an EVM chain (ERC-20 allowances) or solana (SPL token delegations) | |
| address | Yes | Wallet address (0x... on EVM, base58 on Solana) |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | No | SAFE, CAUTION, RISKY or AVOID |
| accepts | No | Only on an unpaid call: the x402 payment options |
| reasons | No | Why the verdict is what it is |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) |
| version | No | |
| approvals | No | Every open ERC-20 allowance (EVM) or SPL token delegation (Solana) with its spender |
| one_liner | No | One-line summary |
| revokeUrl | No | revoke.cash link for this wallet (EVM; null on Solana) |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
wallet_approvals5 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Wallet address (0x...)"New value: +"Wallet address (0x... on EVM, base58 on Solana)" - changed
Input schema / properties / chain / descriptionPrevious value: -"EVM chain to audit"New value: +"Chain to audit: an EVM chain (ERC-20 allowances) or solana (SPL token delegations)" - changed
Input schema / properties / chain / enumPrevious value: -[ - "base", - "ethereum", - "arbitrum", - "optimism", - "polygon", - "bsc" -]New value: +[ + "base", + "ethereum", + "arbitrum", + "optimism", + "polygon", + "bsc", + "solana" +] - changed
Output schema / properties / approvals / descriptionPrevious value: -"Every open ERC-20 allowance with its spender"New value: +"Every open ERC-20 allowance (EVM) or SPL token delegation (Solana) with its spender" - changed
Output schema / properties / revokeUrl / descriptionPrevious value: -"revoke.cash link for this wallet"New value: +"revoke.cash link for this wallet (EVM; null on Solana)"
5 tool updates
- Changed
presign_check1 field changed- changed
Output schema / properties / reasons / anyOfPrevious value: -[ - { - "description": "Why the verdict is what it is", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", - "type": "string" - }, - "severity": { - "description": "info, warn or critical", - "type": "string" - }, - "subject": { - "description": "The address or item the reason is about", - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about (null or absent when it is about the whole request)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
presign_check_explain1 field changed- changed
Output schema / properties / reasons / anyOfPrevious value: -[ - { - "description": "Why the verdict is what it is", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", - "type": "string" - }, - "severity": { - "description": "info, warn or critical", - "type": "string" - }, - "subject": { - "description": "The address or item the reason is about", - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about (null or absent when it is about the whole request)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
screen_wallet1 field changed- changed
Output schema / properties / reasons / anyOfPrevious value: -[ - { - "description": "Why the verdict is what it is", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", - "type": "string" - }, - "severity": { - "description": "info, warn or critical", - "type": "string" - }, - "subject": { - "description": "The address or item the reason is about", - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about (null or absent when it is about the whole request)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
token_verdict1 field changed- changed
Output schema / properties / reasons / anyOfPrevious value: -[ - { - "description": "Why the verdict is what it is", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", - "type": "string" - }, - "severity": { - "description": "info, warn or critical", - "type": "string" - }, - "subject": { - "description": "The address or item the reason is about", - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about (null or absent when it is about the whole request)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
wallet_approvals1 field changed- changed
Output schema / properties / reasons / anyOfPrevious value: -[ - { - "description": "Why the verdict is what it is", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", - "type": "string" - }, - "severity": { - "description": "info, warn or critical", - "type": "string" - }, - "subject": { - "description": "The address or item the reason is about", - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about (null or absent when it is about the whole request)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
1 tool update
- Added
screen_wallet
2 tool updates
- Changed
token_quick_verdict2 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Solana mint address (base58) or EVM token contract (0x...)"New value: +"Solana mint address (base58), EVM token contract (0x...), XRPL token as CURRENCY.rIssuer, or Algorand asset id (e.g. 31566704)" - changed
Input schema / properties / chain / enumPrevious value: -[ - "solana", - "base", - "ethereum", - "arbitrum", - "optimism", - "polygon", - "bsc", - "xrpl" -]New value: +[ + "solana", + "base", + "ethereum", + "arbitrum", + "optimism", + "polygon", + "bsc", + "xrpl", + "algorand" +]
- Changed
token_verdict2 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Solana mint address (base58) or EVM token contract (0x...)"New value: +"Solana mint address (base58), EVM token contract (0x...), XRPL token as CURRENCY.rIssuer, or Algorand asset id (e.g. 31566704)" - changed
Input schema / properties / chain / enumPrevious value: -[ - "solana", - "base", - "ethereum", - "arbitrum", - "optimism", - "polygon", - "bsc", - "xrpl" -]New value: +[ + "solana", + "base", + "ethereum", + "arbitrum", + "optimism", + "polygon", + "bsc", + "xrpl", + "algorand" +]
3 tool updates
- Changed
presign_check5 fields changed- changed
Input schema / properties / transaction / descriptionPrevious value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)"New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated" - changed
Input schema / properties / transaction / maxLengthPrevious value: -2400New value: +12000 - added
Input schema / properties / transactionsAdded value: +{ + "description": "algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked", + "items": { + "maxLength": 12000, + "type": "string" + }, + "maxItems": 16, + "type": "array" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "message", - "solana", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl", + "algorand" +]
- Changed
presign_check_explain5 fields changed- changed
Input schema / properties / transaction / descriptionPrevious value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)"New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated" - changed
Input schema / properties / transaction / maxLengthPrevious value: -2400New value: +12000 - added
Input schema / properties / transactionsAdded value: +{ + "description": "algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked", + "items": { + "maxLength": 12000, + "type": "string" + }, + "maxItems": 16, + "type": "array" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "message", - "solana", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl", + "algorand" +]
- Changed
presign_quick_check5 fields changed- changed
Input schema / properties / transaction / descriptionPrevious value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)"New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated" - changed
Input schema / properties / transaction / maxLengthPrevious value: -2400New value: +12000 - added
Input schema / properties / transactionsAdded value: +{ + "description": "algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked", + "items": { + "maxLength": 12000, + "type": "string" + }, + "maxItems": 16, + "type": "array" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "message", - "solana", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl", + "algorand" +]
3 tool updates
- Changed
presign_check7 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message" - changed
Input schema / properties / from / descriptionPrevious value: -"transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)"New value: +"transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)" - added
Input schema / properties / messageAdded value: +{ + "description": "message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange", + "maxLength": 16384, + "type": "string" +} - added
Input schema / properties / methodAdded value: +{ + "description": "message: how it is signed (default personal_sign); eth_sign is always red", + "enum": [ + "personal_sign", + "eth_sign" + ], + "type": "string" +} - added
Input schema / properties / transactionAdded value: +{ + "description": "solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)", + "maxLength": 2400, + "type": "string" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl" +]
- Changed
presign_check_explain7 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message" - changed
Input schema / properties / from / descriptionPrevious value: -"transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)"New value: +"transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)" - added
Input schema / properties / messageAdded value: +{ + "description": "message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange", + "maxLength": 16384, + "type": "string" +} - added
Input schema / properties / methodAdded value: +{ + "description": "message: how it is signed (default personal_sign); eth_sign is always red", + "enum": [ + "personal_sign", + "eth_sign" + ], + "type": "string" +} - added
Input schema / properties / transactionAdded value: +{ + "description": "solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)", + "maxLength": 2400, + "type": "string" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl" +]
- Changed
presign_quick_check7 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message" - changed
Input schema / properties / from / descriptionPrevious value: -"transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)"New value: +"transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)" - added
Input schema / properties / messageAdded value: +{ + "description": "message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange", + "maxLength": 16384, + "type": "string" +} - added
Input schema / properties / methodAdded value: +{ + "description": "message: how it is signed (default personal_sign); eth_sign is always red", + "enum": [ + "personal_sign", + "eth_sign" + ], + "type": "string" +} - added
Input schema / properties / transactionAdded value: +{ + "description": "solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)", + "maxLength": 2400, + "type": "string" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature", - "xrpl" -]New value: +[ + "approval", + "transaction", + "signature", + "message", + "solana", + "xrpl" +]
3 tool updates
- Changed
presign_check2 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)", + "type": "string" +} - added
Input schema / properties / x402Added value: +{ + "additionalProperties": {}, + "description": "optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain", + "type": "object" +}
- Changed
presign_check_explain2 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)", + "type": "string" +} - added
Input schema / properties / x402Added value: +{ + "additionalProperties": {}, + "description": "optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain", + "type": "object" +}
- Changed
presign_quick_check2 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)", + "type": "string" +} - added
Input schema / properties / x402Added value: +{ + "additionalProperties": {}, + "description": "optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain", + "type": "object" +}
3 tool updates
- Changed
presign_check1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "optional: what you are trying to do, in one sentence (e.g. \"swap 10 USDC for ETH on Uniswap\"); orange INTENT_MISMATCH when signing would do more or something else", + "maxLength": 500, + "type": "string" +}
- Changed
presign_check_explain1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "optional: what you are trying to do, in one sentence (e.g. \"swap 10 USDC for ETH on Uniswap\"); orange INTENT_MISMATCH when signing would do more or something else", + "maxLength": 500, + "type": "string" +}
- Changed
presign_quick_check1 field changed- added
Input schema / properties / intentAdded value: +{ + "description": "optional: what you are trying to do, in one sentence (e.g. \"swap 10 USDC for ETH on Uniswap\"); orange INTENT_MISMATCH when signing would do more or something else", + "maxLength": 500, + "type": "string" +}
7 tool updates
- Changed
feedback1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "id": { + "description": "Report id, to refer to it later", + "type": "string" + }, + "note": { + "type": "string" + }, + "received": { + "description": "true: a person will read it", + "type": "boolean" + }, + "service": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "received", + "id" + ], + "type": "object" +}
- Changed
presign_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "accepts": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Only on an unpaid call: the x402 payment options" + }, + "reasons": { + "anyOf": [ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Why the verdict is what it is" + }, + "receipt": { + "anyOf": [ + { + "additionalProperties": {}, + "description": "Signed receipt (EIP-191) binding the verdict to your arguments", + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Signed receipt (EIP-191) binding the verdict to your arguments" + }, + "verdict": { + "anyOf": [ + { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
presign_check_explain1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "accepts": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Only on an unpaid call: the x402 payment options" + }, + "explanation": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "lang": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "lang", + "text" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Plain-language explanation for a person" + }, + "reasons": { + "anyOf": [ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Why the verdict is what it is" + }, + "receipt": { + "anyOf": [ + { + "additionalProperties": {}, + "description": "Signed receipt (EIP-191) binding the verdict to your arguments", + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Signed receipt (EIP-191) binding the verdict to your arguments" + }, + "verdict": { + "anyOf": [ + { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
presign_quick_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "verdict": { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + } + }, + "required": [ + "verdict" + ], + "type": "object" +}
- Changed
token_quick_verdict1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "grade": { + "description": "SAFE, CAUTION, RISKY or AVOID", + "type": "string" + }, + "note": { + "type": "string" + }, + "verdict": { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + } + }, + "required": [ + "verdict" + ], + "type": "object" +}
- Changed
token_verdict1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "accepts": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Only on an unpaid call: the x402 payment options" + }, + "grade": { + "description": "SAFE, CAUTION, RISKY or AVOID", + "type": [ + "string", + "null" + ] + }, + "one_liner": { + "description": "One-line summary", + "type": [ + "string", + "null" + ] + }, + "reasons": { + "anyOf": [ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Why the verdict is what it is" + }, + "receipt": { + "anyOf": [ + { + "additionalProperties": {}, + "description": "Signed receipt (EIP-191) binding the verdict to your arguments", + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Signed receipt (EIP-191) binding the verdict to your arguments" + }, + "verdict": { + "anyOf": [ + { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
wallet_approvals1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "accepts": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Only on an unpaid call: the x402 payment options" + }, + "approvals": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Every open ERC-20 allowance with its spender" + }, + "grade": { + "description": "SAFE, CAUTION, RISKY or AVOID", + "type": [ + "string", + "null" + ] + }, + "one_liner": { + "description": "One-line summary", + "type": [ + "string", + "null" + ] + }, + "reasons": { + "anyOf": [ + { + "description": "Why the verdict is what it is", + "items": { + "additionalProperties": true, + "properties": { + "code": { + "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT", + "type": "string" + }, + "severity": { + "description": "info, warn or critical", + "type": "string" + }, + "subject": { + "description": "The address or item the reason is about", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Why the verdict is what it is" + }, + "receipt": { + "anyOf": [ + { + "additionalProperties": {}, + "description": "Signed receipt (EIP-191) binding the verdict to your arguments", + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Signed receipt (EIP-191) binding the verdict to your arguments" + }, + "revokeUrl": { + "description": "revoke.cash link for this wallet", + "type": [ + "string", + "null" + ] + }, + "verdict": { + "anyOf": [ + { + "description": "green: go ahead; orange: ask the user; red: do not sign or buy", + "enum": [ + "green", + "orange", + "red" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
3 tool updates
- Changed
presign_check6 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)" - added
Input schema / properties / networkAdded value: +{ + "description": "xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet)", + "enum": [ + "xrpl:0", + "xrpl:1" + ], + "type": "string" +} - added
Input schema / properties / txAdded value: +{ + "additionalProperties": {}, + "description": "xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)", + "type": "object" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign"New value: +"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature" -]New value: +[ + "approval", + "transaction", + "signature", + "xrpl" +] - changed
Input schema / requiredPrevious value: -[ - "type", - "chainId" -]New value: +[ + "type" +]
- Changed
presign_check_explain6 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)" - added
Input schema / properties / networkAdded value: +{ + "description": "xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet)", + "enum": [ + "xrpl:0", + "xrpl:1" + ], + "type": "string" +} - added
Input schema / properties / txAdded value: +{ + "additionalProperties": {}, + "description": "xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)", + "type": "object" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign"New value: +"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature" -]New value: +[ + "approval", + "transaction", + "signature", + "xrpl" +] - changed
Input schema / requiredPrevious value: -[ - "type", - "chainId" -]New value: +[ + "type" +]
- Changed
presign_quick_check6 fields changed- changed
Input schema / properties / chainId / descriptionPrevious value: -"EVM chain id: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)" - added
Input schema / properties / networkAdded value: +{ + "description": "xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet)", + "enum": [ + "xrpl:0", + "xrpl:1" + ], + "type": "string" +} - added
Input schema / properties / txAdded value: +{ + "additionalProperties": {}, + "description": "xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)", + "type": "object" +} - changed
Input schema / properties / type / descriptionPrevious value: -"What the agent is about to sign"New value: +"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx" - changed
Input schema / properties / type / enumPrevious value: -[ - "approval", - "transaction", - "signature" -]New value: +[ + "approval", + "transaction", + "signature", + "xrpl" +] - changed
Input schema / requiredPrevious value: -[ - "type", - "chainId" -]New value: +[ + "type" +]
2 tool updates
- Changed
token_quick_verdict1 field changed- changed
Input schema / properties / chain / enumPrevious value: -[ - "solana", - "base", - "ethereum", - "arbitrum", - "optimism", - "polygon", - "bsc" -]New value: +[ + "solana", + "base", + "ethereum", + "arbitrum", + "optimism", + "polygon", + "bsc", + "xrpl" +]
- Changed
token_verdict1 field changed- changed
Input schema / properties / chain / enumPrevious value: -[ - "solana", - "base", - "ethereum", - "arbitrum", - "optimism", - "polygon", - "bsc" -]New value: +[ + "solana", + "base", + "ethereum", + "arbitrum", + "optimism", + "polygon", + "bsc", + "xrpl" +]
1 tool update
- Added
feedback
1 tool update
- Added
wallet_approvals
3 tool updates
- Changed
presign_check1 field changed- added
Input schema / properties / originAdded value: +{ + "description": "optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange", + "type": "string" +}
- Changed
presign_check_explain1 field changed- added
Input schema / properties / originAdded value: +{ + "description": "optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange", + "type": "string" +}
- Changed
presign_quick_check1 field changed- added
Input schema / properties / originAdded value: +{ + "description": "optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange", + "type": "string" +}
2 tool updates
- Added
token_quick_verdict - Added
token_verdict
3 tool updates
- First observed
presign_check - First observed
presign_check_explain - First observed
presign_quick_check
Publisher details
- Operator
- Fizzl · Publisher source
- Operator website
- https://fizzl.eu · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://presign-guard.fizzl.eu/skill.md
- Trust center
- Not applicable
- Restrictions
- No account or API key. Paid tools are paid per call in USDC with x402 inside the MCP call; free tools are rate-limited. · Publisher source
Related MCP Connectors
Pre-transaction risk screening for Ethereum addresses: signed score, sanctions, audit trail.
Screen crypto wallets vs OFAC SDN + threat intel; pre-payment checks, signed receipts; SAR drafts
XRPL wallet scores, wallet permissions, batch send, MPT risk, screening, pre-checks. Never signs.
Pre-trade safety + wallets: Solana/EVM token risk, honeypots, counterparties, balances, txs, CVEs.
Related MCP Servers
- AlicenseAqualityDmaintenanceNon-custodial agent wallet with a transaction preflight that decodes an unsigned EVM tx and flags drain patterns (unlimited/large approval, approve-all, token & NFT transferFrom, proxy upgrade, on-chain permit, approvals hidden in multicall) before signing.9235 PyPI1MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to screen blockchain addresses and evaluate payment counterparties before funds move, returning clear/caution/risky verdicts, risk scores, and clickable evidence across EVM chains, Tron, and Solana. It also supports anti-blind-signing checks, x402 payment-requirement verification, identity/control baselines, and signed evidence bundles, with free tools and optional paid compliance tools.15280 npmMIT
- AlicenseNot gradedqualityFmaintenanceCrypto compliance tools for AI-agent payments: screen any address for sanctions, frozen-stablecoin and hacker/mixer exposure across 8+ chains, trace fund taint, and get an allow/review/decline decision before settlement. Free keyless address checks; deeper endpoints are x402-payable.280 npmMIT
- AlicenseNot gradedqualityDmaintenancePre-execution safety layer for autonomous agent wallets. Risk scoring, transaction simulation, and policy enforcement via MCP.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.