← The evidence ledger
Evidence row 302549
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 7697699a-9946-4a3e-82fe-d4b534ee599a
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 8c28514f58753d31052001abcc97b690cb4378688151a6924189b7cb5e6a54ff
- Leaf
- 0x44087fa6f7e239be98fd520f65cb5a01203699c0c88f2687de9f2c7b50438a3f
What was observed
{
"count": 4,
"tools": [
{
"description": "Fetch a website the way ChatGPT, Claude, Perplexity, Google and Copilot fetch it, and report what stops them. Checks robots.txt per crawler with the deciding line number, makes real requests as each crawler to catch firewall and CDN rules that robots.txt cannot express, and measures whether the page carries readable text without JavaScript. Use this before advising anyone on why their site does not appear in AI answers: the usual cause is one of these three and none of them are visible from the outside.",
"inputSchema": {
"properties": {
"url": {
"description": "Domain or URL, for example example.com",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "check_site"
},
{
"description": "The robots.txt tokens used by the major assistants, separated by purpose: the ones that build the index answers come from, the ones that fetch a page live when a person asks, and the ones that only collect training data. Blocking the last group costs no visibility; blocking the first two removes a site from the answers. Use this before writing or editing a robots.txt.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_ai_crawlers"
},
{
"description": "Given the IP address and User-Agent from a log line, say whether that visit really came from the crawler it claims to be. Checks the address against the vendor's own published ranges where they exist, and falls back to forward-confirmed reverse DNS. On one ordinary server's logs, 14% of requests claiming to be Googlebot were not Google. Use this before anyone writes a firewall rule based on a user agent string, because that string is a claim and not proof.",
"inputSchema": {
"properties": {
"ip": {
"description": "Source address from the log line.",
"type": "string"
},
"user_agent": {
"description": "User-Agent from the same line.",
"type": "string"
}
},
"required": [
"ip",
"user_agent"
],
"type": "object"
},
"name": "verify_crawler_visit"
},
{
"description": "Verify a Web Bot Auth signature (RFC 9421, Ed25519) on a captured request. Unlike an address check, this proves who sent that exact request: it fetches the signer's published key directory, rebuilds the signature base from the covered components, and checks the signature. Use it when a request carries Signature-Input and Signature headers. Returns 'unsigned' when they are absent, and 'cannot_verify' rather than 'invalid' whenever the limitation is on our side.",
"inputSchema": {
"properties": {
"headers": {
"description": "Request headers, including Signature-Input, Signature and Signature-Agent.",
"type": "object"
},
"method": {
"default": "GET",
"description": "HTTP method of the captured request, uppercase. It is part of the signature base whenever the signature covers @method, so a wrong value fails verification. Defaults to GET.",
"type": "string"
},
"url": {
"description": "Full URL as requested; the signature covers it.",
"type": "string"
}
},
"required": [
"url",
"headers"
],
"type": "object"
},
"name": "verify_signed_request"
}
]
}What the leaf hashes
{"body":"8c28514f58753d31052001abcc97b690cb4378688151a6924189b7cb5e6a54ff","id":302549,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793054756784442,"prev":null,"subject":"7697699a-9946-4a3e-82fe-d4b534ee599a","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0x4407f7c5f92c1513c06d33d59bc8bcfc381812a270f4ed310d04a5508ca88ae1
- 0xf8c7420bc23ac820132a1fac18d76c7fc67f3a074b99d18796f09f108388ccc3
- 0xb326ddfed42650136431f32c7c30860205dd40cf3d2e6caba6769980c6676212
- 0xa17cd6d427100040c8ce2380857602807b9a4f13442746c2ddb61284682170ba
- 0x2a2cf289c7b9b8aff213427affa6243f2e035a8dc00b8904cbbebda6c66fc98a
- 0x50c922299c8f3842e946a0f183ef252e0043175434b787e9991a9abb32febcd2
- 0x8615f8ef519f5d173b3e62d616346cba8177c17e4a8162417d507fd42de4f23a
- 0x65683194bbaa775fec19af098e2949dc61ec27f657c1a6fbff21418049464838
- 0x7548a06d81eec6f7a871b0f5e95a2a8ef0b7cb2bad9381bfc2356cf67b2e5859
- 0x1dc09c8e92168e3a1cdf1a0e953982ca9207934a0dfce256095416cf4102fbce
- 0x60b91f773fa3c91ef752edc3e72b14aec43590de73fb46a458b7100f8e74b4a7
- 0x2b1b47804e83988d7fd5ed8179b2334f3f43b318109b54142f6c6bd749076f9e
- 0x54b29089c0a3cbbd6ddbe58944696110984dd5f418275cb1b77f957c56da8eab
- 0x8b27a4c21bf4ba962fd008c8f4300bc6953764a5032b9ab0cfe696b318c45326
- 0x4b52a97f7a80ff7778a702b85267b8d2e5c93ce160942656435c29ae7be68bf4
- 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
- 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
- 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae