NoteMesh demonstrates solid definition quality across 38 tools with consistent naming patterns, descriptions present on all tools, and explicit input schemas. Naming follows verb_noun convention (read_note_range, create_note, list_notes, etc.). All tools have descriptions ranging 20-150 characters. Input schemas are explicitly defined with types and field descriptions. However, several definition-quality gaps prevent a higher score: (1) output schemas are not documented in visible source code, responses described in user-facing UI but not in formal schema definitions; (2) error handling is minimal, no evidence of recovery guidance or error categorization; (3) parameter descriptions lack detail on constraints (e.g., list_notes 'limit' lacks min/max specification even though it mentions max 500); (4) some tools have overlapping semantics that could be better distinguished (e.g., read_note_range, read_properties, outline all extract note structure, no clear guidance on which to use when). The server does well on naming clarity and basic description presence, matching the baseline of 90% of A+ tools having non-empty descriptions, but falls short on output schema documentation and error handling sophistication expected at 70+.
Append content to the end of a note
Get metadata for an attachment
Find all notes that link to a given note
Create a new note in the vault
Append content to a daily note, creating it if needed
Get the path to a daily note, creating it if needed
Prepend content to a daily note, creating it if needed
Output schemas are not documented in source code. While tool descriptions mention what they do, no formal return type schemas are visible in the tool registration code. Users/LLMs must infer response structures from descriptions alone.
Parameter constraints lack specificity. 'limit' param appears in many list tools with description 'Max items to return (default 100, max 500)' but no min value, type bounds (JSON Schema minItems/maxItems), or guidance on what happens at boundary conditions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Read a daily note
Find notes that have incoming links but no outgoing links
Delete a note from the vault
Replace a specific substring in a note
Search for text within a note with context
List attachments in the vault with optional filtering and sorting
List folders in the vault with optional filtering and sorting
List notes in the vault with optional filtering and sorting
List all tags in use across the vault
List all tasks (checkboxes) in the vault
List all frontmatter properties in use across the vault
Move a note to a new location in the vault
Find all notes with a specific tag
Find notes that have no incoming or outgoing links
Find all notes that a given note links to
Get the outline (headings) of a note
Prepend content to the beginning of a note
Preview what a note edit would look like without applying it
Get a random note from the vault
Read an attachment from the vault
Read a contiguous range of lines from a note
Read the frontmatter properties of a note
Remove a frontmatter property from a note
Full-text search across all notes in the vault
Set or update a frontmatter property in a note
Toggle the completion status of a task
Get a unique note path that doesn't already exist
Find all links that point to notes that don't exist
Replace the entire content of a note
Get information about the vault
Get the total word count in the vault or a specific note
Error handling is absent or minimal. No evidence of recovery guidance (e.g., 'If note not found, try search_vault()'), error categorization (retryable vs. fatal), or actionable error messages. Agents cannot self-correct from failures.
Destructive operations lack confirmation/dry-run patterns. update_note, delete_note, and move_note are marked DESTRUCTIVE but have no preview, confirmation step, or undo capability exposed.
Semantic overlap in read tools. read_note_range, read_properties, and outline all extract different structured views of a note, but descriptions do not clarify when to use each. edit_note expects 'oldString' as exact text, creating brittle matching, no guidance on how to handle whitespace or multiline strings.
Parameter 'path' is overloaded. Used in read_note_range, update_note, delete_note, etc., but description is generic 'Vault-relative path of the note'. No guidance on path format (/ vs ., extension handling, special characters, case sensitivity).