{"name":"verify_web","description":"Independently verifies that a public website is reachable and meets deployment expectations (HTTP status, HTTPS validity, optional expected text). Returns structured evidence for accept / retry / escalate decisions.\n\nWhen to use: Use when the user explicitly asks to verify a deployment claim, public reachability, final HTTP status, HTTPS/TLS, redirects, or exact expected text. Prefer expected_text that distinguishes the new version (build id, version string, unique copy).\n\nDo not use when: Do not call this merely before or alongside understand_webpage to prove that its target is reachable; a successful understand_webpage result already proves the page was fetched. Do not use to extract entities, forms, actions, or meaning, for private/internal URLs, or for subjective visual-quality judgments.\n\nRead only: true. Side effects: none. Authentication: not required. Cost: free. Typical latency: 1200 ms.","use_when":"Use when the user explicitly asks to verify a deployment claim, public reachability, final HTTP status, HTTPS/TLS, redirects, or exact expected text. Prefer expected_text that distinguishes the new version (build id, version string, unique copy).","do_not_use_when":"Do not call this merely before or alongside understand_webpage to prove that its target is reachable; a successful understand_webpage result already proves the page was fetched. Do not use to extract entities, forms, actions, or meaning, for private/internal URLs, or for subjective visual-quality judgments.","version":"0.3.0","endpoint":"/verify/web","method":"POST","status":"active","read_only":true,"side_effects":[],"requires_auth":false,"cost":"free","typical_latency_ms":1200,"examples":[{"description":"Verify a deployment and version-specific page text","input":{"url":"https://example.com","expected_status":200,"expected_text":"Example Domain"},"output":{"verified":true,"checks":{"reachable":true,"status":200,"https_valid":true,"text_found":true},"evidence":{"requested_url":"https://example.com","final_url":"https://example.com/","http":{"status":200,"expected_status":200,"matched":true},"expected_text":{"value":"Example Domain","checked":true,"matched":true},"tls":{"requested":true,"valid":true},"redirects":{"count":0,"chain":[]},"checked_at":"2026-08-16T08:50:33.986Z","claims":[{"claim":"reachable","passed":true,"evidence_paths":["http.status","final_url"]},{"claim":"status_matches","passed":true,"evidence_paths":["http.status","http.expected_status"]},{"claim":"https_valid","passed":true,"evidence_paths":["tls.requested","tls.valid"]},{"claim":"expected_text_found","passed":true,"evidence_paths":["expected_text.value","expected_text.matched"]}]},"checked_at":"2026-08-16T08:50:33.986Z"}}],"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTP(S) URL to verify, for example https://example.com"},"expected_status":{"type":"integer","minimum":100,"maximum":599,"description":"Expected final HTTP status code, for example 200"},"expected_text":{"description":"Optional response text that proves the intended version or state is live","type":"string","maxLength":2000}},"required":["url","expected_status"],"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false},"output_schema":{"type":"object","properties":{"verified":{"type":"boolean"},"checks":{"type":"object","properties":{"reachable":{"type":"boolean"},"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"https_valid":{"type":"boolean"},"text_found":{"type":"boolean"}},"required":["reachable","status","https_valid","text_found"],"additionalProperties":false},"evidence":{"type":"object","properties":{"requested_url":{"type":"string","format":"uri"},"final_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"http":{"type":"object","properties":{"status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"expected_status":{"type":"integer","minimum":100,"maximum":599},"matched":{"type":"boolean"}},"required":["status","expected_status","matched"],"additionalProperties":false},"expected_text":{"type":"object","properties":{"value":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"checked":{"type":"boolean"},"matched":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["value","checked","matched"],"additionalProperties":false},"tls":{"type":"object","properties":{"requested":{"type":"boolean"},"valid":{"type":"boolean"}},"required":["requested","valid"],"additionalProperties":false},"redirects":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"status":{"type":"integer","minimum":300,"maximum":399},"from":{"type":"string","format":"uri"},"to":{"type":"string","format":"uri"}},"required":["status","from","to"],"additionalProperties":false}}},"required":["count","chain"],"additionalProperties":false},"checked_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"claims":{"minItems":3,"maxItems":4,"type":"array","items":{"type":"object","properties":{"claim":{"type":"string","enum":["reachable","status_matches","https_valid","expected_text_found"]},"passed":{"type":"boolean"},"evidence_paths":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string"}}},"required":["claim","passed","evidence_paths"],"additionalProperties":false}}},"required":["requested_url","final_url","http","expected_text","tls","redirects","checked_at","claims"],"additionalProperties":false},"checked_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"error":{"type":"string","maxLength":2000}},"required":["verified","checks","evidence","checked_at"],"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false},"title":"Verify web","href":"/tools/verify_web","kind":"404_service_tool","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"invocation":{"mcp":{"endpoint":"/mcp","method":"tools/call","name":"verify_web"},"rest":{"method":"POST","path":"/verify/web","input_mapping":"Use the existing REST contract in /openapi.json."}}}