Local-first MCP server for intelligent bookmark management with semantic search
The server has well-structured tool definitions with HTTP transport and fastmcp framework support. However, critical gaps exist: most tools lack output schema documentation (not visible in source code), parameter descriptions are often generic, and error handling guidance is absent. Tool names follow verb_noun convention appropriately (save_bookmark, search_bookmarks, get_bookmark, etc.). Descriptions are present but vary in quality, some include helpful context ('IMPORTANT: Use this tool whenever...') while others are bare ('Get full details about a specific bookmark by ID.'). Parameter schemas are visible and include types, but many lack detailed format/constraint descriptions. No destructive operation confirmation patterns are visible.
Delete a bookmark and all its associated data.
Get full details about a specific bookmark by ID.
Fetch and retrieve the full content of a bookmarked article or webpage.
Get statistics about your bookmark collection.
List all tags in your bookmark collection with counts.
Save a bookmark to the user's bookmark collection. IMPORTANT: Use this tool whenever the user asks to: - "Save this URL" - "Bookmark this" - "Add to bookmarks" - "Remember this page" - Or any similar request to save a URL After saving, consider helping the user by: 1. Calling get_bookmark_content(id) to fetch the article 2. Summarizing the content for them 3. Calling update_bookmark(id, note=summary) to save the summary This provides a helpful summary without requiring an API key.
Output schemas not documented in source code. Tools return data but LLMs cannot see structure of responses (fields, types, pagination info). This forces agents to discover outputs empirically, risking hallucination and wasted context.
Delete operation (delete_bookmark) lacks confirmation pattern. No indication of dry-run, confirmation request, or recovery guidance. Agents may delete bookmarks irreversibly without user consent.
Error handling guidance missing. No tool description explains what errors are possible, how to recover, or what the agent should do if a call fails. E.g., search_bookmarks gives no guidance on empty results, rate limits, or database failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Search the user's bookmark collection using semantic search. IMPORTANT: Use this tool whenever the user asks to: - "Find bookmarks about..." - "Search my bookmarks for..." - "Show me bookmarks..." - "Do I have any bookmarks about..." - Or any similar request to find saved bookmarks Supports semantic search (meaning-based) with optional filters for domain, tags, and dates.
Update note and/or tags for an existing bookmark.
Bare tool descriptions for simple tools. 'Get full details about a specific bookmark by ID' (get_bookmark) and 'List all tags in your bookmark collection with counts' (list_tags) lack context on WHEN to use them vs other tools, what fields are returned, or what the agent should do with the results.
Parameter constraints underspecified. 'tags' arrays, 'limit' integers, and date strings (ISO 8601) have no min/max bounds or format validation notes in descriptions. LLMs may pass invalid values (e.g., limit=999999, malformed dates).
Pagination not visible. search_bookmarks accepts 'limit' but no 'offset', 'page', or 'next_cursor' parameters are evident. Large result sets could exhaust context or be truncated without agent awareness.
update_bookmark has a 'tag_mode' parameter ('replace' or 'append') but no guidance on the difference in the description. LLMs won't know which mode to use without explicit context.