Custom MCP server for JARVIS — direct vault file access
jarvis-mcp provides 10 well-named tools with clear verb-noun patterns (read_note, write_note, search_content). All tools have descriptions (avg ~100 chars) and input schemas using Zod. However, schemas lack formal JSON Schema output documentation, parameter descriptions are minimal (many under 20 chars), and error handling is generic ('Error: <msg>'). Tool annotations are present but incomplete. No pagination support for list_recent or search_content despite potentially large result sets. The pick_resume_sessions tool is complex but underdocumented.
Append content to the end of an existing vault note
List files and subfolders in a vault directory
List the most recently modified notes in the vault
Deterministically score Brain.md rows for the current project and return the top-N by relevance to Working-Memory. Uses word-boundary keyword matching with a stoplist for skill names, multiplied by a recency bucket weight (≤7d=1.0, ≤30d=0.6, ≤90d=0.3, >90d=0.1). Excludes rows whose slug already appears in Working-Memory.
Read only the YAML frontmatter block of a note — fast and low token cost
Read the full content of a vault note by path
Output schemas not documented. Tools return structured responses but LLMs cannot see what fields to expect. search_content, list_folder, and list_recent lack documented return types.
Parameter descriptions are minimal or missing. 'path' appears in 5 tools with identical 1-line descriptions; 'query' in search tools lacks guidance on format/length. LLMs cannot infer constraints.
No pagination support. search_content accepts max_results but list_recent and list_folder do not. Large vaults could return unbounded results, exhausting context windows.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Full-text search across all vault notes. Returns matching files with surrounding context.
Find notes whose filename contains the query string
Find notes where a frontmatter key contains a given value (e.g. type=session, project=Jarvis)
Write content to a vault note (create or overwrite)
Error handling is generic. All errors wrapped as 'Error: <msg>' with isError=true. No recovery guidance, no categorization (retryable vs fatal), no actionable next steps for LLM.
pick_resume_sessions is complex (deterministic scoring, recency buckets, stoplist filtering) but lacks inline documentation. The algorithm is buried in comments in dream-scan.js, not in the tool description.