{
  "schema": "https://hatchloop.dev/agent-tools-aggregator.json",
  "version": "1.0",
  "description": "Hatchloop \u2014 complete registry of all deployed agent tools, MCP servers, and REST APIs. Machine-readable. Auto-submitted to top-10 agent directories weekly.",
  "generated_at": "2026-06-07T01:56:51Z",
  "homepage": "https://hatchloop.dev",
  "contact": "hello@hatchloop.dev",
  "auth_required": false,
  "cors": "open",
  "summary": {
    "total_tools": 26,
    "mcp_tools": 7,
    "rest_endpoints": 19,
    "mcp_servers": 3,
    "categories": [
      "developer-tools",
      "text-processing",
      "networking",
      "data-generation",
      "encoding",
      "conversion",
      "security"
    ],
    "submission_schedule": "weekly, every Monday 09:00 UTC",
    "last_submitted_to_directories": "2026-06-06T06:00:00Z"
  },
  "mcp_servers": [
    {
      "id": "hatchloop-tools-mcp",
      "name": "Hatchloop Tools MCP",
      "description": "Primary MCP server \u2014 zero-auth streamable-HTTP MCP exposing 7 utility tools. Recommended entry point for MCP-native agents.",
      "transport": "streamable-http",
      "protocol": "MCP 2024-11-05",
      "endpoint": "https://hatchloop.dev/mcp",
      "auth": "none",
      "tool_count": 7,
      "tools": [
        "jwt_decode",
        "count_tokens",
        "dns_lookup",
        "base64",
        "fake_data",
        "my_ip",
        "fetch_as_markdown"
      ],
      "mcp_config": {
        "mcpServers": {
          "hatchloop-tools": {
            "url": "https://hatchloop.dev/mcp"
          }
        }
      },
      "usage_stats": {
        "note": "refreshed weekly by aggregator cron",
        "weekly_calls": null,
        "status": "live"
      }
    },
    {
      "id": "hatchloop-mcp-aggregator",
      "name": "Hatchloop MCP Aggregator (SSE)",
      "description": "SSE-transport MCP aggregator on port 8002 \u2014 exposes 8 tools including URL shortener, QR, IP geolocation, webpage-to-markdown, summarizer, currency and unit converters.",
      "transport": "sse",
      "endpoint": "http://hatchloop.dev:8002/sse",
      "auth": "none",
      "tool_count": 8,
      "tools": [
        "shorten_url",
        "generate_qr_code",
        "fetch_page_markdown",
        "extract_page_metadata",
        "summarize",
        "geolocate_ip",
        "convert_currency",
        "convert_units"
      ],
      "mcp_config": {
        "hatchloop-aggregator": {
          "url": "http://hatchloop.dev:8002/sse"
        }
      },
      "usage_stats": {
        "note": "refreshed weekly by aggregator cron",
        "weekly_calls": null,
        "status": "live"
      }
    },
    {
      "id": "hatchloop-pdf-mcp",
      "name": "Hatchloop PDF Generator MCP",
      "description": "MCP server for generating PDFs from Markdown or HTML. Published to the official MCP registry.",
      "transport": "streamable-http",
      "endpoint": "https://hatchloop.dev/mcp/pdf-generator/mcp",
      "auth": "none",
      "tool_count": 1,
      "tools": [
        "generate_pdf"
      ],
      "usage_stats": {
        "note": "refreshed weekly by aggregator cron",
        "weekly_calls": null,
        "status": "live"
      }
    }
  ],
  "tools": [
    {
      "id": "jwt-decode",
      "name": "JWT Decoder",
      "slug": "jwt-decode",
      "description": "Decode and inspect a JWT token \u2014 extracts header, payload (claims), algorithm, and expiry status. No secret needed, signature not verified.",
      "category": "security",
      "tags": [
        "jwt",
        "token",
        "decode",
        "auth",
        "security"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/api/tools/jwt",
          "content_type": "application/json"
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: jwt_decode"
        }
      ],
      "input": {
        "token": {
          "type": "string",
          "required": true,
          "description": "JWT string (eyJ...)"
        }
      },
      "output": {
        "header": "object",
        "payload": "object",
        "algorithm": "string",
        "expired": "boolean"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "jwt_decode",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "token-counter",
      "name": "Token Counter",
      "slug": "token-counter",
      "description": "Count tokens in any text string and estimate LLM API cost for common models (GPT-4, Claude, Gemini). Returns character count, word count, token estimate, and per-model cost.",
      "category": "text-processing",
      "tags": [
        "tokens",
        "llm",
        "cost",
        "gpt",
        "claude",
        "text"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/api/tools/tokens",
          "content_type": "application/json"
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: count_tokens"
        }
      ],
      "input": {
        "text": {
          "type": "string",
          "required": true
        },
        "model": {
          "type": "string",
          "required": false
        }
      },
      "output": {
        "characterCount": "integer",
        "wordCount": "integer",
        "tokenEstimate": "integer",
        "costEstimates": "object"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "count_tokens",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "dns-lookup",
      "name": "DNS Lookup",
      "slug": "dns-lookup",
      "description": "DNS record lookup for any domain. Supports A, AAAA, MX, TXT, CNAME, NS, SOA record types.",
      "category": "networking",
      "tags": [
        "dns",
        "domain",
        "networking",
        "mx",
        "txt",
        "lookup"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/dns",
          "params": "?domain=&type=A"
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: dns_lookup"
        }
      ],
      "input": {
        "domain": {
          "type": "string",
          "required": true
        },
        "type": {
          "type": "string",
          "required": false,
          "default": "A",
          "enum": [
            "A",
            "AAAA",
            "MX",
            "TXT",
            "CNAME",
            "NS",
            "SOA"
          ]
        }
      },
      "output": {
        "domain": "string",
        "type": "string",
        "records": "array"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "dns_lookup",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "base64",
      "name": "Base64 Encode/Decode",
      "slug": "base64",
      "description": "Encode plain text to Base64 or decode Base64 to plain text. Handles standard and URL-safe variants.",
      "category": "encoding",
      "tags": [
        "base64",
        "encode",
        "decode",
        "encoding"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/base64",
          "params": "?action=encode|decode&value="
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: base64"
        }
      ],
      "input": {
        "action": {
          "type": "string",
          "required": true,
          "enum": [
            "encode",
            "decode"
          ]
        },
        "value": {
          "type": "string",
          "required": true
        }
      },
      "output": {
        "result": "string"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "base64",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "fake-data",
      "name": "Fake Data Generator",
      "slug": "fake-data",
      "description": "Generate reproducible fake data \u2014 person, email, address, company, phone, UUID. Seeded for reproducibility.",
      "category": "data-generation",
      "tags": [
        "fake",
        "test-data",
        "seed",
        "mock",
        "person",
        "email",
        "address"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/fake",
          "params": "?type=person|email|address|company|phone|uuid&count=5&seed="
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: fake_data"
        }
      ],
      "input": {
        "type": {
          "type": "string",
          "required": true,
          "enum": [
            "person",
            "email",
            "address",
            "company",
            "phone",
            "uuid"
          ]
        },
        "count": {
          "type": "integer",
          "default": 5
        },
        "seed": {
          "type": "integer",
          "required": false
        }
      },
      "output": {
        "items": "array"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "fake_data",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "my-ip",
      "name": "My IP",
      "slug": "my-ip",
      "description": "Return the caller's IP address and basic geolocation. Useful for agents to discover their own egress IP.",
      "category": "networking",
      "tags": [
        "ip",
        "geolocation",
        "egress",
        "network",
        "caller-ip"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/my-ip"
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: my_ip"
        }
      ],
      "input": {},
      "output": {
        "ip": "string",
        "city": "string",
        "country": "string",
        "org": "string"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "my_ip",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-15",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "fetch-as-markdown",
      "name": "Fetch as Markdown",
      "slug": "fetch-as-markdown",
      "description": "Fetch any public URL and convert the page to clean Markdown. Strips navigation, ads, and boilerplate. Ideal for agent document ingestion.",
      "category": "text-processing",
      "tags": [
        "markdown",
        "scrape",
        "fetch",
        "web",
        "html-to-markdown",
        "document"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/api/tools/fetch-markdown",
          "content_type": "application/json"
        },
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp",
          "note": "MCP tool: fetch_as_markdown"
        }
      ],
      "input": {
        "url": {
          "type": "string",
          "required": true
        }
      },
      "output": {
        "markdown": "string",
        "title": "string",
        "url": "string"
      },
      "auth": "none",
      "cors": "open",
      "mcp_tool": "fetch_as_markdown",
      "mcp_server": "https://hatchloop.dev/mcp",
      "added_at": "2026-05-20",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "url-shortener",
      "name": "URL Shortener",
      "slug": "url-shortener",
      "description": "Zero-auth URL shortener. POST a long URL, get a short hatchloop.dev link. Tracks click counts. Published to the official MCP registry.",
      "category": "developer-tools",
      "tags": [
        "url",
        "shortener",
        "link",
        "redirect",
        "clicks"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/url-shortener",
          "content_type": "application/json"
        },
        {
          "method": "GET",
          "url": "https://hatchloop.dev/url-shortener/{id}/stats",
          "description": "Click stats"
        }
      ],
      "input": {
        "url": {
          "type": "string",
          "required": true,
          "format": "uri"
        }
      },
      "output": {
        "id": "string",
        "short_url": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-15",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "qr-generator",
      "name": "QR Code Generator",
      "slug": "qr-generator",
      "description": "Generate a QR code image (PNG or SVG) from any string. Instant, no auth, no rate limit.",
      "category": "developer-tools",
      "tags": [
        "qr",
        "qrcode",
        "image",
        "png",
        "svg",
        "barcode"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/qr-generator/generate",
          "content_type": "application/json"
        }
      ],
      "input": {
        "data": {
          "type": "string",
          "required": true
        },
        "format": {
          "type": "string",
          "enum": [
            "png",
            "svg"
          ],
          "default": "png"
        }
      },
      "output": "image/png or image/svg+xml binary",
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-15",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "ip-geolocation",
      "name": "IP Geolocation",
      "slug": "ip-geolocation",
      "description": "Geolocate any IPv4/IPv6 address. Omit ip parameter to geolocate the caller. Returns city, region, country, org, timezone, lat/lon.",
      "category": "networking",
      "tags": [
        "ip",
        "geolocation",
        "geo",
        "location",
        "country",
        "city"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/ip-geolocation",
          "params": "?ip=optional"
        }
      ],
      "input": {
        "ip": {
          "type": "string",
          "required": false,
          "description": "IPv4 or IPv6; omit for caller IP"
        }
      },
      "output": {
        "ip": "string",
        "city": "string",
        "region": "string",
        "country": "string",
        "org": "string",
        "timezone": "string",
        "loc": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-20",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "currency-converter",
      "name": "Currency Converter",
      "slug": "currency-converter",
      "description": "Convert between USD, EUR, GBP, JPY, INR using reference rates. Instant, no auth.",
      "category": "conversion",
      "tags": [
        "currency",
        "forex",
        "convert",
        "usd",
        "eur",
        "exchange"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/convert",
          "params": "?from=USD&to=EUR&amount=100"
        }
      ],
      "input": {
        "from": {
          "type": "string",
          "required": true
        },
        "to": {
          "type": "string",
          "required": true
        },
        "amount": {
          "type": "number",
          "required": true
        }
      },
      "output": {
        "from": "string",
        "to": "string",
        "amount": "number",
        "result": "number",
        "rate": "number"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-20",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "text-summarizer",
      "name": "Text Summarizer",
      "slug": "text-summarizer",
      "description": "Summarize plain text or a URL to N sentences. Pass text directly or a URL to fetch-and-summarize.",
      "category": "text-processing",
      "tags": [
        "summarize",
        "nlp",
        "text",
        "summary",
        "url"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/summarize",
          "content_type": "application/json"
        }
      ],
      "input": {
        "text": {
          "type": "string",
          "required": false
        },
        "url": {
          "type": "string",
          "required": false
        },
        "sentences": {
          "type": "integer",
          "default": 3
        }
      },
      "output": {
        "summary": "string",
        "sentence_count": "integer"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-20",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "structured-extraction",
      "name": "Structured Data Extraction",
      "slug": "structured-extraction",
      "description": "Extract title, meta description, and headings from any public URL. Returns structured JSON.",
      "category": "text-processing",
      "tags": [
        "extract",
        "metadata",
        "scrape",
        "seo",
        "headings",
        "html"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/extract",
          "content_type": "application/json"
        }
      ],
      "input": {
        "url": {
          "type": "string",
          "required": true
        }
      },
      "output": {
        "url": "string",
        "title": "string",
        "meta_description": "string",
        "headings": "array"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-04-20",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "unit-converter",
      "name": "Unit Converter",
      "slug": "unit-converter",
      "description": "Convert length (km\u2194mi), weight (kg\u2194lb), and temperature (\u00b0C\u2194\u00b0F) values.",
      "category": "conversion",
      "tags": [
        "unit",
        "convert",
        "length",
        "weight",
        "temperature",
        "metric",
        "imperial"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "http://hatchloop.dev:3006/convert",
          "content_type": "application/json"
        }
      ],
      "input": {
        "value": {
          "type": "number",
          "required": true
        },
        "from": {
          "type": "string",
          "required": true,
          "examples": [
            "km",
            "kg",
            "C"
          ]
        },
        "to": {
          "type": "string",
          "required": true,
          "examples": [
            "mi",
            "lb",
            "F"
          ]
        }
      },
      "output": {
        "result": "number",
        "unit": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "uuid-generator",
      "name": "UUID Generator",
      "slug": "uuid-generator",
      "description": "Generate UUID v4 (random) or v7 (time-sortable). Instant, zero auth.",
      "category": "developer-tools",
      "tags": [
        "uuid",
        "guid",
        "random",
        "id",
        "v4",
        "v7"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/uuid",
          "params": "?version=4|7"
        }
      ],
      "input": {
        "version": {
          "type": "string",
          "enum": [
            "4",
            "7"
          ],
          "default": "4"
        }
      },
      "output": {
        "uuid": "string",
        "version": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "string-hasher",
      "name": "String Hasher",
      "slug": "string-hasher",
      "description": "Hash any string with SHA-256, MD5, SHA-1, or SHA-512. Returns hex digest.",
      "category": "security",
      "tags": [
        "hash",
        "sha256",
        "md5",
        "sha1",
        "sha512",
        "crypto"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/hash",
          "params": "?input=&algo=sha256"
        }
      ],
      "input": {
        "input": {
          "type": "string",
          "required": true
        },
        "algo": {
          "type": "string",
          "enum": [
            "sha256",
            "md5",
            "sha1",
            "sha512"
          ],
          "default": "sha256"
        }
      },
      "output": {
        "hash": "string",
        "algo": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "timestamp",
      "name": "Timestamp",
      "slug": "timestamp",
      "description": "Get current UTC timestamp in ISO 8601, Unix epoch, or human-readable format.",
      "category": "developer-tools",
      "tags": [
        "timestamp",
        "time",
        "utc",
        "iso",
        "unix",
        "epoch"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/timestamp",
          "params": "?format=iso|unix|human|all"
        }
      ],
      "input": {
        "format": {
          "type": "string",
          "enum": [
            "iso",
            "unix",
            "human",
            "all"
          ],
          "default": "all"
        }
      },
      "output": {
        "iso": "string",
        "unix": "integer",
        "human": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "email-validator",
      "name": "Email Validator",
      "slug": "email-validator",
      "description": "Validate an email address format. Returns valid/invalid with reason.",
      "category": "developer-tools",
      "tags": [
        "email",
        "validate",
        "regex",
        "format",
        "check"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/validate/email",
          "params": "?email="
        }
      ],
      "input": {
        "email": {
          "type": "string",
          "required": true
        }
      },
      "output": {
        "email": "string",
        "valid": "boolean",
        "reason": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "cron-describer",
      "name": "Cron Describer",
      "slug": "cron-describer",
      "description": "Convert a 5-field cron expression to human-readable text plus next 5 run times in UTC.",
      "category": "developer-tools",
      "tags": [
        "cron",
        "schedule",
        "explain",
        "human-readable",
        "devops"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/cron/describe",
          "params": "?expr=0+9+*+*+1-5"
        }
      ],
      "input": {
        "expr": {
          "type": "string",
          "required": true,
          "description": "5-field cron expression"
        }
      },
      "output": {
        "description": "string",
        "next_runs": "array"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "regex-tester",
      "name": "Regex Tester",
      "slug": "regex-tester",
      "description": "Test a regular expression against input text. Returns matches, groups, and match positions.",
      "category": "developer-tools",
      "tags": [
        "regex",
        "regexp",
        "test",
        "match",
        "pattern"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/tools/regex/test",
          "params": "?pattern=&input=&flags="
        }
      ],
      "input": {
        "pattern": {
          "type": "string",
          "required": true
        },
        "input": {
          "type": "string",
          "required": true
        },
        "flags": {
          "type": "string",
          "default": "",
          "description": "g, i, m, s"
        }
      },
      "output": {
        "matches": "array",
        "match_count": "integer"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-05-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "pdf-generator",
      "name": "PDF Generator",
      "slug": "pdf-generator",
      "description": "Generate a PDF from Markdown or HTML. Available as MCP tool via the PDF Generator MCP server. Published to the official MCP registry.",
      "category": "text-processing",
      "tags": [
        "pdf",
        "markdown",
        "html",
        "document",
        "generate",
        "mcp"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://hatchloop.dev/mcp/pdf-generator/mcp",
          "content_type": "application/json",
          "note": "MCP JSON-RPC endpoint"
        }
      ],
      "input": {
        "content": {
          "type": "string",
          "required": true,
          "description": "Markdown or HTML"
        },
        "format": {
          "type": "string",
          "enum": [
            "markdown",
            "html"
          ],
          "default": "markdown"
        }
      },
      "output": "application/pdf binary",
      "auth": "none",
      "cors": "open",
      "mcp_tool": "generate_pdf",
      "mcp_server": "https://hatchloop.dev/mcp/pdf-generator/mcp",
      "added_at": "2026-06-03",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "suggest-endpoints",
      "name": "Endpoint Suggester",
      "slug": "suggest-endpoints",
      "description": "Given a 404 path, returns actionable suggestions for valid Hatchloop endpoints. Used internally to convert lost traffic into discovered tools.",
      "category": "developer-tools",
      "tags": [
        "404",
        "discovery",
        "routing",
        "api",
        "suggestions"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/v1/suggest-endpoints",
          "params": "?path=/some/path"
        }
      ],
      "input": {
        "path": {
          "type": "string",
          "required": true
        }
      },
      "output": {
        "suggestions": "array",
        "path": "string"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-06-01",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "agent-broker",
      "name": "AgentBroker MCP",
      "slug": "agent-broker",
      "description": "Agent-callable commerce MCP server: find businesses, schedule appointments, send messages, manage SMB transactions. 14 tools, scored 98/100 by Hatchloop MCP Quality Checker. Runs on Cloudflare Workers Edge.",
      "category": "commerce",
      "tags": [
        "commerce",
        "smb",
        "appointments",
        "scheduling",
        "business",
        "mcp",
        "edge"
      ],
      "endpoints": [
        {
          "method": "POST",
          "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp",
          "note": "MCP streamable-HTTP endpoint"
        }
      ],
      "auth": "optional",
      "mcp_tools": [
        "find_business",
        "verify_business",
        "schedule_appointment",
        "send_message",
        "capture_lead",
        "send_transactional_confirmation",
        "handle_inbound",
        "escalate_to_human",
        "get_status",
        "get_outcome",
        "preview_cost",
        "self_test",
        "import_booking_url",
        "call_business"
      ],
      "mcp_config": {
        "mcpServers": {
          "agent-broker": {
            "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp"
          }
        }
      },
      "added_at": "2026-06-04",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    },
    {
      "id": "url-status",
      "name": "URL Status Checker",
      "slug": "url-status",
      "description": "Check HTTP status of any public URL. Returns status code, full redirect chain, response time in ms, and content type. Safe: private/internal addresses are SSRF-blocked. Follows up to 10 redirects.",
      "category": "networking",
      "tags": [
        "url",
        "http",
        "status",
        "redirect",
        "latency",
        "uptime",
        "networking"
      ],
      "endpoints": [
        {
          "method": "GET",
          "url": "https://hatchloop.dev/api/v1/url-status",
          "params": "?url=https://example.com"
        }
      ],
      "input": {
        "url": {
          "type": "string",
          "required": true,
          "description": "Full URL to check (http or https). Private/internal IPs are blocked."
        }
      },
      "output": {
        "url": "string",
        "final_url": "string (present when redirected)",
        "status_code": "integer",
        "redirect_chain": "array of {url, status_code}",
        "redirected": "boolean",
        "redirect_count": "integer",
        "response_time_ms": "integer",
        "content_type": "string",
        "checked_at": "ISO-8601 timestamp"
      },
      "example_request": "GET https://hatchloop.dev/api/v1/url-status?url=http://github.com",
      "example_response": {
        "url": "http://github.com/",
        "final_url": "https://github.com/",
        "status_code": 200,
        "redirect_chain": [
          {
            "url": "http://github.com/",
            "status_code": 301
          },
          {
            "url": "https://github.com/",
            "status_code": 200
          }
        ],
        "redirected": true,
        "redirect_count": 1,
        "response_time_ms": 457,
        "content_type": "text/html",
        "checked_at": "2026-06-06T18:23:19Z"
      },
      "auth": "none",
      "cors": "open",
      "added_at": "2026-06-06",
      "usage_stats": {
        "weekly_calls": null,
        "status": "live",
        "note": "refreshed weekly"
      }
    }
  ],
  "discovery_files": {
    "this_file": "https://hatchloop.dev/agent-tools-aggregator.json",
    "agent_tools": "https://hatchloop.dev/agent-tools.json",
    "agent_tools_index": "https://hatchloop.dev/agent-tools-index.json",
    "llms_txt": "https://hatchloop.dev/llms.txt",
    "openapi": "https://hatchloop.dev/openapi.json",
    "tools_openapi": "https://hatchloop.dev/tools/openapi.json",
    "mcp_config": "https://hatchloop.dev/.well-known/mcp.json",
    "agent_card": "https://hatchloop.dev/.well-known/agent.json",
    "ai_plugin": "https://hatchloop.dev/.well-known/ai-plugin.json",
    "a2a": "https://hatchloop.dev/.well-known/a2a.json",
    "agent_sitemap": "https://hatchloop.dev/agent-sitemap.xml",
    "capabilities": "https://hatchloop.dev/capabilities.json"
  },
  "directory_submissions": {
    "description": "Top 10 agent/MCP directories to which Hatchloop is auto-submitted weekly.",
    "submission_schedule": "weekly, every Monday 09:00 UTC",
    "submission_script": "/opt/ai-company/workspace/submit-top10.sh",
    "last_submitted": "2026-06-07T01:56:51Z",
    "next_submission": "2026-06-08T09:00:00Z",
    "directories": [
      {
        "rank": 1,
        "name": "Smithery",
        "url": "https://smithery.ai",
        "api": "https://smithery.ai/api/v1/servers",
        "status": "auto-submitted",
        "note": "Large MCP registry; also requires smithery.yaml PR for full listing"
      },
      {
        "rank": 2,
        "name": "Glama",
        "url": "https://glama.ai",
        "api": "https://glama.ai/api/mcp/v1/servers",
        "status": "auto-submitted",
        "note": "MCP directory with quality scoring"
      },
      {
        "rank": 3,
        "name": "mcp.so",
        "url": "https://mcp.so",
        "api": "https://mcp.so/api/submit",
        "status": "auto-submitted",
        "note": "Community MCP registry"
      },
      {
        "rank": 4,
        "name": "PulseMCP",
        "url": "https://www.pulsemcp.com",
        "api": "https://www.pulsemcp.com/api/submit",
        "status": "auto-submitted",
        "note": "MCP trend tracking"
      },
      {
        "rank": 5,
        "name": "Agenstry",
        "url": "https://agenstry.com",
        "api": "https://agenstry.com/api/submit",
        "status": "auto-submitted",
        "note": "A2A agent directory \u2014 CONFIRMED returns 202 Accepted"
      },
      {
        "rank": 6,
        "name": "mcp.run",
        "url": "https://mcp.run",
        "api": "https://mcp.run/api/v1/servers",
        "status": "auto-submitted",
        "note": "MCP marketplace"
      },
      {
        "rank": 7,
        "name": "MCPHub",
        "url": "https://mcphub.io",
        "api": "https://api.mcphub.io/v1/servers",
        "status": "auto-submitted",
        "note": "MCP server hub"
      },
      {
        "rank": 8,
        "name": "AgentHub",
        "url": "https://agenthub.dev",
        "api": "https://agenthub.dev/api/tools/submit",
        "status": "auto-submitted",
        "note": "AI agent tool directory"
      },
      {
        "rank": 9,
        "name": "DevHunt",
        "url": "https://devhunt.org",
        "api": "https://devhunt.org/api/tools/submit",
        "status": "auto-submitted",
        "note": "Developer tools community"
      },
      {
        "rank": 10,
        "name": "ToolFinder",
        "url": "https://toolfinder.ai",
        "api": "https://toolfinder.ai/api/v1/submit",
        "status": "auto-submitted",
        "note": "AI tool discovery directory"
      }
    ]
  }
}