Agent tools — and who actually calls them
This site publishes its research and its AI-hotel-visibility data as tools an AI agent can call, over two surfaces. Every call is logged. The counts below are live.
Why
There is a great deal written about making a website “agent-ready” and almost no data on whether anything then turns up. Our own census of the MCP ecosystem found that 48% of probed travel and hotel MCP servers expose zero working actions — plenty of announcements, far fewer live endpoints. The obvious next question is what happens after you build one.
So this page is the experiment run on ourselves. The tools are real, the logging is unconditional, and the number is whatever it is. If the answer stays almost nobody for months, that is the finding, and it is more useful than another guide telling you to ship an MCP server.
Live data
These are two different events and the split matters. A handshake is an MCP client connecting — initialize, which this server logs as its own row because connecting at all is a real observation. A tool call is an agent actually invoking something. This page used to add them together, which is why it once read “127 tool calls” and dated itself to the most recent handshake. Clients connect, list the tools, and then mostly do not call them — on the numbers above, the gap between those two dates is the finding.
Bars count tool invocations only; hover a day to see how many handshakes it also had.
Which clients
| Client | Tool calls | Handshakes | Tools |
|---|---|---|---|
unidentified | 41 | 0 | 8 |
Anthropic/ClaudeAI | 11 | 36 | 5 |
claude-code | 8 | 28 | 4 |
claude-code/lebonbon-audit | 1 | 0 | 1 |
Anthropic/Toolbox | 0 | 1 | 0 |
Anthropic | 0 | 1 | 0 |
An MCP client names itself in initialize — which this server never requires, so a hand-rolled request can skip it and land here too. WebMCP has no handshake at all, so every WebMCP call is structurally unidentified here, not just uncooperative. A tool can also volunteer a client argument (see “How” below); this column reflects whichever identity won.
Which tools
| Tool | Calls | Avg ms |
|---|---|---|
list_race_explorers | 14 | 5 |
get_article | 12 | 294 |
search_research_articles | 11 | 33 |
get_ai_citation_sources | 7 | 826 |
get_ai_hotel_landscape_manifest | 7 | 118 |
get_chain_vs_independent_mix | 4 | 440 |
get_hotel_brand_leaderboard | 3 | 239 |
get_ai_hotel_visibility | 3 | 374 |
By surface
| Surface | Tool calls | Handshakes |
|---|---|---|
webmcp | 39 | — |
mcp | 22 | 66 |
By actor
| Actor | Tool calls |
|---|---|
agent | 59 |
human | 2 |
Every webmcp call is classed agent unconditionally — a human reading this page cannot trigger executeTool(), so the surface itself is proof, unlike a self-reported name. On mcp, “agent” means the caller named itself somehow; “unknown” is a real answer, not rounded up to look better.
Most recent calls
| Tool | Surface | Client | Rows | ms |
|---|---|---|---|---|
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
initialize | mcp | claude-code | — | — |
initialize | mcp | Anthropic/ClaudeAI | — | — |
How
Any MCP client, anywhere. JSON-RPC 2.0 over HTTP, stateless, no auth.
https://nicolassitter.com/api/mcpThe same tools registered into the page via document.modelContext, for an agent driving a browser tab. Chrome-only and pre-standard.
Both surfaces read one registry, so a tool exists on both or on neither. Every tool goes through this site’s own public HTTP API rather than the database — they cannot return anything you could not fetch yourself.
Every tool also accepts an optional client string — “identify yourself, e.g. ‘my-agent/1.0’”. It does nothing functionally. WebMCP has no handshake of its own to supply a name, and this server never requires MCP’s initialize either, so this is the only lever either surface has for a caller to be named instead of showing up as “unidentified.” Whether callers bother is itself a measurement.
The 8 tools
| Tool | Reads |
|---|---|
search_research_articles | Search Nicolas Sitter's published research on AI search, answer engines and hotel technology by … |
get_article | Fetch one research article by its URL slug — the last path segment of a /research/<slug> URL… |
get_ai_hotel_landscape_manifest | Read the manifest for the AI Hotel Landscape dataset: which AI platforms are tracked (ChatGPT, G… |
get_ai_hotel_visibility | Get the hotels an AI platform actually recommends for a destination in a given week, ranked by h… |
get_hotel_brand_leaderboard | Get the chain-brand leaderboard for one AI platform in one week: which hotel groups (Marriott, A… |
get_ai_citation_sources | Get what an AI platform cites when it answers hotel questions — the mix of source categories (OT… |
get_chain_vs_independent_mix | Get the share of chain hotels versus independents versus vacation rentals in what each AI platfo… |
list_race_explorers | List the endurance races this site publishes results explorers for — L'Étape du Tour, the Marath… |
What is logged
- Tool name, surface, success, duration
- The client’s self-reported name and version
- Truncated user agent
- Whitelisted parameters only, capped at 200 characters
- IP addresses
- Cookies, session ids, fingerprints
- Any parameter not on a tool’s own whitelist
- Anything at all about human readers of this page
The whitelist is per tool and additive by choice: a tool that gains a parameter does not start logging it until someone says so.