The wisdom-mcp-local server defines 15 tools with complete input schemas and descriptions visible in the source code. All tools follow verb-noun naming convention (get_*, list_*, search_*, add_*, update_*, delete_*, toggle_*, generate_*). Descriptions are present for all tools (average ~80-120 chars) and for most parameters. However, descriptions lack depth and actionability, they state WHAT the tool does but often omit WHEN to use it, dependencies, or error recovery guidance. Parameter descriptions are generally present but some are generic ('The ID of the quote'). No output schemas are documented in the source, forcing LLMs to infer return structure. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible. The server uses STDIO transport, which is not remotely accessible.
Tools (15)
add_quotewritesource verified80/100
Add a new wisdom quote to the collection
delete_quotedestructivesource verified78/100
Delete a quote from the collection
generate_quoteread onlyauthsource verified80/100
Use AI to generate a new quote on a specific theme in a particular style
No output schemas documented. LLMs cannot infer the structure of returned quotes, making it impossible to plan downstream tool calls or extract specific fields. For example, does get_random_quote return {id, text, author, source, category, theme, tags}? This forces agents to guess or hallucinate field names.
Destructive tools (add_quote, delete_quote) lack error handling and recovery guidance. No confirmation mechanism or dry-run option. Agents could accidentally delete quotes without guidance on how to undo or recover.
Document output schemas for all tools in the tool definition or server documentation. Example: get_random_quote returns {id: string, text: string, author: string, source: string, category: string, theme: string, tags: string[], notes?: string, is_favorite?: boolean}. This enables LLMs to compose tools and extract fields with confidence.
Add tool annotations to every tool definition: set readOnlyHint=true for all retrieval tools (get_*, list_*, search_*); set destructiveHint=true for delete_quote; set idempotentHint=true for operations that don't change on repeated calls (e.g. toggle_favorite called twice with same ID returns to same state, but side effects differ, clarify).
Enhance tool descriptions with WHEN to use them. Example: 'Get a random quote from any author. Use this for general inspiration or when you want serendipity. If you need a quote on a specific topic, use search_quotes or get_random_quote_by_category instead.' This helps LLMs disambiguate similar tools.
Add pagination support to search_quotes: include limit (default 20, max 100) and offset (default 0) parameters. Document: 'Returns up to limit results. Use offset to retrieve additional pages. Response includes total_count for pagination planning.'
Convert allowed values in descriptions to enum constraints. For category, theme, and other controlled fields, use: {"type": "string", "enum": ["list", "of", "values"]} instead of listing examples in the description.
Add error handling examples in the server documentation or tool descriptions. E.g. 'If quote_id does not exist, returns {error: "Quote not found. Try search_quotes() to find a quote first."}'. This guides LLM recovery.
Get statistics about the quote collection (total quotes, categories, authors, favorites)
list_authorsread onlysource verified82/100
List all authors in the collection
list_categoriesread onlysource verified82/100
List all available quote categories in the collection
search_quotesread onlysource verified78/100
Search for quotes by keyword, author, category, theme, or tags
toggle_favoritewritesource verified77/100
Mark or unmark a quote as favorite
update_quote_noteswritesource verified80/100
Add or update personal notes on a quote
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present in tool definitions. The server does not signal which tools are read-only, which are destructive, or which are idempotent. This forces agents to infer risk levels from names alone.
Tool descriptions lack actionable context. Most state 'Get a [resource]' but do not explain when to call the tool, what problem it solves, or how it relates to other tools. For example, get_random_quote_by_category vs search_quotes both filter quotes, the distinction is unclear.
Parameter descriptions are generic or minimal. 'The ID of the quote' does not explain format, constraints, or how to obtain a quote_id. Search_quotes has a 'query' parameter with a generic description, no guidance on search syntax, field precedence, or if multiple filters are AND or OR.
search_quotes lacks pagination support. No limit, offset, page_size, or cursor parameter. If the collection grows large, this tool could return hundreds of results, blowing the context window and degrading LLM reasoning.
add_quote requires 5 parameters and none have defaults. Common workflows might omit optional fields (e.g. tags). Defaults for category ('stoic') and theme (user-provided or inferred) would reduce cognitive load and make the tool more flexible.
category parameter in add_quote and other tools lists allowed values in description but not as an enum constraint. This should be: {"type": "string", "enum": ["stoic", "mindfulness", "productivity", "self-help", "relationships"]} to prevent hallucinated categories.
Implement a dry-run or confirm-before-delete pattern for destructive operations. Example: add a 'confirm' parameter to delete_quote that must be explicitly set to true, or return a confirmation tool that the LLM must call before executing.
Provide sensible defaults for add_quote. Example: category defaults to 'stoic', tags defaults to []. This reduces required parameters and makes the tool more forgiving.
Document parameter formats and constraints in parameter descriptions. Example: 'author (string, 1-100 chars, e.g. "Marcus Aurelius"), exact match only; use search_quotes() for partial matches.'
Create a discovery tool or resource that lists all available themes, categories, and authors with definitions. Example: get_collection_metadata() returns {categories: {stoic: "...", ...}, themes: [...], authors_count: N}. This helps agents explore the domain.
Add idempotency guidance: document which tools are safe to retry (all read-only tools, toggle_favorite, update_quote_notes) and which have side effects (add_quote, delete_quote).
Consider splitting get_random_quote_by_category and get_random_quote_by_author into search_by_category and search_by_author with limit/offset for consistency and scalability.