loop-mcp
An MCP server providing 15 pay-per-call tools for Bitcoin price data, Lightning address resolution, transaction decoding, and various developer utilities like JSON validation and hash generation, with payments handled via sats over Lightning (L402).
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.loopxxi.com/mcpWhat its tools do
16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to loopxxi.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Get BTC price
- Resolve Lightning addresses
- Decode and explain transactions
- Validate JSON and extract data
Source and maintenance
Protocol and capabilities
- Server
- loop-mcp 2.5.0
- MCP protocol negotiated in check
- 2024-11-05
- Tools
- 16 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {}
}Tools
16 advertised
btc_price
Get the current Bitcoin price in USD and other major currencies. Source: mempool.space. Real-time. Each reading carries source (the URL read), fetched_at (UTC, RFC 3339) and source_sha256 (SHA-256 of the upstream body as served).
{
"type": "object",
"required": [],
"properties": {
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Bitcoin Price",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}btc_send_decision
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.
{
"type": "object",
"required": [],
"properties": {
"urgency": {
"enum": [
"low",
"medium",
"high"
],
"type": "string",
"description": "How time-sensitive is your transaction? low=economy, medium=default, high=next-block."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Bitcoin Send Decision",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}lightning_address_resolve
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.
{
"type": "object",
"required": [
"address",
"amount_sats"
],
"properties": {
"address": {
"type": "string",
"description": "Lightning Address in user@domain.com format."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
},
"amount_sats": {
"type": "integer",
"maximum": 100000000,
"minimum": 1,
"description": "Amount you want to send, in satoshis. At most 100000000 (1 BTC)."
}
}
}{
"title": "Lightning Address Resolve",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}tx_decode_explain
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.
{
"type": "object",
"required": [
"txid"
],
"properties": {
"txid": {
"type": "string",
"maxLength": 64,
"minLength": 64,
"description": "Bitcoin transaction ID (64 hex characters)."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Transaction Decode and Explain",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}optimal_send_window
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.
{
"type": "object",
"required": [],
"properties": {
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
},
"hours_ahead": {
"type": "integer",
"maximum": 6,
"minimum": 1,
"description": "How far ahead to search for the optimal window (1-6h, default 4)."
},
"target_sat_vb": {
"type": "number",
"description": "Your fee ceiling in sat/vB. The recommended window targets at-or-below this rate. Omit to get the lowest-projected window."
}
}
}{
"title": "Optimal Send Window",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}json_validate
Validate JSON, identify its root type, and return normalized JSON plus a SHA-256 content hash.
{
"type": "object",
"required": [
"json"
],
"properties": {
"json": {
"type": "string",
"description": "JSON text to validate, up to 100 KB."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "JSON Validate",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}json_extract
Extract one value from JSON using a simple dot path with array indexes, for example users[0].email.
{
"type": "object",
"required": [
"json",
"path"
],
"properties": {
"json": {
"type": "string",
"description": "JSON text, up to 100 KB."
},
"path": {
"type": "string",
"description": "Dot path such as user.profile.name or users[0].email."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "JSON Extract",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}csv_to_json
Convert CSV, TSV, semicolon, or pipe-delimited text into structured JSON with bounded row output.
{
"type": "object",
"required": [
"csv"
],
"properties": {
"csv": {
"type": "string",
"description": "Delimited text, up to 100 KB."
},
"header": {
"type": "boolean",
"description": "Use the first row as object keys. Default true."
},
"max_rows": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum data rows to return. Default 100."
},
"delimiter": {
"enum": [
"comma",
"tab",
"semicolon",
"pipe"
],
"type": "string",
"description": "Delimiter name. Default comma."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "CSV to JSON",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}text_analyze
Return deterministic text statistics, estimated tokens, reading time, and a SHA-256 content hash.
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Text to analyze, up to 100 KB."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Text Analyze",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}hash_generate
Generate a SHA-256 or SHA-512 digest in hexadecimal or Base64 form.
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Input text, up to 100 KB."
},
"encoding": {
"enum": [
"hex",
"base64"
],
"type": "string",
"description": "Output encoding. Default hex."
},
"algorithm": {
"enum": [
"sha256",
"sha512"
],
"type": "string",
"description": "Hash algorithm. Default sha256."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Hash Generate",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}base64_convert
Encode UTF-8 text to Base64 or decode Base64 safely, with standard and URL-safe alphabets.
{
"type": "object",
"required": [
"data",
"action"
],
"properties": {
"data": {
"type": "string",
"description": "Text or Base64 data, up to 100 KB."
},
"action": {
"enum": [
"encode",
"decode"
],
"type": "string"
},
"url_safe": {
"type": "boolean",
"description": "Use the URL-safe alphabet without padding."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Base64 Convert",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}timestamp_convert
Convert Unix seconds, Unix milliseconds, RFC3339, or ISO dates into normalized UTC timestamp forms.
{
"type": "object",
"required": [
"value"
],
"properties": {
"from": {
"enum": [
"auto",
"unix",
"unix_ms",
"rfc3339",
"date"
],
"type": "string",
"description": "Input format. Default auto."
},
"value": {
"type": "string",
"description": "Timestamp value."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "Timestamp Convert",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}uuid_generate
Generate one to one hundred cryptographically random RFC 4122 UUID version 4 identifiers.
{
"type": "object",
"required": [],
"properties": {
"count": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of UUIDs. Default 1."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "UUID Generate",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}url_parse
Parse an HTTP or HTTPS URL into normalized scheme, host, port, path, query, and fragment fields without fetching it.
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Absolute HTTP or HTTPS URL, up to 4,096 characters."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "URL Parse",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}jwt_decode
Decode JWT header and payload claims locally without verifying the signature. The response always marks verification as false.
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"description": "JWT compact serialization, up to 20 KB."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
}
}
}{
"title": "JWT Decode",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}business_ratios
Compute cash runway in months, cash buffer days, current ratio, quick ratio, debt to equity, DSO, DIO, DPO and cash conversion cycle from any subset of a business's own cash, monthly flow and balance sheet figures. Arithmetic only, no network. Each value carries its formula and the inputs it used; a value that cannot be computed is null with a reason.
{
"type": "object",
"required": [],
"properties": {
"cash": {
"type": "number",
"description": "Cash on hand. Every figure uses the same currency unit. May be negative."
},
"equity": {
"type": "number",
"description": "Total equity. May be negative."
},
"payables": {
"type": "number",
"minimum": 0,
"description": "Accounts payable."
},
"inventory": {
"type": "number",
"minimum": 0,
"description": "Inventory at cost."
},
"l402_proof": {
"type": "string",
"description": "L402 payment proof \"<macaroon>:<preimage>\". Omit on the first call; an unpaid call returns a 0 sat Lightning invoice and the macaroon. Pay the invoice, then repeat the call with this argument set."
},
"annual_cogs": {
"type": "number",
"minimum": 0,
"description": "Cost of goods sold for the last twelve months."
},
"receivables": {
"type": "number",
"minimum": 0,
"description": "Accounts receivable."
},
"annual_revenue": {
"type": "number",
"minimum": 0,
"description": "Revenue for the last twelve months."
},
"current_assets": {
"type": "number",
"minimum": 0,
"description": "Total current assets."
},
"monthly_inflows": {
"type": "number",
"minimum": 0,
"description": "Cash received per month."
},
"monthly_outflows": {
"type": "number",
"minimum": 0,
"description": "Cash paid out per month."
},
"total_liabilities": {
"type": "number",
"minimum": 0,
"description": "Total liabilities."
},
"current_liabilities": {
"type": "number",
"minimum": 0,
"description": "Total current liabilities."
}
}
}{
"title": "Business Ratios",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-06: 1 of 1 checks answered
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 768 ms
- 95th percentile latency
- 768 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 768 ms · metadata changed · 16 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http loop-mcp https://mcp.loopxxi.com/mcpCodex
codex mcp add loop-mcp --url https://mcp.loopxxi.com/mcpCursor
{
"mcpServers": {
"loop-mcp": {
"url": "https://mcp.loopxxi.com/mcp"
}
}
}Cline
{
"mcpServers": {
"loop-mcp": {
"type": "streamableHttp",
"url": "https://mcp.loopxxi.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"loop-mcp": {
"type": "http",
"url": "https://mcp.loopxxi.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http loop-mcp https://mcp.loopxxi.com/mcpClaude Desktop
https://mcp.loopxxi.com/mcpWindsurf
{
"mcpServers": {
"loop-mcp": {
"serverUrl": "https://mcp.loopxxi.com/mcp"
}
}
}Let your agent find its tools
Find servers like loop-mcp from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run loop-mcp?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.