Identify who calls your MCP server or A2A agent: declared identity vs observed behaviour.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Classify one visitor from its requests to your MCP server, A2A agent or website. Returns the declared identity, the observed behaviour class (acts-on-results, agent-tool-use, agent-message, probe, indexer, web-scanner, web), the signals and reasons, and mismatch=true when behaviour contradicts the declared identity. All event fields are optional; send what your server parsed. At most 500 events.
One visitor's requests, in order
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http criba https://criba.cribalo.com/mcp
Classify one visitor from its requests to your MCP server, A2A agent or website. Returns the declared identity, the observed behaviour class (acts-on-results, agent-tool-use, agent-message, probe, indexer, web-scanner, web), the signals and reasons, and mismatch=true when behaviour contradicts the declared identity. All event fields are optional; send what your server parsed. At most 500 events.
| Argument | Type | Description |
|---|---|---|
| events* | array | One visitor's requests, in order |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"events"
],
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"description": "Request path, without query string"
},
"tool": {
"type": "string",
"maxLength": 500,
"description": "Tool name of an MCP tools/call"
},
"status": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "HTTP status returned"
},
"hasText": {
"type": "boolean",
"description": "A2A message with text, or MCP call with a free-text intent"
},
"protocol": {
"enum": [
"mcp",
"a2a",
"web"
],
"type": "string"
},
"rpcError": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code returned, if any"
},
"argsEmpty": {
"type": "boolean",
"description": "tools/call with {} or missing required arguments"
},
"canaryHit": {
"type": "boolean",
"description": "Visit to a link that only appeared inside a tool or agent result"
},
"rpcMethod": {
"type": "string",
"maxLength": 500,
"description": "JSON-RPC method (MCP or A2A), e.g. initialize, tools/list, tools/call, message/send"
},
"toolKnown": {
"type": "boolean",
"description": "false if the tool does not exist on the server"
},
"userAgent": {
"type": "string",
"maxLength": 500
},
"clientName": {
"type": "string",
"maxLength": 500,
"description": "MCP clientInfo.name"
},
"httpMethod": {
"type": "string",
"maxLength": 500
}
}
},
"maxItems": 500,
"minItems": 1,
"description": "One visitor's requests, in order"
}
}
}Who a User-Agent and/or an MCP clientInfo.name claims to be, matched against criba's catalog of known MCP indexers, verifiers, A2A directories, AI crawlers, scanners and HTTP libraries. This is a declaration, not proof: use classify_visitor for behaviour. Pass at least one of the two.
| Argument | Type | Description |
|---|---|---|
| user_agent | string | HTTP User-Agent header |
| client_name | string | MCP clientInfo.name sent in initialize |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"user_agent": {
"type": "string",
"maxLength": 500,
"description": "HTTP User-Agent header"
},
"client_name": {
"type": "string",
"maxLength": 500,
"description": "MCP clientInfo.name sent in initialize"
}
}
}List criba's catalog of known agent-ecosystem bots, optionally filtered by category or protocol. Each entry has its id, name, category, URL, matching rules and what it was seen doing. Catalog 2026-11-08, CC-BY-NC-4.0 (non-commercial use with attribution).
| Argument | Type | Description |
|---|---|---|
| category | string | |
| protocol | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"category": {
"enum": [
"mcp-indexer",
"mcp-verifier",
"a2a-directory",
"agent-marketplace",
"agent-runtime",
"research",
"ai-crawler",
"security-scanner",
"commercial-crawler",
"generic-client"
],
"type": "string"
},
"protocol": {
"enum": [
"mcp",
"a2a",
"web"
],
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.