Local-first second brain for reMarkable notebooks, searched through Claude Desktop
rm-brain has 6 well-named, read-only tools with clear descriptions (avg 156 chars, within baseline 194). All tools have Zod schemas with typed parameters. However, output schemas are not documented, responses are JSON-stringified text blocks rather than structured objects. Parameter descriptions are present but minimal (e.g., 'Optional limit on number of results' lacks range/constraint). No error handling guidance, no pagination metadata (total count, next_cursor), and no per-tool output schema documentation. Tools are well-composed (single responsibility, clear naming with verb_noun pattern), but lack the structured output and error recovery patterns expected of production tools.
Every page mentioning a person, project, company, or topic, in chronological order — use to narrate how the user's thinking on something evolved over time.
The user's outstanding tasks, to-dos, follow-ups, and unresolved questions from their notes, most recent first. Use for "what do I need to do", "what did I forget", "any open items".
Get the full text and source image path for one page, for citing or showing the scanned page.
List people, projects, companies, and topics found across the notes.
List the user's indexed notebooks with page counts.
Search the user's handwritten reMarkable notes (full text). Use for any question about what the user wrote, planned, decided, or noted on a topic, person, or project. Returns notebook name, page number, date, and a snippet.
Output schemas not documented. All tools return JSON-stringified text blocks (via text() wrapper) rather than structured objects. LLMs cannot parse results reliably or plan downstream calls. Responses should be typed objects with documented fields.
Parameter constraints missing. 'limit' parameters lack min/max bounds (e.g., 'limit: z.number().optional()' allows any number). Should specify 1 - 100 or similar. 'query' in search_notes lacks length/format guidance.
No pagination metadata. search_notes and get_entity_timeline return lists but lack total count, next_cursor, or has_more flags. Large result sets will blow context window without pagination guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. get_page returns { error: 'not found' } as plain text. Should return structured error with actionable next steps (e.g., 'Page not found. Try search_notes() to find the correct page_id').
Parameter descriptions too brief. 'Optional limit on number of results' does not explain range, default, or when to use. Should be: 'Maximum number of results to return (1 - 100, default 20). Use higher values for comprehensive searches, lower for quick summaries.'