Server has 4 tools with explicit schemas, Pydantic-backed validation, and documented descriptions. Tool names follow verb_noun convention (search_, create_, get_, list_). However, descriptions are minimal (10-40 chars), parameter descriptions lack depth and context for LLM reasoning, and output schemas are not documented. Error handling uses McpError but lacks recovery guidance. No security annotations or permission declarations. The server targets a gRPC backend (Memos service) which is a specific domain, reasonable for integration but limits generalizability.
Create a new memo
Get a memo
List all existing memo tags
Search for memos
Tool descriptions are extremely brief (10-40 chars) and lack context for LLM reasoning. 'Search for memos', 'Create a new memo', 'Get a memo' do not explain WHEN to use each tool, what they return, or dependencies. Baseline expectation: 50-200 chars with WHAT/WHEN/WHY context.
Parameter 'key_word' in search_memo lacks guidance on format, expected length, or examples. Description says 'The key words to search for in the memo content' but does not explain if it supports regex, phrase matching, OR logic, or exact match. LLM cannot infer search semantics.
Output schemas are not documented. Tools return TextContent with unstructured text concatenation (e.g., 'Search result:\n{content}', 'Memo created: {res.name}'). LLMs cannot parse returned IDs, cannot chain tools reliably, and cannot extract structured data for downstream operations. No documented field types or response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 12 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Error handling uses McpError but does not guide recovery. When params fail validation, error is 'INVALID_PARAMS' with raw exception string. LLM cannot determine if error is retryable, user-fixable, or fatal. No actionable guidance on next steps (e.g., 'Try search_memo with a shorter keyword').
No pagination support on search_memo or list_memo_tags. If a user has thousands of memos or tags, the response could explode context length. Tools should accept limit/offset and return total_count. Baseline: 20-50 result cap with pagination parameters.
No tool annotations (readonly, destructive, idempotent hints). create_memo modifies state but has no destructiveHint flag. search_memo and get_memo are read-only but lack readOnlyHint. MCP clients cannot infer safety/repeatability of operations.
Parameter 'visibility' enum is documented inline but examples contradict description. Enum values are ['PUBLIC', 'PROTECTED', 'PRIVATE'] but description says 'The visibility of the memo' with no guidance on which to use by default or when to choose each. LLMs may misuse.
No authentication/permission documentation. Server accepts a Bearer token from config but does not declare required scopes or permissions (e.g., 'read:memo', 'write:memo'). Users cannot audit which tools require what permissions.