The Airtop MCP server has 6 tools with basic schemas and descriptions, but falls short of production quality on several fronts. Tool names follow verb-noun conventions (createSession, createWindow, pageQuery, terminateSession, getWindowInfo, paginatedExtraction), which is good. However, parameter descriptions are sparse or absent for critical inputs. The `createSession` and `createWindow` tools have no input schema documentation at all. Parameter descriptions exist but are minimal ('The session ID' is 15 chars, below the 20-char floor). No output schemas are documented, LLMs cannot infer what these tools return. Error handling is present but generic (reportAirtopErrors), offering no recovery guidance. The server is STDIO-only, which is a hard cap at 50 regardless of definition quality. Most tools score 35-50 individually.
Create a new Airtop browser session
Create a new browser window in the session
Get information about a browser window, including a live view URL, which lets the user use and interact with the window. Use this to get a URL to share with the user, so they can log into a web site.
Query the current page content using AI
Extract data from a paginated list
Terminate an Airtop browser session
createSession has no input schema, it accepts zero parameters but this is not explicitly documented. Tool registration uses no schema argument, violating the pattern:tool requirement for explicit input documentation.
Parameter descriptions are too brief. 'The session ID' (15 chars), 'The window ID' (13 chars), 'The AI prompt to use' (19 chars) are all below the 20-character floor. At this length, LLMs lack sufficient context to understand parameter nuance, especially when multiple tools accept similar parameters.
No output schemas are documented. Tools return JSON.stringify(data) but LLMs have no documentation of what fields to expect (e.g., does createWindow return window_id, id, windowId?). This forces LLMs to infer structure or fail on subsequent tool calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 29 | - | v1 |
createWindow and createSession descriptions lack context on prerequisites and intent. 'Create a new browser window in the session' does not explain when/why to call it or that a session must exist first. Compare to: 'Create a new browser window in an existing session (requires session ID from createSession). Returns window_id for use in pageQuery or other window operations.'
Error handling is generic. reportAirtopErrors returns raw API error messages without recovery guidance. An LLM seeing 'Session not found' has no next step. Compare to: 'Session not found. Call createSession() to create a new session, then retry.'
No idempotency or destructiveness annotations. terminateSession is irreversible but has no hint to warn agents. pageQuery is read-only but this is undeclared. Per spec 2026-07-28, tools should include readOnlyHint, destructiveHint, idempotentHint in registration. This is absent.
paginatedExtraction's outputSchema parameter is a string (presumably JSON Schema as text). No validation, format hints, or error recovery. If an LLM passes invalid JSON, the tool fails silently or crashes. Document: 'outputSchema: Valid JSON Schema object (serialized as string). If invalid, returns an error listing the JSON parsing failure and an example valid schema.'