Single tool with basic functionality but significant quality gaps. The deep_search tool has a visible input schema and description, but lacks critical metadata about output structure, error handling guidance, and parameter constraints. Description is minimal (43 chars, baseline p10=34, p90=392). No output schema documented. No error handling or recovery guidance. max_results parameter lacks validation constraints (no min/max bounds). The tool operates in isolation with no composition patterns or chaining metadata. Per-tool score (42) reflects these gaps across naming, description depth, parameter rigor, and schema completeness.
Perform a deep web search using LinkUp API
Output schema not documented. LLMs cannot infer the shape of results returned by deep_search, forcing them to guess what fields are available and how to extract data from the JSON response.
Tool description is minimal (43 characters) and lacks context about when to use this tool vs alternatives, what it returns, and prerequisites (LinkUp API key). Baseline for A+ tools is 194 chars average (p10=34, p90=392).
max_results parameter lacks bounds, validation constraints, or explicit validation logic. Accepts any number >= 0 without enforcing reasonable limits. LLMs may pass absurd values (e.g. 999999) that break performance or cost excessive API calls.
No error handling or recovery guidance. CallToolRequestSchema handler catches generic 'Unknown tool' error but does not validate input early or provide actionable error messages. If LinkupClient.search() fails, the error propagates unadorned to the LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No parameter validation in CallToolRequestSchema handler. query is coerced String() without checking for empty or null input; the manual throw Error('Search query is required') catches the empty case but does not describe valid query format, length, or character constraints.
API key (LINKUP_API_KEY) is injected at server startup via environment variable. While correct (pattern:secret-injection), there is no fallback, retry logic, or graceful degradation if the API key is missing or invalid at runtime. Error thrown synchronously at startup prevents server startup entirely.