MCP server exposing Pinchtab browser API with token-efficient helpers (supports stdio, streamable-http, and sse transports)
The server exposes 18 tools with explicit schemas and descriptions. Tool naming follows verb_noun convention (pinchtab_*), which is consistent but generic. Descriptions are present for all tools but range from terse (10-15 chars for some) to adequate (50-100 chars for others). Input schemas are defined in JSON Schema format with type information and field descriptions. However, output schemas are completely undocumented, no tool specifies what fields or structure it returns. Error handling relies on basic exception wrapping with PinchtabError codes but does not provide recovery guidance. Parameter descriptions are consistently present but often minimal (e.g., 'Tab ID (optional)' lacks format or constraint detail). The server implements risk classification (READ_ONLY vs WRITE) correctly but does not expose this via tool annotations (readOnlyHint/destructiveHint). Overall, the definitions are functional but lack the depth, recovery guidance, and output schema clarity expected of production tools.
Perform an action on a page element
Download a file from a tab
Evaluate JavaScript in a tab
Health check for Pinchtab server
List all interactive elements on a page
Navigate to a URL in a tab
Observe DOM changes on a page
Read page content in a token-efficient format
Read content from a specific region of a page
No output schemas documented. LLMs cannot determine what fields or structure each tool returns, forcing them to guess at downstream field names and breaking tool chaining.
Descriptions are inconsistently brief and lack context. Many tools have 20 - 40 character descriptions ('Close a tab', 'Lock a tab to prevent concurrent access') that lack guidance on when to use the tool, what it modifies, or what parameters mean.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Take a screenshot of a tab
Get DOM snapshot of a page
Close a tab
List all open tabs
Lock a tab to prevent concurrent access
Open a new tab
Unlock a tab
Extract text content from a page
Upload files to a page input element
Parameter descriptions lack format, range, and constraint detail. E.g., 'Tab ID (optional)' does not explain the ID format, what happens if omitted, or how to obtain a valid Tab ID.
Error handling does not provide recovery guidance. The CallToolRequestSchema handler returns errors like '[ERROR_CODE] message' but does not tell the LLM what to do next (retry, try a different tool, ask the user, etc.).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) exposed via MCP. The server classifies tools as READ_ONLY or WRITE internally but does not advertise this to clients. LLMs cannot determine which tools are safe to call multiple times.
Tool names use 'pinchtab_' prefix universally, which aids consistency but is less discoverable than action-specific naming ('get_', 'list_', 'create_').