Skip to content

🐴 Gulltoppr

by portdeveloper · remote · no sign-in to list tools · v0.1.2 · published by GitHub user portdeveloper

Resolve any EVM contract ABI (even unverified, via decompilation), read, simulate, prepare txs.

Final · 1Changes · 4

12 tools: 1 do something that can't be undone, 4 change things and 7 only read.

Scanned Oct 21, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http gulltoppr https://mcp.gulltoppr.dev/mcp

Findings

Matches of fixed checks, with the text they matched.

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

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "read_contract" says "read": a word for reading.

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

    Matched text

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

    What this check looks for
  • The server marks "simulate" 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

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

12 tools

Can't be undone 1Claude Code: ask
  • simulateSimulate a call and return success, gas, decoded return, and best-effort state diff / asset changes / logs.1 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.

    Findings

    • Warn

      The server marks "simulate" 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
    Simulate a call and return success, gas, decoded return, and best-effort state diff / asset changes / logs. Provide a high-level call (address + function + args) or raw (to + data), never both.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Changes things 4Claude Code: ask
  • decode_txDecode what a transaction did: delegated heimdall decode plus `decoded_call` from the resolved target ABI when available.No 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.
    Description, as the server wrote it
    Decode what a transaction did: delegated heimdall decode plus `decoded_call` from the resolved target ABI when available. Prefer `decoded_call` for typed function/arg names, and read its provenance.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • encode_callEncode a function call to calldata (0x…) without sending anything.1 finding

    Why it is in this group

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

    Findings

    • Warn

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

      Matched text

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

      What this check looks for
    Description, as the server wrote it
    Encode a function call to calldata (0x…) without sending anything.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • prepare_txPrepare a contract WRITE for the user to sign.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Prepare a contract WRITE for the user to sign. Returns an UNSIGNED transaction, its simulation, a human-readable summary, safety metadata, warnings, a configured signing deeplink, and an EIP-1193 wallet request when signing is recommended. IMPORTANT: this tool NEVER signs or broadcasts. Present the summary + simulation + warnings to the user. Only hand them the `deeplink` or `wallet_request` when `safety.signing_recommended` is true. If `safety.risk_level` is high or blocked, make that explicit; blocked means do not send.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • read_contractCall a view/pure function and get the decoded result.1 finding

    Why it is in this group

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

    Findings

    • Warn

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

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "read_contract" says "read": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Call a view/pure function and get the decoded result. No wallet, no cost. Rejects state-mutating functions.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Only reads 7Claude Code: allow
  • export_registryReturn the CC0 selector commons as NDJSON.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Return the CC0 selector commons as NDJSON. This can be large; prefer lookup_selector for normal agent workflows.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • list_chainsList viem-backed chain aliases and ids.No findings

    Why it is in this group

    • The name "list_chains" says "list": a word for reading.
    Description, as the server wrote it
    List viem-backed chain aliases and ids. Use filters to find testnets, default-RPC chains, or a named chain before resolving contracts.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • lookup_selectorLookup gulltoppr-proven signatures for a 4-byte function/error selector or 32-byte event topic0.No findings

    Why it is in this group

    • The name "lookup_selector" says "lookup": a word for reading.
    Description, as the server wrote it
    Lookup gulltoppr-proven signatures for a 4-byte function/error selector or 32-byte event topic0. Prefer these over public 4byte guesses.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • registry_statsRead selector commons counts by proof grade and bytecode-match index size.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read selector commons counts by proof grade and bytecode-match index size.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • resolve_abiResolve a contract's interface from chain + address via a fallback ladder (Etherscan → Sourcify → proxy → heimdall decompile → 4byte).No findings

    Why it is in this group

    • The name "resolve_abi" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolve a contract's interface from chain + address via a fallback ladder (Etherscan → Sourcify → proxy → heimdall decompile → 4byte). Returns a compact capability manifest (read vs write functions, the 'buttons'), proxy chain, token metadata, and PROVENANCE. ALWAYS read `provenance`: a `decompiled` ABI has synthetic function names — treat it with care and confirm intent before writing. Partial, proxy, and bytecode-match results lead with a WARNING before the JSON. The compact manifest/provenance is also returned as structuredContent. Use method_q/method_kind/method_limit for large ABIs. Raw ABI is omitted from MCP output to save tokens; use REST/SDK resolve_abi with include_abi=true if needed.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • resolve_nameResolve an ENS/Basename to an address, or an address to its primary ENS/Basename.No findings

    Why it is in this group

    • The name "resolve_name" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolve an ENS/Basename to an address, or an address to its primary ENS/Basename. Pass chain=base for Basenames.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • runtime_metricsRead process-local resolver/rung/RPC counters for smoke checks and reliability dashboards.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read process-local resolver/rung/RPC counters for smoke checks and reliability dashboards.

    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.

Install

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

claude mcp add --transport http gulltoppr https://mcp.gulltoppr.dev/mcp

Run in a terminal.

Claude Code permissions

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

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__gulltoppr__list_chains",
      "mcp__gulltoppr__runtime_metrics",
      "mcp__gulltoppr__lookup_selector",
      "mcp__gulltoppr__registry_stats",
      "mcp__gulltoppr__export_registry",
      "mcp__gulltoppr__resolve_abi",
      "mcp__gulltoppr__resolve_name"
    ],
    "ask": [
      "mcp__gulltoppr__read_contract",
      "mcp__gulltoppr__encode_call",
      "mcp__gulltoppr__simulate",
      "mcp__gulltoppr__prepare_tx",
      "mcp__gulltoppr__decode_tx"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as gulltoppr. Review it before you use it.