Canonical .gitignore templates from github/gitignore
Three tools with clear verb-noun naming (list_, get_, compose) and basic descriptions. However, critical gaps undermine production readiness: parameter descriptions are sparse or missing (e.g., 'names' array in compose lacks guidance on valid template names, case sensitivity, or error handling for invalid names); output schemas are completely undocumented (no structured response format specified); error handling is minimal (generic 'not found' errors without recovery guidance); no input validation hints or constraints documented. The 'get_template' description mentions case-sensitivity but provides no guidance on discovering valid names. Descriptions average ~100 chars, below the 194-char baseline for A+ tools. No tool annotations (readOnlyHint, etc.) despite all being read-only operations.
Compose a combined .gitignore from multiple templates, separated by headers.
Fetch the raw .gitignore content for the named template (case-sensitive, e.g. "Node", "Python", "macOS").
List all available .gitignore template names from github/gitignore.
Output schemas completely undocumented. No structured response format specified for any tool. LLMs cannot plan downstream operations or extract fields reliably.
Parameter descriptions missing or incomplete. 'names' array in compose lacks guidance on valid template names, case sensitivity, or what happens with invalid names. 'name' in get_template mentions case-sensitivity but provides no discovery mechanism.
Error handling lacks recovery guidance. 'template not found' error does not suggest calling list_templates() first or provide available alternatives. Agents cannot self-correct.
No tool annotations despite all tools being read-only. Missing readOnlyHint annotation prevents clients from optimizing caching and safety policies.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
No input validation constraints documented. compose accepts 'names' array but does not specify min/max length, handling of duplicates, or max concurrent fetches. LLMs may pass unbounded arrays.