Four tools with complete schemas and descriptions. Naming follows verb_noun pattern (list_runs, load_run, query_logs_tool, get_node_summary_tool). Descriptions are detailed (100-300 chars) and explain WHEN to use each tool. Parameters have types and descriptions. However, query_logs_tool and get_node_summary_tool have awkward suffixes ('_tool'), and output schemas are not formally documented, only inferred from code. Error handling is minimal (no recovery guidance). No tool annotations (readOnlyHint, etc.). Pagination support is present but not consistently applied.
Get detailed analysis of a specific node's log activity. Use after load_run. Provides a comprehensive summary of one node including uptime, message counts per severity, top recurring message patterns, all unique errors with timestamps, any stack traces found, and average message rate.
List available ROS2 log runs with summary info.
Load and parse a ROS2 log run into a unified timeline.
Search and filter the merged ROS2 log timeline. Use after load_run. Flexible query tool for finding specific log entries across all nodes. Supports filtering by severity, node, time range, and text content. The context parameter enables cross-node cascade analysis by including surrounding messages from ALL nodes around each match.
Tool names contain '_tool' suffix (query_logs_tool, get_node_summary_tool). Canonical names should be query_logs and get_node_summary. Suffixes are redundant and violate verb_noun convention.
Output schemas are not formally documented. Code shows JSON responses but no explicit schema definitions in docstrings. LLMs cannot reliably parse unstructured output or plan downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. If a run_id is invalid or a node is not found, responses are plain text with no actionable next steps (e.g., 'Try list_runs() first').
Parameter 'context' in query_logs_tool lacks numeric bounds. Description says 'Include N messages' but does not specify min/max. Unbounded integers risk performance issues.