A Model Context Protocol (MCP) server for managing notebooks with pages of text and persistent file storage.
Notebook MCP Server has clear, well-structured tool definitions with consistent naming (verb_noun pattern) and complete input schemas. All 5 tools have descriptions and typed parameters with descriptions. However, output schemas are underdocumented, only 2 of 5 tools use UseStructuredContent=true, and return types lack formal documentation. Error handling is basic (ArgumentException validation) but lacks recovery guidance. No pagination support despite potential for large page lists. Tool descriptions are adequate (50-100 chars) but could better explain WHEN to use each tool vs. alternatives.
Create a notebook or update its description.
Get notebook description and page names without page text.
Read a single page from a notebook.
Delete a single page from a notebook. Returns true if deleted, false if not found.
Create or update a page in a notebook.
Output schemas underdocumented. Only get_notebook_page_names and remove_page use UseStructuredContent=true. create_notebook, get_page_text, and upsert_page return plain strings with no documented structure. LLMs cannot plan downstream calls without knowing return types.
No pagination support. get_notebook_page_names returns all page names without limit or offset. Large notebooks could return hundreds of pages, bloating context and degrading LLM reasoning.
Error messages lack recovery guidance. ArgumentException is thrown for invalid inputs, but LLM receives no hint about what to do next (e.g., 'Notebook name must be non-empty' does not suggest how to recover).
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2025-06-18+ | v2 |
Tool descriptions do not explain WHEN to use each tool or how they compose. For example, get_notebook_page_names vs. get_page_text distinction is unclear, when should an LLM call one vs. the other?
No confirmation or dry-run for destructive operations. remove_page is destructive but offers no confirmation step. Agents can accidentally delete pages without a safety gate.