Single tool with critical definition gaps. Tool name 'read_memo' lacks action verb clarity (should be 'get_memo' or 'read_file'). Description is in Japanese only, non-standard for LLM consumption. Parameter 'relative_path' has minimal description (18 chars, below 20-char threshold). No output schema documented. No error recovery guidance. No parameter constraints (format, length, allowed patterns). Violates multiple baseline patterns for production-grade tools.
指定されたパスのメモの内容を読み込みます
Tool description is in Japanese only ('指定されたパスのメモの内容を読み込みます'). LLMs trained primarily on English will not understand when/why to invoke this tool. Descriptions must be in English for cross-language LLM compatibility.
Parameter 'relative_path' description is only 18 characters ('The relative path to the memo file within the Obsidian vault'). Below 20-char threshold. Missing format constraints: no mention of allowed characters, path depth limits, file extensions, or examples. LLMs cannot infer valid input format.
No output schema documented. Tool returns text content via mcp.NewToolResultText() but LLMs have no visibility into response structure, field names, or encoding. Cannot plan downstream operations or validate results.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 29 | 2026-07-28+ | v2 |
Error handling returns raw error messages without recovery guidance. Example: 'ファイルの読み取りに失敗: <error>' (in Japanese, untranslated). LLMs receive no actionable next steps. Should return: 'File not found at path <path>. Verify the path exists and is readable. Call list_memos() to discover available files.'
Path traversal vulnerability: tool accepts relative_path without sanitization. Malicious input like '../../../etc/passwd' could read files outside the vault. No validation against '..' sequences or absolute paths. Requires input sanitization.