Ruby SDK for building Claude agents with MCP (Model Context Protocol) server support, including HTTP, SSE, stdio, and in-process SDK servers
Two tools with complete JSON schemas and descriptions, but quality is uneven. get_weather has a clear, concise description (47 chars) and well-formed schema with enum constraint on units. query_database has a longer description (56 chars) and proper schema with enum on database. Both tools have all required parameters documented with types and descriptions. However, neither tool description explains WHEN to use it vs alternatives, what the output structure is, or error handling. Output schemas are not documented, LLMs cannot predict response fields. No guidance on error recovery. Tool names follow verb_noun pattern correctly. Parameters lack format/range constraints beyond enums (e.g., query length limits, city name format). Risk annotations (READ_ONLY) are present but not leveraged in descriptions.
Get current weather for a city
Execute a read-only database query
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Both tools return JSON but no schema is provided for the response.
Descriptions lack WHEN/WHY guidance. 'Get current weather for a city' does not explain when to call this vs a different weather tool, or what the output contains. LLMs need context for tool selection.
No error handling guidance. If query_database receives an invalid SQL query or database name, what error is returned? How should the LLM recover? No recovery hints provided.
Parameter constraints incomplete. 'city' parameter has no length limit, format, or validation rules. 'query' parameter has no length limit or SQL dialect specification. LLMs may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Tool descriptions do not explain output structure. get_weather returns temperature, units, conditions, humidity, but the description does not document these fields. query_database returns rows and row_count, undocumented.