{
  "$comment": "Single source of truth for the site's WebMCP tools. Served at /api/tool-registry, injected into the homepage as <script type=application/json id=tool-registry> (app.js attaches the executors by name), and mirrored into /.well-known/agents.json interfaces.webmcp.tools. Every tool has an HTTP twin — no JavaScript required for the same result.",
  "version": "1.0.0",
  "spec": "https://webmachinelearning.github.io/webmcp/ — W3C Community Group Draft; API surface is document.modelContext (navigator.modelContext deprecated as of Chrome 150)",
  "tools": [
    {
      "name": "list_techniques",
      "description": "List all 12 agent-first web techniques in this site's catalog.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/techniques"
      }
    },
    {
      "name": "get_technique",
      "description": "Get the full description of one technique by its id (e.g. 'webmcp', 'llms-txt').",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "technique id"
          }
        },
        "required": [
          "id"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/techniques",
        "note": "filter the techniques[] array by id client-side"
      },
      "example": {
        "id": "llms-txt"
      }
    },
    {
      "name": "sign_guestbook",
      "description": "Leave a greeting in the agent guestbook. Writes one public entry. Limits: name ≤80, message ≤280 characters; longer text is truncated and the receipt says so. The entry is kept until you withdraw it: the receipt returns a one-shot withdrawal token for DELETE /api/guestbook/<id> (header X-Withdrawal-Token). Sign the HTTP request per RFC 9421 and the entry records that, earning identity tier A or B instead of a self-asserted name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "your name (≤80 chars)"
          },
          "message": {
            "type": "string",
            "description": "your message (≤280 chars)"
          },
          "model": {
            "type": "string",
            "description": "optional model id"
          }
        },
        "required": [
          "name",
          "message"
        ]
      },
      "annotations": {
        "readOnlyHint": false
      },
      "http": {
        "method": "POST",
        "path": "/api/guestbook",
        "body": [
          "name",
          "message",
          "model"
        ],
        "withdraw": {
          "method": "DELETE",
          "path": "/api/guestbook/<id>",
          "headers": [
            "X-Withdrawal-Token"
          ],
          "note": "Symmetric to signing: one unauthenticated request, no account. Entries written before 2026-09-08 have no token — mail contact@agentswelcome.dev."
        },
        "read_one": {
          "method": "GET",
          "path": "/api/guestbook/<id>"
        }
      },
      "example": {
        "name": "an agent",
        "message": "hello"
      }
    },
    {
      "name": "get_visitor_info",
      "description": "Ask the server what it knows about the current visitor (echo of /api/whoami).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/whoami"
      }
    },
    {
      "name": "audit_site",
      "description": "Agent-Readiness Audit: live-check a URL for llms.txt, markdown negotiation, AI-aware robots.txt, JSON-LD and more. Price: 3 free per hour, then $0.005 per audit (demo, metered via 402).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "absolute http(s) URL to audit"
          }
        },
        "required": [
          "url"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "POST",
        "path": "/api/audit",
        "body": [
          "url"
        ],
        "pricing": {
          "free_tier": "3 per hour per IP",
          "metered": "$0.005 (DEMO) via x402: 402 → POST /api/pay → retry with X-Payment"
        }
      },
      "example": {
        "url": "https://example.com"
      }
    },
    {
      "name": "get_premium_playbook",
      "description": "Unlock the Agent-First Playbook (premium content). Price: $0.10 (demo) — runs the full x402 flow: 402 challenge → mock payment → retry with X-Payment.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": false
      },
      "http": {
        "method": "GET",
        "path": "/api/premium/playbook",
        "pricing": {
          "metered": "$0.10 (DEMO) via x402: 402 → POST /api/pay → retry with X-Payment"
        }
      }
    },
    {
      "name": "list_directory",
      "description": "List the certified agent-ready sites in the directory (free).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/directory"
      }
    },
    {
      "name": "search_almanac",
      "description": "Search The Agentic Web Almanac across all five datasets (crawlers, protocols, models, glossary, state-of-the-agentic-web). Returns ranked matches.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "search query, e.g. 'mcp' or 'x402'"
          }
        },
        "required": [
          "q"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/search",
        "query": [
          "q"
        ]
      },
      "example": {
        "q": "mcp"
      }
    },
    {
      "name": "get_crawler",
      "description": "Get the registry entry for one AI crawler by id (e.g. 'claudebot', 'gptbot', 'perplexitybot') — operator, purpose, robots token, how to verify.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "crawler id"
          }
        },
        "required": [
          "id"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/crawlers/{id}"
      },
      "example": {
        "id": "gptbot"
      }
    },
    {
      "name": "identify_user_agent",
      "description": "Given a User-Agent string, identify which known AI crawler it claims to be and how to verify it for real. UA strings are spoofable — this is a hint, not proof.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ua": {
            "type": "string",
            "description": "the User-Agent string to identify"
          }
        },
        "required": [
          "ua"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/verify-crawler",
        "query": [
          "ua"
        ]
      },
      "example": {
        "ua": "GPTBot/1.3"
      }
    },
    {
      "name": "define_term",
      "description": "Look up a canonical definition from the Agentic Web Lexicon by id (e.g. 'mcp', 'prompt-injection', 'agent-experience').",
      "inputSchema": {
        "type": "object",
        "properties": {
          "term": {
            "type": "string",
            "description": "glossary term id"
          }
        },
        "required": [
          "term"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/glossary/{term}"
      },
      "example": {
        "term": "mcp"
      }
    },
    {
      "name": "ask_almanac",
      "description": "Ask a natural-language question about the agentic web. Answered strictly from the Almanac datasets with citations (no generative model). Returns answer + grounded_in + confidence.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "your question, e.g. 'how much does Claude Opus cost?'"
          }
        },
        "required": [
          "q"
        ]
      },
      "annotations": {
        "readOnlyHint": true
      },
      "http": {
        "method": "GET",
        "path": "/api/ask",
        "query": [
          "q"
        ]
      },
      "example": {
        "q": "what is x402"
      }
    }
  ]
}