Five read-only tools with complete JSON schemas and detailed docstrings. Tool names follow verb_noun pattern (elog_list, elog_search, elog_get_*). All parameters have type definitions and descriptions. Output schemas are documented in docstrings. However, parameter descriptions contain example values (e.g., '{"Author": "^jdoe$"}') which LLMs may reuse literally; descriptions could be more concise (some exceed 200 chars); no enum constraints for logbook parameter despite known values; error handling guidance is absent from tool descriptions.
Download an attachment (screenshot, config file, ...) as base64 content. Args: logbook: Name of the logbook holding the attachment. filename: Attachment filename exactly as listed on the entry. Returns {filename, content_b64, mime, size}; embed via MCP resource mechanisms when presenting to users.
Read one logbook entry in full: all attributes, complete body, attachments. Args: logbook: Name of the logbook containing the entry. entry_id: Numeric message ID of the entry. Returns the full entry record including the untruncated body text, threading info (reply_to / in_reply_to) and the canonical web URL.
Fetch the newest entries of a logbook, newest first. Args: logbook: Name of the logbook to read. count: Number of recent entries to return. Returns {"total": int, "entries": [...]} with excerpts like elog_search.
List the logbooks available on the configured ELOG server. Returns a list of {name, description?, url} objects. The optional ELOG_LOGBOOKS environment variable restricts and orders the result.
Search logbook entries by full text, attributes, and/or date. Args: text: Regular expression matched against entry message bodies. Use ^…$ anchors for exact matches. attributes: Exact attribute filters as regular expressions, e.g. {"Author": "^jdoe$", "Category": "DAQ"}. date_from: Inclusive range start, 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM[:SS]'. date_to: Inclusive range end, same formats (time defaults to 23:59:59). last_days: Show entries from the last N days instead of an explicit range. logbook: Logbook name to search, or "*" to search all known logbooks. max_results: Maximum number of entries returned per page (server cap 100000). reverse: Sort newest-first when true, oldest-first when false. Returns {"total": int, "entries": [{id, logbook?, date_raw, date_iso?, attributes{}, text_excerpt, encoding, encoding_name, attachments[], reply_to[], in_reply_to?, url}]}. Each entry's ``text_excerpt`` is a ~500-char window centred on the first occurrence of the search phrase (when text is provided). The full entry body may contain additional matches; use elog_get_entry for the complete text.
Parameter descriptions contain example values (e.g., '{"Author": "^jdoe$", "Category": "DAQ"}') which LLMs tend to reuse literally rather than adapt to context. Replace with formal constraints or enum declarations.
elog_search description exceeds 500 characters and buries key details. Descriptions should be 10-200 chars for LLM selection; move detailed return schema to a separate 'Returns' section or inline comments.
No error handling guidance in tool descriptions. Tools should document what to do on failure (e.g., 'If logbook not found, call elog_list_logbooks() first'). Agents need recovery paths.
logbook parameter in elog_search accepts '*' for all logbooks but is not declared as an enum. Known logbook names should be constrained or documented as discoverable via elog_list_logbooks().
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
elog_get_attachment description incomplete: 'filename: Attachment filename exactly as listed on the entry.' lacks guidance on how to obtain filename (from elog_search or elog_get_entry results). Dependency hint missing.