All 4 tools have basic descriptions and input schemas with type definitions, but quality is significantly below production standards. Descriptions are minimal (10-80 chars, well below the 194-char baseline) and lack context for LLM selection. Parameters lack descriptions entirely in most cases. Output schemas are completely undocumented, LLMs cannot plan downstream calls or extract structured data. No error handling guidance, no parameter constraints (enums), and no indication of what fields are returned. Tool names are acceptable (verb_noun pattern) but descriptions fail to explain WHEN to use each tool or what distinguishes them.
获取Codeforces可用竞赛的信息 最近 maxn 场比赛 contest_type : "gym" or "contest" or "None"
输入Codeforces用户名, 返回该用户的基本信息
获取用户在某场比赛中的表现 handle : 用户名 contest_id : 比赛ID
输入Codeforces用户名, 返回该用户的rating信息
No output schemas documented. LLMs cannot infer what fields are returned (e.g., does get_user_info return rating, maxRating, rank, maxRank as separate fields or a nested object?). This prevents downstream tool chaining and forces agents to parse unstructured text responses.
Parameter descriptions are missing entirely. The 'handle' parameter appears in 3 tools with only a type hint ('Codeforces user handle') but no guidance on format, length, or case sensitivity. The 'contest_type' parameter in get_contest_list lacks a description, LLMs cannot determine valid values without trying.
Tool descriptions are too short (10 - 30 chars, well below 194-char baseline) and lack context. 'Returns user rating information' does not explain when to call get_user_rating vs get_user_info, what data each returns, or how they differ. LLMs cannot disambiguate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
No enum constraints on contest_type parameter. The description says 'gym, contest, or None' but this is free-form text, LLMs may hallucinate invalid values like 'gym_contest' or 'official'. Use JSON Schema enum: ['gym', 'contest', 'None'].
Error handling returns raw exception strings (e.g., 'Connection timeout') with no recovery guidance. LLMs cannot determine if the error is retryable, user-fixable, or fatal. No actionable next steps provided.