MCP server for Joplin that exposes Joplin functionality as an MCP server
Server has 9 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-80 chars, mostly adequate) and input schemas using Zod validation. However, parameter descriptions are minimal or absent, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Naming is verb-first and clear (list_, search_, read_, create_, update_, delete_, import_). Composition is sound, each tool has one responsibility. Missing: pagination for list_notebooks and search_notes, structured output documentation, and actionable error messages.
Create a new note in Joplin
Delete a note from Joplin
Import a markdown file as a new note
Retrieves the complete notebook hierarchy from Joplin
Read the full content of multiple notes at once
Read the full content of a specific note
Read the contents of a specific notebook
Output schemas undocumented. Tools return text content wrapped in {type:'text', text:result} but LLMs cannot infer structure of 'result' string. No documentation of what fields/format to expect.
Parameter descriptions missing or minimal. 'notebook_id' and 'note_id' lack format/constraint guidance. 'query' in search_notes has no hint about syntax or scope. LLMs cannot infer valid input without explicit descriptions.
No tool annotations despite clear risk levels. delete_note is DESTRUCTIVE but lacks destructiveHint. update_note is WRITE but lacks idempotentHint. read_* tools are READ_ONLY but lack readOnlyHint. Agents cannot infer safety/retry semantics.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Search for notes in Joplin and return matching notebooks
Update an existing note in Joplin
No pagination support. list_notebooks and search_notes return unbounded results. Large note collections will blow context window. Missing limit/offset parameters and total count in response.
Error handling lacks recovery guidance. No evidence of try-catch blocks, error categorization, or actionable error messages. Agents cannot distinguish retryable vs fatal failures or know what to do next.