Skip to content

LogicNodes

io.logicnodes/toolslogicnodes.iostreamable-httpv1.0.0Scanned

Verified EVM, Aptos and finance tools for AI agents; gas for 14 chains. Pay per call (x402).

42 tools: 4 do something that can't be undone, 23 change things and 15 only read.

Tools: 0 delete, 4 irreversible, 23 write, 15 read.
  • Reads private data · 0
  • Reads text others write · 40
  • Can send data out · 2
  • 9 findings

Anlyon alternative

27 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

42 tools

Can't be undone 4Claude Code: ask
  • business_days[PAID $0.001 USDC per call via x402] Counts business days between two dates, adds business days to a date, or tests whether a date is a business day.Reads text others writeCan send data out1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a destination (input.to): what the tool writes goes there.

    Findings

    • Warn

      The server marks "business_days" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Counts business days between two dates, adds business days to a date, or tests whether a date is a business day. Weekends are configurable. NO holidays are assumed: pass the holidays you want observed. Dates are calendar dates (YYYY-MM-DD) with no time zone.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • money_calc[PAID $0.001 USDC per call via x402] Rounds, adds, subtracts, multiplies, or splits an amount of an ISO 4217 currency, using that currency's real number of minor units (JPY 0, USD …Reads text others write1 finding

    Why it is in this group

    • The input carries an amount (input.amount) and a currency, so it moves money.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "money_calc" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.

      What this check looks for
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Rounds, adds, subtracts, multiplies, or splits an amount of an ISO 4217 currency, using that currency's real number of minor units (JPY 0, USD 2, KWD 3). A currency not in the list is refused, never assumed to have 2 decimals. split divides a total into equal parts or by ratios so the parts always add back to the total exactly.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • payment_verify[PAID $0.002 USDC per call via x402] Given a transaction hash, lists the ERC-20 transfers in its receipt and, if you give expectations (payee, asset, amount, payer), says whether a…Reads text others write1 finding

    Why it is in this group

    • The name "payment_verify" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "payment_verify" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "payment_verify" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Given a transaction hash, lists the ERC-20 transfers in its receipt and, if you give expectations (payee, asset, amount, payer), says whether a successful transaction contains a matching transfer. Use it to check an x402 or other USDC payment. A match proves tokens moved; it does not prove what the payment was for.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • unit_convertConverts length, mass, volume, time, data, energy, area, speed and temperature using exact definitions (an inch is exactly 0.0254 m).Reads text others writeCan send data out1 finding

    Why it is in this group

    • The name "unit_convert" says "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a destination (input.to): what the tool writes goes there.

    Findings

    • Warn

      The server marks "unit_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "unit_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Converts length, mass, volume, time, data, energy, area, speed and temperature using exact definitions (an inch is exactly 0.0254 m). Ambiguous names (oz, gal, pt, KB) return AMBIGUOUS_INPUT with the choices instead of picking one. Reports whether the result is exact or rounded.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Changes things 23Claude Code: ask
  • address_format_checkChecks whether a string is a well-formed address for EVM (EIP-55 checksum), Solana, Aptos (AIP-40) or Bitcoin (base58check, bech32, bech32m).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Checks whether a string is a well-formed address for EVM (EIP-55 checksum), Solana, Aptos (AIP-40) or Bitcoin (base58check, bech32, bech32m). With family "auto" it lists every family the string could be, and never picks one. A valid format is not evidence an address is safe, owned, or the one you meant.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_amount_convertConverts between a human decimal amount and integer base units, using the asset's decimals read LIVE from the chain (never assumed from a symbol).Reads text others write1 finding

    Why it is in this group

    • The name "aptos_amount_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "aptos_amount_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "aptos_amount_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Converts between a human decimal amount and integer base units, using the asset's decimals read LIVE from the chain (never assumed from a symbol). Refuses to round: more decimal places than the asset has is an error. An ambiguous symbol returns AMBIGUOUS_INPUT.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_fee_estimate[PAID $0.005 USDC per call via x402] Gas unit price tiers (deprioritized/regular/prioritized) plus the cost of common transactions in octas, APT and USD.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.005 USDC per call via x402] Gas unit price tiers (deprioritized/regular/prioritized) plus the cost of common transactions in octas, APT and USD. Gas units are MEASURED by simulating real transfers now, not taken from a table. USD comes only from two independent exchanges that agree; otherwise USD is explicitly unavailable. Transaction types: apt_transfer, apt_transfer_new_account; for anything else use aptos_tx_simulate.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_tx_decode[PAID $0.002 USDC per call via x402] Explains what an entry-function payload would do, in plain English, with every argument type-checked against the module ABI and amounts shown u…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Explains what an entry-function payload would do, in plain English, with every argument type-checked against the module ABI and amounts shown using the asset's live decimals. Known patterns (transfers, batch transfers, key rotation, code publishing) carry a risk flag from a fixed table; no flag means 'not recognised', never 'safe'.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_tx_simulate[PAID $0.005 USDC per call via x402] Runs an UNSIGNED entry-function transaction through the node's own simulator (no key needed, nothing is submitted) and returns success or the a…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.005 USDC per call via x402] Runs an UNSIGNED entry-function transaction through the node's own simulator (no key needed, nothing is submitted) and returns success or the abort decoded in plain English, exact gas and fee, balance changes, and events. Arguments are type-checked against the module ABI first. Balance changes count only the framework's Withdraw/Deposit events, so assets that re-emit them (like USDC) are never double-counted. A simulation runs against the node's current state and cannot be pinned to an older ledger version.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • decimal_calcAdd, subtract, multiply, divide, raise to an integer power, compare, or take a percentage, on decimal STRINGS with exact arithmetic (no floating point).Reads text others write1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "decimal_calc" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add, subtract, multiply, divide, raise to an integer power, compare, or take a percentage, on decimal STRINGS with exact arithmetic (no floating point). The result is rounded only to the scale and rule you choose, and the response says whether rounding changed the value. JSON numbers are refused because they lose precision. Division by zero is an error.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_allowance[PAID $0.002 USDC per call via x402] How much a spender may take from an owner for a token, at one block, in exact base units and human units, flagging 'unlimited' approvals.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] How much a spender may take from an owner for a token, at one block, in exact base units and human units, flagging 'unlimited' approvals.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_balance[PAID $0.002 USDC per call via x402] Native and ERC-20 balances of an address, ALL read at one stated block (number and hash returned).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Native and ERC-20 balances of an address, ALL read at one stated block (number and hash returned). Token decimals are read from the token contract, never assumed; an address with no code, or a contract that is not a standard ERC-20, is an error and is never reported as a zero balance. Amounts are exact strings.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_block[PAID $0.001 USDC per call via x402] Number, hash, timestamp, base fee (gwei), gas used/limit and transaction count of one block.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Number, hash, timestamp, base fee (gwei), gas used/limit and transaction count of one block. Use block "finalized" for a block that can no longer reorganize.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_calldata_decode[PAID $0.001 USDC per call via x402] Decodes transaction calldata against an ABI that YOU supply and returns the function, its signature and each argument.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Decodes transaction calldata against an ABI that YOU supply and returns the function, its signature and each argument. If the selector is not in your ABI it says so and lists the selectors it does have; it does not guess from a selector database. An ABI that does not belong to the target contract can decode to plausible nonsense.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_contract_type[PAID $0.003 USDC per call via x402] Says what is at an address using on-chain evidence: empty account, EIP-7702 delegated account, EIP-1167 minimal proxy, EIP-1967 proxy (with imp…Reads text others write1 finding

    Why it is in this group

    • The name "evm_contract_type" says "type": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "evm_contract_type" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "evm_contract_type" says "type": a word for a change.

      What this check looks for
    Description, as the server wrote it
    [PAID $0.003 USDC per call via x402] Says what is at an address using on-chain evidence: empty account, EIP-7702 delegated account, EIP-1167 minimal proxy, EIP-1967 proxy (with implementation and admin), Safe wallet (with owners and threshold), or other contract. Each classification lists the evidence. It is not a safety verdict.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_nonce[PAID $0.001 USDC per call via x402] The transaction count of an address at one stated block.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] The transaction count of an address at one stated block. Pending-pool transactions are not counted, and the answer says so.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_spend_report[PAID $0.005 USDC per call via x402] Every transfer of one ERC-20 token out of (or into) a wallet across a block range of up to 20,000 blocks, with exact amounts, per-counterparty …Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.005 USDC per call via x402] Every transfer of one ERC-20 token out of (or into) a wallet across a block range of up to 20,000 blocks, with exact amounts, per-counterparty totals, per-UTC-day totals, and an accounting CSV. Reads public chain data only. The range is queried in full 2000-block pieces and the report refuses (rather than truncates) when more than 2000 transfers match.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_token_metadata[PAID $0.002 USDC per call via x402] Name, symbol, decimals and total supply of an ERC-20 read from its contract at one block.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Name, symbol, decimals and total supply of an ERC-20 read from its contract at one block. Handles tokens whose name/symbol are bytes32. If decimals() is missing, it is an error: decimals are never assumed.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_tx_receipt[PAID $0.002 USDC per call via x402] Status (success / reverted / pending), block, gas used and the exact fee in wei and native units for a transaction hash.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Status (success / reverted / pending), block, gas used and the exact fee in wei and native units for a transaction hash. 'Not found' is reported as such and is not proof the transaction never existed.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • gas_estimate[PAID $0.001 USDC per call via x402] Current fee tiers for a chain as decimal strings with explicit units.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Current fee tiers for a chain as decimal strings with explicit units. EVM: confidence levels (default 99/95/90/80/70) in gwei with base fee, priority fee and max fee. Aptos: deprioritized/regular/prioritized gas unit prices in octas per gas unit. Data older than its freshness budget is an error, never a stale answer.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • interest_calc[PAID $0.001 USDC per call via x402] Exact simple or compound interest for a principal, an annual percentage rate and a term in years, compounded annually, semiannually, quarterly,…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Exact simple or compound interest for a principal, an annual percentage rate and a term in years, compounded annually, semiannually, quarterly, monthly, weekly or daily. The number of periods must be whole; fractional periods are refused, not approximated. Also returns the effective annual rate.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • loan_calc[PAID $0.001 USDC per call via x402] Monthly payment, total interest and total paid for a fixed-rate amortizing loan, in exact arithmetic.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Monthly payment, total interest and total paid for a fixed-rate amortizing loan, in exact arithmetic. The payment is rounded once to the currency scale and the final payment absorbs the rounding so the balance ends at exactly zero.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • random_from_block[PAID $0.002 USDC per call via x402] Deterministic, publicly recomputable random integers derived from a FINALIZED block hash and a salt.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Deterministic, publicly recomputable random integers derived from a FINALIZED block hash and a salt. Refuses a block that is not yet final. Not secret and not for cases where the salt can be chosen after seeing the block.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • slippage_bounds[PAID $0.001 USDC per call via x402] From a quoted amount in base units (integer string) and a slippage tolerance in basis points, computes the minimum you should accept (min_out, …Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] From a quoted amount in base units (integer string) and a slippage tolerance in basis points, computes the minimum you should accept (min_out, rounded down) or the maximum you should pay (max_in, rounded up). Integer arithmetic only; the rounding direction is stated.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • swap_price_impact[PAID $0.001 USDC per call via x402] For a Uniswap-V2-style pool, computes the exact output of a swap (the router's integer formula), the total cost versus the spot price including…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] For a Uniswap-V2-style pool, computes the exact output of a swap (the router's integer formula), the total cost versus the spot price including the fee, and the part due to trade size alone, in basis points. Inputs are reserves and amounts in base units. Does not know any pool: you supply the reserves.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • time_convertConverts an ISO 8601 instant, or a local time plus its IANA zone, to another IANA zone.Reads text others write1 finding

    Why it is in this group

    • The name "time_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "time_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "time_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Converts an ISO 8601 instant, or a local time plus its IANA zone, to another IANA zone. A local time skipped by a daylight-saving jump is refused; one that occurs twice returns AMBIGUOUS_INPUT with both instants. Zone abbreviations such as EST are refused.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • token_amount_convertConverts between a human decimal amount and integer base units without ever rounding: too many decimals is an error.Reads text others write1 finding

    Why it is in this group

    • The name "token_amount_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "token_amount_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "token_amount_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Converts between a human decimal amount and integer base units without ever rounding: too many decimals is an error. Decimals are never assumed: pass `decimals`, or an `asset` whose decimals are read from the chain (EVM: "native" only; Aptos: any asset, with live decimals; an ambiguous symbol such as USDC returns AMBIGUOUS_INPUT with every option).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Only reads 15Show 15 read-only tools
  • address_validateValidates an address for a chain and returns its canonical form.Reads text others writeNo findings

    Why it is in this group

    • The name "address_validate" says "validate": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Validates an address for a chain and returns its canonical form. EVM: EIP-55 (a wrong checksum is refused, never corrected). Aptos: AIP-40 strict form. Says only what can be known offline; it never guesses what kind of account an address is.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_address_validateValidates an address against the Aptos address standard (AIP-40) and returns its canonical form: special addresses (0x0-0xf) as short form, all others as 0x + 64 digits.Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_address_validate" says "validate": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Validates an address against the Aptos address standard (AIP-40) and returns its canonical form: special addresses (0x0-0xf) as short form, all others as 0x + 64 digits. Strict by default; mode=relaxed also accepts a missing 0x or a few dropped leading zeros, and says which spelling you used (a truncated-looking address is always refused). With lookup=true it checks the chain to say whether the address is an account, an object, or neither, at one ledger version.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_asset_resolve[PAID $0.001 USDC per call via x402] Turns a symbol, registry id, fungible-asset address or coin type into one asset, with its on-chain symbol/name/decimals read live.Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_asset_resolve" says "resolve": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Turns a symbol, registry id, fungible-asset address or coin type into one asset, with its on-chain symbol/name/decimals read live. Several different assets share the symbols USDC and USDT (Circle/Tether native vs LayerZero-bridged); those return AMBIGUOUS_INPUT with every candidate, its issuer and how to select it. Assets outside the registry are returned with verified:false, never silently trusted.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_balance_get[PAID $0.002 USDC per call via x402] Balances of an address for APT and fungible assets, all read at ONE ledger version (stated, or the current one pinned).Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_balance_get" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Balances of an address for APT and fungible assets, all read at ONE ledger version (stated, or the current one pinned). Amounts are exact integer strings plus decimal strings. Default assets: APT and every verified asset; pass `assets` (symbols, ids, addresses, coin types) to choose. An ambiguous symbol fails the whole call. An address with no account and all-zero balances is reported honestly, not as an empty account.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_name_resolve[PAID $0.001 USDC per call via x402] name -> address, or address -> primary name (give exactly one).Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_name_resolve" says "resolve": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] name -> address, or address -> primary name (give exactly one). A name resolves to its TARGET address, which can differ from its owner; a registered name with no target resolves to nothing (NOT_FOUND) and its owner is never substituted. An address's primary name is returned only if that name resolves forward to the same address, so a spoofed reverse record is never trusted.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_tx_status[PAID $0.001 USDC per call via x402] Committed, failed, pending or not found for a transaction hash, with the VM status explained in plain English (Move aborts decoded to module, e…Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_tx_status" says "status": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Committed, failed, pending or not found for a transaction hash, with the VM status explained in plain English (Move aborts decoded to module, error name, code and category; the raw status is always included). Fee is computed from the VM's own fee statement.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • aptos_view[PAID $0.002 USDC per call via x402] Calls a Move #[view] function read-only, after checking every type argument and argument against the module's ABI: u64/u128/u256 must be decima…Reads text others writeNo findings

    Why it is in this group

    • The name "aptos_view" says "view": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.002 USDC per call via x402] Calls a Move #[view] function read-only, after checking every type argument and argument against the module's ABI: u64/u128/u256 must be decimal strings, vector<u8> a 0x hex string, Option<T> written {"vec":[]} or {"vec":[value]}, addresses in AIP-40 form. A wrong argument is a specific error from us, never an opaque node error. Optionally reads at a stated ledger version.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • chain_infoDescribes a supported chain: CAIP-2 id, display name, native currency, block explorers, and exactly which operations it supports.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "describe": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Describes a supported chain: CAIP-2 id, display name, native currency, block explorers, and exactly which operations it supports. Omit `chain` to list every supported chain.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • erc8004_agentReads an agent from the ERC-8004 identity registry on Base: its owner address and the registration URI it points to, at one stated block.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "read" and "uri": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Reads an agent from the ERC-8004 identity registry on Base: its owner address and the registration URI it points to, at one stated block. The URI is reported, not fetched (fetching arbitrary URLs for you is not this tool's job). An id that was never minted is NOT_FOUND.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • erc8004_reputationSummarises the feedback posted about an agent in the ERC-8004 reputation registry on Base, at one block: number of distinct clients, number of feedback entries, the registry's own …Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "summarise": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Summarises the feedback posted about an agent in the ERC-8004 reputation registry on Base, at one block: number of distinct clients, number of feedback entries, the registry's own summary value, and each client's latest entry (value, tags, revoked). It is EVIDENCE, not a verdict: anyone can post feedback from any address, so many clients is not proof of many people, and tag text is free text written by the client (shown as untrusted).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_log_decode[PAID $0.001 USDC per call via x402] Decodes one event log (its topics and data) against an ABI that YOU supply and returns the event name and arguments.Reads text others writeNo findings

    Why it is in this group

    • The name "evm_log_decode" says "log": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Decodes one event log (its topics and data) against an ABI that YOU supply and returns the event name and arguments. If no event in your ABI matches topic0 it says so rather than guessing from a database of known events.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • evm_logs[PAID $0.003 USDC per call via x402] Logs emitted by one contract in a block range of at most 2000 blocks, optionally filtered by topics.Reads text others writeNo findings

    Why it is in this group

    • The name "evm_logs" says "log": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.003 USDC per call via x402] Logs emitted by one contract in a block range of at most 2000 blocks, optionally filtered by topics. Refuses (rather than truncates) when more than 1000 logs match, so an answer is always complete.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • get_gas_pricesCurrent gas price estimates for an EVM chain in Blocknative-compatible format (gwei).No findings

    Why it is in this group

    • The name "get_gas_prices" says "get": a word for reading.
    Description, as the server wrote it
    Current gas price estimates for an EVM chain in Blocknative-compatible format (gwei). Default chain is Ethereum (1). Supported chain IDs: 1, 8453, 42161, 10, 137, 56, 43114, 59144, 534352, 324, 100, 81457, 5000, 42220.
  • list_supported_chainsEVM chains with live gas data, with chain IDs.No findings

    Why it is in this group

    • The name "list_supported_chains" says "list": a word for reading.
    Description, as the server wrote it
    EVM chains with live gas data, with chain IDs.
  • tx_status[PAID $0.001 USDC per call via x402] Whether a transaction is committed, failed, pending or not found, with a plain-English explanation.Reads text others writeNo findings

    Why it is in this group

    • The name "tx_status" says "status": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    [PAID $0.001 USDC per call via x402] Whether a transaction is committed, failed, pending or not found, with a plain-English explanation. 'Not found' is reported as such and is not proof the transaction never existed.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out2
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

9 warn
  • The server marks "token_amount_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "token_amount_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "aptos_amount_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "aptos_amount_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "decimal_calc" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "money_calc" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.

    What this check looks for
  • The server marks "unit_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "unit_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "time_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "time_convert" says "convert": a word for a change.

    What this check looks for
Show 3 more findings
  • The server marks "business_days" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "evm_contract_type" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "evm_contract_type" says "type": a word for a change.

    What this check looks for
  • The server marks "payment_verify" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "payment_verify" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http tools https://logicnodes.io/mcp/v2
claude mcp add --transport http tools https://logicnodes.io/mcp/v2

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__tools__get_gas_prices",
      "mcp__tools__list_supported_chains",
      "mcp__tools__chain_info",
      "mcp__tools__address_validate",
      "mcp__tools__tx_status",
      "mcp__tools__aptos_address_validate",
      "mcp__tools__aptos_name_resolve",
      "mcp__tools__aptos_asset_resolve",
      "mcp__tools__aptos_balance_get",
      "mcp__tools__aptos_tx_status",
      "mcp__tools__aptos_view",
      "mcp__tools__evm_logs",
      "mcp__tools__evm_log_decode",
      "mcp__tools__erc8004_agent",
      "mcp__tools__erc8004_reputation"
    ],
    "ask": [
      "mcp__tools__gas_estimate",
      "mcp__tools__token_amount_convert",
      "mcp__tools__aptos_amount_convert",
      "mcp__tools__aptos_fee_estimate",
      "mcp__tools__aptos_tx_simulate",
      "mcp__tools__aptos_tx_decode",
      "mcp__tools__decimal_calc",
      "mcp__tools__slippage_bounds",
      "mcp__tools__swap_price_impact",
      "mcp__tools__money_calc",
      "mcp__tools__interest_calc",
      "mcp__tools__loan_calc",
      "mcp__tools__unit_convert",
      "mcp__tools__address_format_check",
      "mcp__tools__time_convert",
      "mcp__tools__business_days",
      "mcp__tools__evm_balance",
      "mcp__tools__evm_nonce",
      "mcp__tools__evm_block",
      "mcp__tools__evm_tx_receipt",
      "mcp__tools__evm_token_metadata",
      "mcp__tools__evm_allowance",
      "mcp__tools__evm_contract_type",
      "mcp__tools__evm_calldata_decode",
      "mcp__tools__payment_verify",
      "mcp__tools__random_from_block",
      "mcp__tools__evm_spend_report"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as tools. Review it before you use it.

Capability tags behind 40 rules
  • mcp__tools__chain_info untrusted-input
  • mcp__tools__gas_estimate untrusted-input
  • mcp__tools__address_validate untrusted-input
  • mcp__tools__token_amount_convert untrusted-input
  • mcp__tools__tx_status untrusted-input
  • mcp__tools__aptos_address_validate untrusted-input
  • mcp__tools__aptos_name_resolve untrusted-input
  • mcp__tools__aptos_asset_resolve untrusted-input
  • mcp__tools__aptos_amount_convert untrusted-input
  • mcp__tools__aptos_balance_get untrusted-input
  • mcp__tools__aptos_fee_estimate untrusted-input
  • mcp__tools__aptos_tx_simulate untrusted-input
  • mcp__tools__aptos_tx_decode untrusted-input
  • mcp__tools__aptos_tx_status untrusted-input
  • mcp__tools__aptos_view untrusted-input
  • mcp__tools__decimal_calc untrusted-input
  • mcp__tools__slippage_bounds untrusted-input
  • mcp__tools__swap_price_impact untrusted-input
  • mcp__tools__money_calc untrusted-input
  • mcp__tools__interest_calc untrusted-input
  • mcp__tools__loan_calc untrusted-input
  • mcp__tools__unit_convert untrusted-input, outbound
  • mcp__tools__address_format_check untrusted-input
  • mcp__tools__time_convert untrusted-input
  • mcp__tools__business_days untrusted-input, outbound
  • mcp__tools__evm_balance untrusted-input
  • mcp__tools__evm_nonce untrusted-input
  • mcp__tools__evm_block untrusted-input
  • mcp__tools__evm_tx_receipt untrusted-input
  • mcp__tools__evm_token_metadata untrusted-input
  • mcp__tools__evm_allowance untrusted-input
  • mcp__tools__evm_contract_type untrusted-input
  • mcp__tools__evm_logs untrusted-input
  • mcp__tools__evm_calldata_decode untrusted-input
  • mcp__tools__evm_log_decode untrusted-input
  • mcp__tools__payment_verify untrusted-input
  • mcp__tools__random_from_block untrusted-input
  • mcp__tools__erc8004_agent untrusted-input
  • mcp__tools__erc8004_reputation untrusted-input
  • mcp__tools__evm_spend_report untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.logicnodes/tools/verify?hash=145433a0487da6701f2c34d6b3c5feb1bc49b4a939c0973525d7e5cec37f5e63" | jq -e '.changed == false'

Pinned hash 145433a0487d, from Oct 22, 2026, 19:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.logicnodes/tools/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.logicnodes/tools
[![anlyon.dev](https://anlyon.dev/badge/io.logicnodes/tools.svg)](https://anlyon.dev/servers/io.logicnodes/tools)

Source: MCP Registry. Synced Oct 22, 2026, 20:17 UTC.