An MCP server for accessing and searching Apple Notes with vector embeddings and full-text search capabilities
The Apple Notes MCP server has clear naming and proper tool annotations (destructiveHint, idempotentHint, readOnlyHint), but suffers from significant gaps in parameter descriptions, output schema documentation, and error handling guidance. All three tools are explicitly registered with Zod schemas and descriptions, but parameter documentation is minimal and output structures are undocumented. The server uses structured tool definitions with the MCP SDK, but lacks the depth of documentation needed for robust LLM reasoning.
Index Apple Notes from a folder
List all Apple Notes folders
Search Apple Notes in the vector store
Parameter descriptions missing for critical inputs. 'query' parameter in search_notes has only 'Search query string' (19 chars), below 20-char threshold. 'folder' parameter in index_notes similarly underdocumented. LLMs cannot infer expected format, length, or constraints.
Output schemas completely undocumented. All tools return ToolResult with 'type: text' and JSON-stringified data, but no schema documentation exists for callers. Agents cannot parse or extract fields from search_notes results (e.g., are results [title, content] pairs? objects with IDs?). No pagination guidance for list_folders despite potentially returning many results.
Error handling provides no recovery guidance. Errors like 'Failed to fetch folders: {error}' and 'Failed to fetch notes for \'{folder}\': {error}' expose raw backend messages without suggesting next steps. No distinction between retryable errors (transient network failure) and user-fixable errors (invalid folder name). Pattern: pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 9 | - | v1 |
No pagination support. list_folders returns all folders; search_notes hardcodes limit=20 but does not expose it as a parameter or document pagination strategy. For users with hundreds of notes, limiting search to 20 results and offering no way to fetch more results is incomplete. Missing next_cursor or offset/limit parameters.
list_folders returns unfiltered folder objects including 'notes' count which is informational but bloats output. Response should be trimmed to name and id only. High token cost for metadata not used by agents.
index_notes response returns template literal with 'chunks' interpolated as an object, not a count. Text 'Indexed ${chunks} notes chunks' will render as 'Indexed [object Object] notes chunks', broken output that LLM cannot parse.