A Next.js-based MCP server for managing bookmarks with Clerk authentication
The Bookmark Manager MCP server has 2 tools with basic schemas and descriptions. However, there are significant gaps in definition quality. Tool names follow verb_noun conventions (get-user-bookmarks, create-bookmark), which is positive. Descriptions exist but are minimal (34-49 characters, below the 50-200 character baseline for LLM-optimized descriptions). Input schemas are present and use Zod for validation, but lack depth. The get-user-bookmarks tool has an empty input schema ({}), which is correct but offers no guidance. The create-bookmark tool has proper parameter descriptions and optional field handling. Error handling returns generic error strings ('error: {error}') without recovery guidance or error categorization. No structured output documentation, no pagination support, and no tool annotations (readOnlyHint, destructiveHint) are present. The server is functional but falls short of production-grade quality standards.
Creates a new bookmark for an authenticated user
Gets all bookmarks for the authenticated users
Minimal tool descriptions (34-49 chars) fall below LLM-optimized baseline of 50-200 chars. Descriptions lack context on when to use each tool vs alternatives and do not explain prerequisites or side effects.
Error responses return raw exception text ('error: {error}') without recovery guidance. LLMs cannot infer what to do next or whether to retry. No error categorization (retryable, user-fixable, fatal).
No tool annotations present. Missing readOnlyHint for get-user-bookmarks (READ_ONLY operation) and destructiveHint/idempotentHint for create-bookmark (WRITE operation). These hints help LLMs reason about side effects and retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
No output schema documentation. Callers cannot know what fields will be returned. get-user-bookmarks returns JSON-stringified bookmarks; create-bookmark returns a stringified new bookmark object. Both should document their response structure.
get-user-bookmarks has no pagination support. If a user has hundreds of bookmarks, the tool returns them all, potentially overwhelming the context window. No limit or cursor mechanism.
Missing tools for common operations. The REST API (src/app/api/bookmarks routes) supports DELETE, but there is no delete-bookmark MCP tool. Incomplete toolset limits agent capability.