Skip to content

loop-mcp

by loopxxi.com · remote · no sign-in to list tools · v2.4.0 · published by com.loopxxi

15 pay-per-call Bitcoin and developer tools, paid in sats over Lightning (L402).

Final · 2Changes · 8

15 tools: 2 do something that can't be undone, 8 change things and 5 only read.

Scanned Oct 21, 2026

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

claude mcp add --transport http loop https://mcp.loopxxi.com/mcp

Findings

Matches of fixed checks, with the text they matched.

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

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "btc_send_decision" says "send": a word for sending, and what is sent cannot be taken back.

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

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "optimal_send_window" says "send": a word for sending, and what is sent cannot be taken back.

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

    Matched text

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

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

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "hash_generate" says "generate": a word for a change.

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

    Matched text

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

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

    Matched text

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

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

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "uuid_generate" says "generate": a word for a change.

    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.

15 tools

Can't be undone 2Claude Code: ask
  • btc_send_decisionReturns a composited send-or-wait recommendation for a Bitcoin transaction.1 finding

    Why it is in this group

    • The name "btc_send_decision" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

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

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "btc_send_decision" says "send": a word for sending, and what is sent cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a composited send-or-wait recommendation for a Bitcoin transaction. Fetches live mempool and fee data, then outputs a machine-actionable verdict (SEND_NOW, WAIT, or URGENT_ONLY) with fee rates in sat/vB, mempool pressure level, and estimated savings if you wait. Ideal for agents that need a single decision call instead of parsing multiple raw mempool endpoints.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Bitcoin Send Decision
  • optimal_send_windowBitcoin transaction timing intelligence.1 finding

    Why it is in this group

    • The name "optimal_send_window" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

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

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "optimal_send_window" says "send": a word for sending, and what is sent cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Bitcoin transaction timing intelligence. Returns a congestion forecast for the next 1-4h, a recommended UTC send window when fees are projected at/below your target, a fee trajectory (rising/stable/falling) with a calibrated confidence score, next-block minimum fee, confirmation targets for 3/6/144 blocks, and an RBF-viability flag. A synthesis layer above raw fee data — the decision an autonomous payment agent needs before broadcasting. Source: mempool.space.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Optimal Send Window
Changes things 8Claude Code: ask
  • base64_convertEncode UTF-8 text to Base64 or decode Base64 safely, with standard and URL-safe alphabets.1 finding

    Why it is in this group

    • The name "base64_convert" says "convert": 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 "base64_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

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

      What this check looks for
    Description, as the server wrote it
    Encode UTF-8 text to Base64 or decode Base64 safely, with standard and URL-safe alphabets.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Base64 Convert
  • csv_to_jsonConvert CSV, TSV, semicolon, or pipe-delimited text into structured JSON with bounded row output.1 finding

    Why it is in this group

    • The description's first verb is "convert": 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 "csv_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

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

      What this check looks for
    Description, as the server wrote it
    Convert CSV, TSV, semicolon, or pipe-delimited text into structured JSON with bounded row output.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: CSV to JSON
  • hash_generateGenerate a SHA-256 or SHA-512 digest in hexadecimal or Base64 form.1 finding

    Why it is in this group

    • The name "hash_generate" says "generate": 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 "hash_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "hash_generate" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate a SHA-256 or SHA-512 digest in hexadecimal or Base64 form.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Hash Generate
  • json_extractExtract one value from JSON using a simple dot path with array indexes, for example users[0].email.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
    Extract one value from JSON using a simple dot path with array indexes, for example users[0].email.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: JSON Extract
  • jwt_decodeDecode JWT header and payload claims locally without verifying the signature.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 JWT header and payload claims locally without verifying the signature. The response always marks verification as false.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: JWT Decode
  • timestamp_convertConvert Unix seconds, Unix milliseconds, RFC3339, or ISO dates into normalized UTC timestamp forms.1 finding

    Why it is in this group

    • The name "timestamp_convert" says "convert": 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 "timestamp_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

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

      What this check looks for
    Description, as the server wrote it
    Convert Unix seconds, Unix milliseconds, RFC3339, or ISO dates into normalized UTC timestamp forms.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Timestamp Convert
  • url_parseParse an HTTP or HTTPS URL into normalized scheme, host, port, path, query, and fragment fields without fetching it.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
    Parse an HTTP or HTTPS URL into normalized scheme, host, port, path, query, and fragment fields without fetching it.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: URL Parse
  • uuid_generateGenerate one to one hundred cryptographically random RFC 4122 UUID version 4 identifiers.1 finding

    Why it is in this group

    • The name "uuid_generate" says "generate": 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 "uuid_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "uuid_generate" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate one to one hundred cryptographically random RFC 4122 UUID version 4 identifiers.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: UUID Generate
Only reads 5Claude Code: allow
  • btc_priceGet the current Bitcoin price in USD and other major currencies.No findings

    Why it is in this group

    • The description's first verb is "get": a word for reading.
    Description, as the server wrote it
    Get the current Bitcoin price in USD and other major currencies. Source: mempool.space. Real-time.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Bitcoin Price
  • json_validateValidate JSON, identify its root type, and return normalized JSON plus a SHA-256 content hash.No findings

    Why it is in this group

    • The name "json_validate" says "validate": a word for reading.
    Description, as the server wrote it
    Validate JSON, identify its root type, and return normalized JSON plus a SHA-256 content hash.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: JSON Validate
  • lightning_address_resolveResolve a Lightning Address (user@domain.com) to a payable BOLT11 invoice for a given amount.No findings

    Why it is in this group

    • The name "lightning_address_resolve" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolve a Lightning Address (user@domain.com) to a payable BOLT11 invoice for a given amount. Handles the full LNURL-pay protocol internally. Returns the invoice plus min/max sendable amounts for validation.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Lightning Address Resolve
  • text_analyzeReturn deterministic text statistics, estimated tokens, reading time, and a SHA-256 content hash.No findings

    Why it is in this group

    • The name "text_analyze" says "analyze": a word for reading.
    Description, as the server wrote it
    Return deterministic text statistics, estimated tokens, reading time, and a SHA-256 content hash.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Text Analyze
  • tx_decode_explainFetch a Bitcoin transaction by txid and return a structured, agent-ready summary: type (P2WPKH/P2TR/P2SH/etc.), input/output counts, fees, fee rate in sat/vB, confirmation status, …No findings

    Why it is in this group

    • The name "tx_decode_explain" says "explain": a word for reading.
    Description, as the server wrote it
    Fetch a Bitcoin transaction by txid and return a structured, agent-ready summary: type (P2WPKH/P2TR/P2SH/etc.), input/output counts, fees, fee rate in sat/vB, confirmation status, RBF flag, SegWit/Taproot flags, and a one-line agent_summary string ready for LLM context injection. Saves 500-2000 tokens vs parsing raw TX JSON.

    Annotations the server declares

    • destructiveHint: false
    • openWorldHint: true
    • readOnlyHint: true
    • title: Transaction Decode and Explain

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 2.4.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http loop https://mcp.loopxxi.com/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__loop__btc_price",
      "mcp__loop__lightning_address_resolve",
      "mcp__loop__tx_decode_explain",
      "mcp__loop__json_validate",
      "mcp__loop__text_analyze"
    ],
    "ask": [
      "mcp__loop__btc_send_decision",
      "mcp__loop__optimal_send_window",
      "mcp__loop__json_extract",
      "mcp__loop__csv_to_json",
      "mcp__loop__hash_generate",
      "mcp__loop__base64_convert",
      "mcp__loop__timestamp_convert",
      "mcp__loop__uuid_generate",
      "mcp__loop__url_parse",
      "mcp__loop__jwt_decode"
    ],
    "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 loop. Review it before you use it.