How we check
We call every bot ourselves and show what happened, with the date. Nobody can buy a better check.
What we do
For a bot with an MCP endpoint we send the handshake (initialize), ask for its tool list (tools/list) and close the session. We never call a tool, send data or test its limits. For a bot that ships as a package we look it up in its registry.
For an A2A agent we read its agent card, then send its endpoint one request for a task that does not exist (GetTask, or tasks/get before A2A 1.0). Any A2A server answers that with an error, so the agent does no work for us. We never send it a message.
Each bot is checked about once a day. We call one platform at a time, with a pause between calls and at most 200 calls to a platform a day, so on platforms that serve more bots than that each one is checked every few days.
What each result means
| Result | Meaning |
|---|---|
| Answered | It replied to the MCP handshake, or its A2A endpoint replied in JSON-RPC. We note the time it took and the tools or skills it listed. |
| Asked for a key | It replied, but wants a key or a sign-in before it says more. Most paid bots do. |
| Refused the call | The address answered with an error such as 404 or 405: it may have moved. |
| No answer in 15 s | Nothing came back in time. |
| Could not be reached | The name did not resolve, or the connection or certificate failed. |
| Package published | Its package is in its registry (npm, PyPI, Docker Hub, crates.io, NuGet). We show the date of the newest release. |
| Package not found | The package its listing names is not in that registry. |
Who is calling
Our calls carry the user agent bots.st-checker/1.0 (+https://bots.st/checks). To stop them, or to correct or remove a listing, write to hello@bots.st: we act within a day.