{
  "version": "1.0",
  "registry": "Hatchloop Agent Tools Registry",
  "description": "Machine-readable catalog of all Hatchloop tools available for AI agents. All HTTP endpoints require no authentication and have no hard rate limits.",
  "updated": "2026-05-31",
  "registry_url": "https://hatchloop.dev/agent-tools.json",
  "tools": [
    {
      "name": "url-shortener",
      "description": "Zero-authentication URL shortener for AI agents. POST a long URL, get back a short hatchloop.ai/s/<code> link instantly.",
      "base_url": "https://hatchloop.ai",
      "auth": "none",
      "endpoints": [
        {
          "path": "/shorten",
          "method": "POST",
          "description": "Shorten a URL",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The long URL to shorten"
              }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "short_url": {
                "type": "string",
                "description": "The shortened URL, e.g. https://hatchloop.ai/s/abc123"
              },
              "code": {
                "type": "string",
                "description": "The short code portion of the URL"
              },
              "original_url": {
                "type": "string",
                "description": "The original URL that was shortened"
              }
            }
          }
        },
        {
          "path": "/s/{code}",
          "method": "GET",
          "description": "Expand a short link — returns HTTP 302 redirect to the original URL",
          "parameters": [
            {
              "name": "code",
              "in": "path",
              "required": true,
              "type": "string",
              "description": "The short code from the /shorten response"
            }
          ],
          "output_schema": {
            "type": "redirect",
            "http_status": 302,
            "description": "HTTP 302 redirect to the original long URL"
          }
        },
        {
          "path": "/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" },
              "link_count": { "type": "integer" }
            }
          }
        }
      ]
    },
    {
      "name": "qr-generator",
      "description": "Zero-authentication QR code generation for AI agents. POST any text or URL, get back a PNG or SVG QR code instantly.",
      "base_url": "https://hatchloop.dev",
      "auth": "none",
      "endpoints": [
        {
          "path": "/qr-generator/generate",
          "method": "POST",
          "description": "Generate a QR code. Returns binary image/png or image/svg+xml.",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "required": ["data"],
            "properties": {
              "data": {
                "type": "string",
                "description": "The text or URL to encode in the QR code"
              },
              "format": {
                "type": "string",
                "enum": ["png", "svg"],
                "default": "png",
                "description": "Output image format: png (binary) or svg (XML text)"
              }
            }
          },
          "output_schema": {
            "type": "binary",
            "content_types": ["image/png", "image/svg+xml"],
            "description": "Raw QR code image — content-type matches the requested format"
          }
        },
        {
          "path": "/qr-generator/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "name": "mcp-webpage-to-markdown",
      "description": "MCP server that fetches any webpage and converts it to clean Markdown. Runs as a local stdio transport tool — add to your MCP client config to use it directly from your agent.",
      "transport": "stdio",
      "protocol": "MCP 2024-11-05",
      "command": "python /opt/ai-company/workspace/mcp-webpage-to-markdown/server.py",
      "install_deps": "pip install mcp markdownify requests beautifulsoup4",
      "source_dir": "/opt/ai-company/workspace/mcp-webpage-to-markdown/",
      "mcp_manifest": "https://hatchloop.dev/.well-known/mcp.json",
      "auth": "none",
      "tools": [
        {
          "name": "webpage_to_markdown",
          "description": "Fetch a webpage and return its full content as Markdown text",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The full URL (including https://) of the page to fetch and convert"
              }
            }
          },
          "output_schema": {
            "type": "string",
            "description": "Page content converted to Markdown. Returns an error string prefixed with 'Error:' on failure."
          }
        }
      ]
    },
    {
      "name": "mcp-webpage-to-markdown-v2",
      "description": "Enhanced MCP server (v2) that fetches any webpage and returns Markdown plus rich metadata as structured JSON. Features: user-agent rotation across 6 realistic UAs, auto-retry with shorter timeout on failure, structured output with title, description, HTTP status, word count, and final URL after redirects.",
      "transport": "stdio",
      "protocol": "MCP 2024-11-05",
      "command": "python /opt/ai-company/workspace/mcp-webpage-to-markdown-v2/server.py",
      "install_deps": "pip install mcp markdownify requests beautifulsoup4",
      "source_dir": "/opt/ai-company/workspace/mcp-webpage-to-markdown-v2/",
      "mcp_manifest": "https://hatchloop.dev/.well-known/mcp.json",
      "auth": "none",
      "tools": [
        {
          "name": "fetch_page",
          "description": "Fetch a webpage and return its Markdown content plus rich metadata as a JSON object. Rotates user-agents, retries on timeout, follows redirects, strips nav/footer/scripts, and extracts title and meta description.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The full URL (including https://) of the page to fetch and convert"
              }
            }
          },
          "output_schema": {
            "type": "string",
            "description": "JSON string. On success: {url, final_url, http_status, content_type, title, description, markdown, word_count, fetched_at, error: null}. On failure: same shape with markdown: null and error describing what went wrong."
          }
        }
      ]
    },
    {
      "name": "mcp-echo",
      "description": "Minimal MCP echo server. Returns any string unchanged. Useful for agent connectivity tests, pipeline sanity checks, and round-trip latency measurement. Connect via SSE transport.",
      "transport": "sse",
      "protocol": "MCP 2024-11-05",
      "sse_url": "http://hatchloop.dev:8000/sse",
      "auth": "none",
      "tools": [
        {
          "name": "echo",
          "description": "Echo back the message exactly as received — returns input unchanged",
          "input_schema": {
            "type": "object",
            "required": ["message"],
            "properties": {
              "message": {
                "type": "string",
                "description": "Any string to echo back"
              }
            }
          },
          "output_schema": {
            "type": "string",
            "description": "The same string, unchanged"
          }
        }
      ]
    },
    {
      "name": "extract",
      "description": "Zero-authentication web page metadata extractor for AI agents. POST a URL, get back the page title, meta description, and all H1–H3 headings as structured JSON. No auth, no rate limit.",
      "base_url": "https://hatchloop.dev",
      "auth": "none",
      "endpoints": [
        {
          "path": "/extract",
          "method": "POST",
          "description": "Fetch a URL and extract title, meta description, and H1–H3 headings.",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The full URL (including https://) of the page to extract metadata from"
              }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "url": { "type": "string", "description": "The requested URL" },
              "title": { "type": "string", "description": "Content of the <title> tag, or null" },
              "meta_description": { "type": "string", "description": "Content of <meta name='description'> or og:description, or null" },
              "headings": {
                "type": "array",
                "description": "All H1, H2, H3 headings in document order",
                "items": {
                  "type": "object",
                  "properties": {
                    "level": { "type": "string", "enum": ["h1", "h2", "h3"] },
                    "text": { "type": "string" }
                  }
                }
              }
            }
          }
        },
        {
          "path": "/extract/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "name": "summarize",
      "description": "Zero-authentication extractive text summarizer for AI agents. POST raw text or a URL, get back the most important sentences. No auth, no rate limit.",
      "base_url": "https://hatchloop.dev",
      "auth": "none",
      "endpoints": [
        {
          "path": "/summarize",
          "method": "POST",
          "description": "Summarize a block of text or a URL using extractive summarization. Provide either 'text' or 'url', not both.",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "description": "Raw text to summarize (use this OR url)"
              },
              "url": {
                "type": "string",
                "format": "uri",
                "description": "URL of a webpage to fetch and summarize (use this OR text)"
              },
              "sentences": {
                "type": "integer",
                "minimum": 1,
                "maximum": 20,
                "default": 5,
                "description": "Number of key sentences to extract (default 5, max 20)"
              }
            },
            "oneOf": [
              { "required": ["text"] },
              { "required": ["url"] }
            ]
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "summary": {
                "type": "string",
                "description": "The extracted key sentences joined as a summary paragraph"
              }
            }
          }
        },
        {
          "path": "/summarize/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    }
    ,
    {
      "name": "ip-geolocation",
      "description": "Zero-authentication IP geolocation for AI agents. GET or POST any IPv4/IPv6 address, get back city, region, country, coordinates (lat/lon), org/ASN, postal code, and timezone. Powered by ipinfo.io. No auth, no rate limit, CORS open.",
      "base_url": "https://hatchloop.dev",
      "auth": "none",
      "endpoints": [
        {
          "path": "/ip-geolocation",
          "method": "GET",
          "description": "Geolocate an IP address. Pass the IP as query param ?ip=<ip>.",
          "parameters": [
            {
              "name": "ip",
              "in": "query",
              "required": true,
              "type": "string",
              "description": "IPv4 or IPv6 address to look up, e.g. 8.8.8.8"
            }
          ],
          "output_schema": {
            "type": "object",
            "properties": {
              "ip":       { "type": "string", "description": "The queried IP address" },
              "city":     { "type": "string", "description": "City name, e.g. Mountain View" },
              "region":   { "type": "string", "description": "Region/state, e.g. California" },
              "country":  { "type": "string", "description": "ISO 3166-1 alpha-2 country code, e.g. US" },
              "loc":      { "type": "string", "description": "Comma-separated lat,lon, e.g. 37.4056,-122.0775" },
              "org":      { "type": "string", "description": "ASN and org name, e.g. AS15169 Google LLC" },
              "postal":   { "type": "string", "description": "Postal/ZIP code, e.g. 94043" },
              "timezone": { "type": "string", "description": "IANA timezone, e.g. America/Los_Angeles" }
            }
          }
        },
        {
          "path": "/ip-geolocation",
          "method": "POST",
          "description": "Geolocate an IP address via JSON body.",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "required": ["ip"],
            "properties": {
              "ip": { "type": "string", "description": "IPv4 or IPv6 address to look up" }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "ip":       { "type": "string" },
              "city":     { "type": "string" },
              "region":   { "type": "string" },
              "country":  { "type": "string" },
              "loc":      { "type": "string" },
              "org":      { "type": "string" },
              "postal":   { "type": "string" },
              "timezone": { "type": "string" }
            }
          }
        },
        {
          "path": "/ip-geolocation/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "name": "mcp-aggregator",
      "description": "Hatchloop MCP Aggregator — exposes ALL 8 Hatchloop tools as MCP tools in one self-contained server: URL shortener, QR generator, webpage-to-markdown fetcher, page metadata extractor, extractive summarizer, IP geolocation, currency converter, and unit converter. Zero auth, no rate limits. Recommended over mcp-unified-server.",
      "transport": "sse",
      "protocol": "MCP 2024-11-05",
      "sse_url": "http://hatchloop.dev:8002/sse",
      "auth": "none",
      "source_dir": "/opt/ai-company/workspace/mcp-aggregator/",
      "tools": [
        {
          "name": "shorten_url",
          "description": "Shorten a long URL. Returns a short hatchloop.ai/s/<code> link.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": { "type": "string", "format": "uri", "description": "The full URL to shorten" }
            }
          }
        },
        {
          "name": "generate_qr_code",
          "description": "Generate a QR code for any text or URL. PNG returns base64; SVG returns XML.",
          "input_schema": {
            "type": "object",
            "required": ["data"],
            "properties": {
              "data": { "type": "string", "description": "Text or URL to encode (max 4296 chars)" },
              "format": { "type": "string", "enum": ["png", "svg"], "default": "png" }
            }
          }
        },
        {
          "name": "fetch_page_markdown",
          "description": "Fetch a webpage and return Markdown + structured metadata (title, description, HTTP status, word count, redirects). Rotates user-agents, auto-retries on timeout.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": { "type": "string", "format": "uri", "description": "Full URL to fetch" }
            }
          }
        },
        {
          "name": "extract_page_metadata",
          "description": "Extract title, meta description, and H1-H3 headings from a webpage URL.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": { "url": { "type": "string", "format": "uri" } }
          }
        },
        {
          "name": "summarize",
          "description": "Extractive text summarizer. Provide text or url, get back key sentences.",
          "input_schema": {
            "type": "object",
            "properties": {
              "text": { "type": "string" },
              "url": { "type": "string", "format": "uri" },
              "sentences": { "type": "integer", "minimum": 1, "maximum": 20, "default": 5 }
            }
          }
        },
        {
          "name": "geolocate_ip",
          "description": "Get city, region, country, coordinates, org, and timezone for any IP address.",
          "input_schema": {
            "type": "object",
            "required": ["ip"],
            "properties": { "ip": { "type": "string", "description": "IPv4 or IPv6 address" } }
          }
        },
        {
          "name": "convert_currency",
          "description": "Convert amounts between USD, EUR, GBP, JPY, INR using reference rates.",
          "input_schema": {
            "type": "object",
            "required": ["from_currency", "to_currency", "amount"],
            "properties": {
              "from_currency": { "type": "string" },
              "to_currency": { "type": "string" },
              "amount": { "type": "number", "minimum": 0 }
            }
          }
        },
        {
          "name": "convert_units",
          "description": "Convert values between units. Length: m/km/mi/ft/in/cm/mm. Weight: kg/g/lb/oz. Temperature: C/F/K.",
          "input_schema": {
            "type": "object",
            "required": ["value", "from_unit", "to_unit"],
            "properties": {
              "value": { "type": "number", "description": "Value to convert" },
              "from_unit": { "type": "string", "description": "Source unit: m, km, mi, ft, in, cm, mm, kg, g, lb, oz, C, F, K" },
              "to_unit": { "type": "string", "description": "Target unit: same set" }
            }
          }
        }
      ]
    },
    {
      "name": "mcp-all-tools",
      "description": "Hatchloop mcp-all-tools — dynamic MCP gateway that reads agent-tools.json at startup and exposes every HTTP-based Hatchloop tool as an MCP tool in one server. Includes url_shortener, qr_generator, extract, summarize, ip_geolocation, unit_converter, currency_converter. Zero auth, no rate limits. Auto-updates when new tools are added.",
      "transport": "sse",
      "protocol": "MCP 2024-11-05",
      "sse_url": "http://hatchloop.dev:8003/sse",
      "auth": "none",
      "source_dir": "/opt/ai-company/workspace/mcp-all-tools/",
      "tools": [
        {
          "name": "url_shortener",
          "description": "Shorten a long URL to a compact hatchloop.ai/s/<code> link.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": { "url": { "type": "string", "format": "uri" } }
          }
        },
        {
          "name": "qr_generator",
          "description": "Generate a QR code for any text or URL. PNG returns base64; SVG returns XML string.",
          "input_schema": {
            "type": "object",
            "required": ["data"],
            "properties": {
              "data": { "type": "string", "description": "Text or URL to encode" },
              "format": { "type": "string", "enum": ["png", "svg"], "default": "png" }
            }
          }
        },
        {
          "name": "extract",
          "description": "Extract title, meta description, and H1-H3 headings from a webpage URL.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": { "url": { "type": "string", "format": "uri" } }
          }
        },
        {
          "name": "summarize",
          "description": "Extractive text summarizer. Provide text or url, get back key sentences.",
          "input_schema": {
            "type": "object",
            "properties": {
              "text": { "type": "string" },
              "url": { "type": "string", "format": "uri" },
              "sentences": { "type": "integer", "minimum": 1, "maximum": 20, "default": 5 }
            }
          }
        },
        {
          "name": "ip_geolocation",
          "description": "Get city, region, country, coordinates, org, and timezone for any IP address.",
          "input_schema": {
            "type": "object",
            "required": ["ip"],
            "properties": { "ip": { "type": "string", "description": "IPv4 or IPv6 address" } }
          }
        },
        {
          "name": "unit_converter",
          "description": "Convert values between length (m/km/mi/ft/in), weight (kg/g/lb/oz), and temperature (C/F/K).",
          "input_schema": {
            "type": "object",
            "required": ["value", "from", "to"],
            "properties": {
              "value": { "type": "number" },
              "from": { "type": "string" },
              "to": { "type": "string" }
            }
          }
        },
        {
          "name": "currency_converter",
          "description": "Convert amounts between USD, EUR, GBP, JPY, INR using reference rates.",
          "input_schema": {
            "type": "object",
            "required": ["from", "to", "amount"],
            "properties": {
              "from": { "type": "string" },
              "to": { "type": "string" },
              "amount": { "type": "number", "minimum": 0 }
            }
          }
        }
      ]
    },
    {
      "name": "mcp-unified-server",
      "description": "Hatchloop Unified MCP Server — exposes Hatchloop tools (URL shortener, QR generator, text summarizer, page metadata extractor, IP geolocation, currency converter) as MCP tools via SSE or stdio transport. Zero auth, no rate limits. See mcp-aggregator for all 8 tools.",
      "transport": "sse",
      "protocol": "MCP 2024-11-05",
      "sse_url": "http://hatchloop.dev:8001/sse",
      "auth": "none",
      "source_dir": "/opt/ai-company/workspace/mcp-unified-server/",
      "tools": [
        {
          "name": "shorten_url",
          "description": "Shorten a long URL. Returns a short hatchloop.ai/s/<code> link.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": {
              "url": { "type": "string", "format": "uri", "description": "The full URL to shorten" }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "short_url": { "type": "string" },
              "code": { "type": "string" },
              "original_url": { "type": "string" }
            }
          }
        },
        {
          "name": "generate_qr_code",
          "description": "Generate a QR code for any text or URL. PNG returns base64 string; SVG returns XML text.",
          "input_schema": {
            "type": "object",
            "required": ["data"],
            "properties": {
              "data": { "type": "string", "description": "Text or URL to encode (max 4296 chars)" },
              "format": { "type": "string", "enum": ["png", "svg"], "default": "png" }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "format": { "type": "string" },
              "content_type": { "type": "string" },
              "data": { "type": "string", "description": "Base64-encoded PNG or SVG XML string" }
            }
          }
        },
        {
          "name": "summarize",
          "description": "Extractive text summarizer. Provide text or url, get back key sentences.",
          "input_schema": {
            "type": "object",
            "properties": {
              "text": { "type": "string" },
              "url": { "type": "string", "format": "uri" },
              "sentences": { "type": "integer", "minimum": 1, "maximum": 20, "default": 5 }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": { "summary": { "type": "string" } }
          }
        },
        {
          "name": "extract_page_metadata",
          "description": "Extract title, meta description, and H1-H3 headings from a webpage URL.",
          "input_schema": {
            "type": "object",
            "required": ["url"],
            "properties": { "url": { "type": "string", "format": "uri" } }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "url": { "type": "string" },
              "title": { "type": "string" },
              "meta_description": { "type": "string" },
              "headings": { "type": "array", "items": { "type": "object" } }
            }
          }
        },
        {
          "name": "geolocate_ip",
          "description": "Get city, region, country, coordinates, org, and timezone for any IP address.",
          "input_schema": {
            "type": "object",
            "required": ["ip"],
            "properties": { "ip": { "type": "string", "description": "IPv4 or IPv6 address" } }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "ip": { "type": "string" }, "city": { "type": "string" },
              "region": { "type": "string" }, "country": { "type": "string" },
              "loc": { "type": "string" }, "org": { "type": "string" },
              "postal": { "type": "string" }, "timezone": { "type": "string" }
            }
          }
        },
        {
          "name": "convert_currency",
          "description": "Convert amounts between USD, EUR, GBP, JPY, INR using reference rates.",
          "input_schema": {
            "type": "object",
            "required": ["from_currency", "to_currency", "amount"],
            "properties": {
              "from_currency": { "type": "string" },
              "to_currency": { "type": "string" },
              "amount": { "type": "number", "minimum": 0 }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "from": { "type": "string" }, "to": { "type": "string" },
              "amount": { "type": "number" }, "result": { "type": "number" },
              "rate": { "type": "number" }, "note": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "name": "mcp-tools-registry",
      "description": "Machine-readable catalog of all Hatchloop tools available for AI agents. Returns a JSON array with names, descriptions, base URLs, and full input/output schemas for all tools: url-shortener, qr-generator, summarize, extract, ip-geolocation, currency-converter.",
      "base_url": "http://hatchloop.dev:3000",
      "auth": "none",
      "endpoints": [
        {
          "path": "/mcp-tools",
          "method": "GET",
          "description": "Returns a JSON array of all available Hatchloop tools with their names, descriptions, base URLs, and input/output schemas.",
          "output_schema": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": { "type": "string", "description": "Tool identifier" },
                "description": { "type": "string", "description": "What the tool does" },
                "base_url": { "type": "string", "description": "Base URL for the tool's API" },
                "endpoints": {
                  "type": "array",
                  "description": "List of HTTP endpoints",
                  "items": {
                    "type": "object",
                    "properties": {
                      "path": { "type": "string" },
                      "method": { "type": "string" },
                      "description": { "type": "string" },
                      "input_schema": { "type": "object" },
                      "output_schema": { "type": "object" }
                    }
                  }
                }
              }
            }
          }
        },
        {
          "path": "/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" },
              "service": { "type": "string" },
              "tool_count": { "type": "integer" }
            }
          }
        },
        {
          "path": "/status",
          "method": "GET",
          "description": "Unified tool-fleet health status. Returns overall status and per-tool health.",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string", "enum": ["ok", "degraded", "error"], "description": "ok = all tools healthy; degraded = one or more tools down" },
              "tools": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": { "type": "string", "description": "Tool identifier" },
                    "healthy": { "type": "boolean", "description": "true if the tool's health endpoint responded 2xx" }
                  }
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "unit-converter",
      "description": "Zero-authentication unit converter for AI agents. POST {value, from, to} and get back the converted result. Supports length (m, km, mi, ft, in), weight (kg, g, lb, oz), and temperature (C, F, K). No auth, no rate limit.",
      "base_url": "http://hatchloop.dev:3006",
      "auth": "none",
      "endpoints": [
        {
          "path": "/convert",
          "method": "POST",
          "description": "Convert a value from one unit to another.",
          "content_type": "application/json",
          "input_schema": {
            "type": "object",
            "required": ["value", "from", "to"],
            "properties": {
              "value": { "type": "number", "description": "The numeric value to convert" },
              "from":  { "type": "string", "description": "Source unit: m, km, mi, ft, in, kg, g, lb, oz, C, F, K" },
              "to":    { "type": "string", "description": "Target unit: m, km, mi, ft, in, kg, g, lb, oz, C, F, K" }
            }
          },
          "output_schema": {
            "type": "object",
            "properties": {
              "result": { "type": "number", "description": "The converted value" },
              "unit":   { "type": "string", "description": "The target unit (echoes the 'to' input)" }
            }
          }
        },
        {
          "path": "/units",
          "method": "GET",
          "description": "List all supported units grouped by category.",
          "output_schema": {
            "type": "object",
            "properties": {
              "length":      { "type": "array", "items": { "type": "string" }, "description": "Supported length units" },
              "weight":      { "type": "array", "items": { "type": "string" }, "description": "Supported weight units" },
              "temperature": { "type": "array", "items": { "type": "string" }, "description": "Supported temperature units" }
            }
          }
        },
        {
          "path": "/unit-converter/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "name": "currency-converter",
      "description": "Zero-authentication currency converter for AI agents. GET /convert with from/to/amount query params, get back the converted value and exchange rate. Supports USD, EUR, GBP, JPY, INR. Uses hardcoded reference rates — not for financial transactions.",
      "base_url": "https://hatchloop.dev",
      "auth": "none",
      "endpoints": [
        {
          "path": "/convert",
          "method": "GET",
          "description": "Convert an amount from one currency to another.",
          "parameters": [
            {
              "name": "from",
              "in": "query",
              "required": true,
              "type": "string",
              "description": "Source currency code: USD, EUR, GBP, JPY, or INR"
            },
            {
              "name": "to",
              "in": "query",
              "required": true,
              "type": "string",
              "description": "Target currency code: USD, EUR, GBP, JPY, or INR"
            },
            {
              "name": "amount",
              "in": "query",
              "required": true,
              "type": "number",
              "description": "Amount to convert (non-negative number)"
            }
          ],
          "output_schema": {
            "type": "object",
            "properties": {
              "from":   { "type": "string", "description": "Source currency code" },
              "to":     { "type": "string", "description": "Target currency code" },
              "amount": { "type": "number", "description": "Input amount" },
              "result": { "type": "number", "description": "Converted amount" },
              "rate":   { "type": "number", "description": "Exchange rate (to/from)" },
              "note":   { "type": "string", "description": "Disclaimer about rate source" }
            }
          }
        },
        {
          "path": "/currencies",
          "method": "GET",
          "description": "List all supported currencies and their USD reference rates.",
          "output_schema": {
            "type": "object",
            "properties": {
              "currencies":    { "type": "array", "items": { "type": "string" } },
              "rates_vs_usd":  { "type": "object", "description": "Rate of each currency per 1 USD" }
            }
          }
        },
        {
          "path": "/currency-converter/health",
          "method": "GET",
          "description": "Service health check",
          "output_schema": {
            "type": "object",
            "properties": {
              "status": { "type": "string" }
            }
          }
        }
      ]
    }
  ]
}
