Single tool (web_search) with minimal but present schema and description. Tool name follows verb_noun convention well ('web_search'). Description is terse but adequate (9 words, below 20-char floor for the rubric). Input schema is properly defined with a string 'query' parameter, but the parameter itself lacks a description in the schema. No output schema is documented. No error handling guidance, parameter constraints, or recovery paths. The tool makes an external API call with credentials hardcoded in source (CRITICAL security issue). No pagination, batching, or result limits documented. Overall structure is functional but lacks production-grade polish and safety mechanisms.
Search the web for the given query.
Credentials (API key) hardcoded in tool source code and exposed in plain text
Tool description is extremely terse (9 words, '0-20' floor: must exceed 20 chars for adequate context). 'Search the web for the given query.' lacks WHEN to use it, WHAT structure it returns, and ANY prerequisites.
No output schema documented. LLMs cannot know what fields to expect or how to chain downstream calls. The response is a concatenated string of search result content with embedded newlines, but this structure is nowhere declared.
Input parameter 'query' has no description in the schema. The parameter name alone is insufficient, LLMs need guidance on expected format, length, and constraints (e.g., 'Natural language query string, 1-500 characters').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No result limits or pagination. External API (bigmodel.cn web-search-pro) can return arbitrary result volumes; tool does not cap results, which risks context window exhaustion if many search results are returned.
No error handling or recovery guidance. If the external API fails, times out, or returns an error, the LLM receives no direction on what to do next (retry, fallback, ask user). Raw exceptions will propagate.
Response is unstructured free-form text (concatenated search result content strings). No JSON schema, no typed fields, no metadata about result count, sources, or confidence. LLM must parse plain text, which is error-prone and wastes tokens.
No permission gates, audit logging, or scope declarations. The tool directly calls an external API without any rate limiting, user context, or traceability.