MCP server for parsing and querying Ruby Gemfile.lock dependencies
Three tools with basic schemas and minimal descriptions. All tools have input schemas (Zod-validated), but descriptions are generic and under 50 chars. No parameter descriptions provided. No output schema documentation. No error handling guidance. No tool annotations. Naming is verb-based but lacks clarity on distinctions between gem_version and gem_fetch (both lookup operations). Schemas are present but sparse, only 'name' parameter with no constraints, ranges, or format guidance.
Fetch gem name and version information from Gemfile.lock
Returns all gems and their versions from Gemfile.lock
Get the version of a specific gem from Gemfile.lock
Duplicate tool functionality: gem_version and gem_fetch both lookup a gem by name. LLMs will conflate them and waste reasoning cycles. gem_fetch returns formatted text; gem_version returns raw version. Distinction is unclear.
No parameter descriptions. The 'name' parameter in gem_version and gem_fetch lacks guidance on format, case sensitivity, or valid values. LLMs cannot infer whether 'Rails' or 'rails' is correct.
Tool descriptions are under 50 characters and lack context. 'Get the version of a specific gem from Gemfile.lock' does not explain when to use gem_version vs gem_fetch, what the return format is, or what happens if the gem is not found.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 35 | 2026-07-28+ | v2 |
No output schema documentation. Responses are plain text strings. LLMs cannot parse structured data or chain results to downstream tools. gem_list returns JSON but this is not declared in the schema.
Error handling is minimal. When a gem is not found, the tool returns a plain text message. No guidance on what the LLM should do next (e.g., 'Try gem_list() to see available gems'). No error classification (retryable vs fatal).