{
  "schema": "https://hatchloop.dev/agent-tools-index.json",
  "version": "1.0",
  "description": "Flat, normalized array of every agent tool and REST endpoint published by Hatchloop. Fields: name, description, url, method, parameters.",
  "generated_at": "2026-06-06T05:24:50.651369+00:00",
  "tool_count": 36,
  "source_files": [
    "https://hatchloop.dev/agent-tools.json",
    "https://hatchloop.dev/llms.txt"
  ],
  "tools": [
    {
      "name": "jwt-decode",
      "description": "Decode a JWT token \u2014 returns parsed header, payload, and expiry status.",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'jwt_decode'"
        },
        "token": {
          "type": "string",
          "required": true,
          "description": "JWT token string; Bearer prefix stripped automatically"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "jwt_decode"
    },
    {
      "name": "count-tokens",
      "description": "Count tokens in text and estimate model costs.",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'count_tokens'"
        },
        "text": {
          "type": "string",
          "required": true,
          "description": "Text to count tokens in"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "count_tokens"
    },
    {
      "name": "dns-lookup",
      "description": "Perform a DNS lookup for any domain (A, AAAA, MX, TXT, CNAME, NS, SOA).",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'dns_lookup'"
        },
        "domain": {
          "type": "string",
          "required": true,
          "description": "Domain to look up"
        },
        "type": {
          "type": "string",
          "required": false,
          "default": "A",
          "description": "Record type"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "dns_lookup"
    },
    {
      "name": "base64",
      "description": "Encode plain text to Base64 or decode Base64 to plain text.",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'base64'"
        },
        "text": {
          "type": "string",
          "required": true,
          "description": "Input text or Base64 string"
        },
        "action": {
          "type": "string",
          "required": true,
          "enum": [
            "encode",
            "decode"
          ],
          "description": "encode or decode"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "base64"
    },
    {
      "name": "fake-data",
      "description": "Generate reproducible fake data (person, email, address, company, uuid, color, date).",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'fake_data'"
        },
        "type": {
          "type": "string",
          "required": true,
          "description": "Data type: person, email, address, company, uuid, color, date"
        },
        "count": {
          "type": "integer",
          "required": false,
          "default": 5
        },
        "seed": {
          "type": "integer",
          "required": false,
          "description": "Integer seed for reproducible output"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "fake_data"
    },
    {
      "name": "my-ip",
      "description": "Return the caller's IP address, timestamp, and user-agent as JSON.",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'my_ip'"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "my_ip"
    },
    {
      "name": "fetch-as-markdown",
      "description": "Fetch a URL and return page content as Markdown.",
      "url": "https://hatchloop.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'fetch_as_markdown'"
        },
        "url": {
          "type": "string",
          "required": true,
          "description": "URL to fetch"
        }
      },
      "auth": "none",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "fetch_as_markdown"
    },
    {
      "name": "url-shortener",
      "description": "Shorten a URL. Returns id and short_url.",
      "url": "https://hatchloop.dev/url-shortener",
      "method": "POST",
      "parameters": {
        "url": {
          "type": "string",
          "required": true,
          "description": ""
        }
      },
      "auth": "none"
    },
    {
      "name": "url-shortener-url-shortener-{id}-stats",
      "description": "Get click stats for a short link.",
      "url": "https://hatchloop.dev/url-shortener/{id}/stats",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "jwt-decode-api-tools-jwt",
      "description": "Decode a JWT. Returns parsed header, payload, and algorithm.",
      "url": "https://hatchloop.dev/api/tools/jwt",
      "method": "POST",
      "parameters": {
        "token": {
          "type": "string",
          "required": true,
          "description": "The JWT string (eyJ...)"
        }
      },
      "auth": "none"
    },
    {
      "name": "token-counter-api-tools-tokens",
      "description": "Count tokens in text and estimate model costs.",
      "url": "https://hatchloop.dev/api/tools/tokens",
      "method": "POST",
      "parameters": {
        "text": {
          "type": "string",
          "required": true,
          "description": ""
        },
        "model": {
          "type": "string",
          "required": false,
          "description": "Optional model name for cost estimate (e.g. gpt-4, claude-3-opus)"
        }
      },
      "auth": "none"
    },
    {
      "name": "dns-lookup-api-tools-dns",
      "description": "DNS lookup for a domain. Pass ?domain= and optionally ?type= (default A).",
      "url": "https://hatchloop.dev/api/tools/dns",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "base64-api-tools-base64",
      "description": "Encode or decode base64. Pass {text, action} where action is 'encode' or 'decode'.",
      "url": "https://hatchloop.dev/api/tools/base64",
      "method": "POST",
      "parameters": {
        "text": {
          "type": "string",
          "required": true,
          "description": ""
        },
        "action": {
          "type": "string",
          "required": true,
          "description": "",
          "enum": [
            "encode",
            "decode"
          ]
        }
      },
      "auth": "none"
    },
    {
      "name": "fake-data-generator-api-tools-fake",
      "description": "Generate fake data. Pass ?type= (person, email, address, company, uuid, color, date) and ?count= (default 1, max 100).",
      "url": "https://hatchloop.dev/api/tools/fake",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "user-agent-parser-api-user-agent",
      "description": "Returns parsed User-Agent: type, name, browser, browser_version, os, os_version, is_mobile, is_bot, plus the raw user_agent string and timestamp.",
      "url": "https://hatchloop.dev/api/user-agent",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "user-agent-parser-user-agent",
      "description": "Human-readable HTML view with parsed UA fields and API examples.",
      "url": "https://hatchloop.dev/user-agent/",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "my-ip-api-tools-ip",
      "description": "Same as /ip \u2014 also exposes ip as MCP tool my_ip.",
      "url": "https://hatchloop.dev/api/tools/ip",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "fetch-as-markdown-api-fetch",
      "description": "Fetch a URL and return page content as Markdown.",
      "url": "https://hatchloop.dev/api/fetch",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "ip-geolocation-ip-geolocation",
      "description": "Look up IP geolocation. Pass ?ip= for a specific IP, or omit to geolocate the caller.",
      "url": "https://hatchloop.dev/ip-geolocation/",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "currency-converter",
      "description": "Convert an amount from one currency to another.",
      "url": "https://hatchloop.dev/convert",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "find-business",
      "description": "Find SMBs by vertical, location, capability, price band, and availability.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'find_business'"
        },
        "query": {
          "type": "string",
          "required": true,
          "description": "Search query"
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "find_business"
    },
    {
      "name": "verify-business",
      "description": "Confirm a business is real, operating, and capable.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'verify_business'"
        },
        "business_id": {
          "type": "string",
          "required": true,
          "description": "Business ID from find_business"
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "verify_business"
    },
    {
      "name": "schedule-appointment",
      "description": "Availability lookup, hold, confirm, reschedule, or cancel appointments.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'schedule_appointment'"
        },
        "business_id": {
          "type": "string",
          "required": true
        },
        "action": {
          "type": "string",
          "required": true,
          "enum": [
            "lookup",
            "hold",
            "confirm",
            "reschedule",
            "cancel"
          ]
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "schedule_appointment"
    },
    {
      "name": "send-message",
      "description": "Send messages via SMS, email, or voice on behalf of an agent.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'send_message'"
        },
        "to": {
          "type": "string",
          "required": true
        },
        "channel": {
          "type": "string",
          "required": true,
          "enum": [
            "sms",
            "email",
            "voice"
          ]
        },
        "message": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "send_message"
    },
    {
      "name": "capture-lead",
      "description": "Structured intake of a prospect into an SMB funnel.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'capture_lead'"
        },
        "business_id": {
          "type": "string",
          "required": true
        },
        "lead": {
          "type": "object",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "capture_lead"
    },
    {
      "name": "send-transactional-confirmation",
      "description": "Send OTPs, booking confirmations, payment receipts.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'send_transactional_confirmation'"
        },
        "type": {
          "type": "string",
          "required": true,
          "enum": [
            "otp",
            "booking",
            "receipt"
          ]
        },
        "to": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "send_transactional_confirmation"
    },
    {
      "name": "handle-inbound",
      "description": "Receive, classify, and route inbound messages.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'handle_inbound'"
        },
        "message": {
          "type": "string",
          "required": true
        },
        "channel": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "handle_inbound"
    },
    {
      "name": "escalate-to-human",
      "description": "Hand off to a human operator with full context.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'escalate_to_human'"
        },
        "operation_id": {
          "type": "string",
          "required": true
        },
        "reason": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "escalate_to_human"
    },
    {
      "name": "get-status",
      "description": "Query state of any in-flight async operation.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'get_status'"
        },
        "operation_id": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "get_status"
    },
    {
      "name": "get-outcome",
      "description": "Retrieve the final OutcomeReceipt for a completed operation.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'get_outcome'"
        },
        "operation_id": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "get_outcome"
    },
    {
      "name": "preview-cost",
      "description": "Return cost estimate, latency estimate, and success-probability.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'preview_cost'"
        },
        "operation": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "preview_cost"
    },
    {
      "name": "self-test",
      "description": "Live capability probe \u2014 verify service is healthy.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'self_test'"
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "self_test"
    },
    {
      "name": "import-booking-url",
      "description": "Turn any public booking URL into a scheduleable appointment.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'import_booking_url'"
        },
        "url": {
          "type": "string",
          "required": true,
          "description": "Public booking URL"
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "import_booking_url"
    },
    {
      "name": "call-business",
      "description": "Place a conversational voice-AI call to a business.",
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
      "method": "POST",
      "parameters": {
        "jsonrpc": {
          "type": "string",
          "required": true,
          "description": "Always '2.0'"
        },
        "method": {
          "type": "string",
          "required": true,
          "description": "Use 'tools/call' with name 'call_business'"
        },
        "business_id": {
          "type": "string",
          "required": true
        },
        "goal": {
          "type": "string",
          "required": true
        }
      },
      "auth": "optional",
      "protocol": "MCP JSON-RPC 2.0",
      "mcp_tool": "call_business"
    },
    {
      "name": "llms-validator-api-llms-validator",
      "description": "Returns JSON with llms.txt syntax validation and live endpoint health.",
      "url": "https://hatchloop.dev/api/llms-validator",
      "method": "GET",
      "parameters": {},
      "auth": "none"
    },
    {
      "name": "email-sending-mcp-mcp-email-sending-mcp",
      "description": "MCP streamable-HTTP endpoint",
      "url": "https://hatchloop.dev/mcp/email-sending/mcp",
      "method": "POST",
      "parameters": {},
      "auth": "none"
    }
  ]
}
