An intelligent, privacy-first desktop AI assistant built with Rust and Tauri
Open-Jarvis presents a fragmented MCP implementation with critical quality gaps. Only 2 of 5 tools have visible schema definitions in the source code (read_file, list_directory in server.rs); the other 3 tools (open_browser, empty_recycle_bin, organize_files) are mentioned in src/main.js but lack explicit schema or registration evidence. Descriptions are present but minimal (15-45 chars), below the 50-200 char LLM-optimized range. Parameter descriptions are missing for most tools. Critical security issue: empty_recycle_bin and organize_files are destructive/write operations with no confirmation mechanism, no error guidance, and no permission gating. The server mixes Rust (Tauri) and JavaScript implementations without clear schema definitions, making it unclear which tools are actually operational.
Permanently empty the system recycle bin/trash
List contents of a directory
Open a URL in the default web browser
Organize files in the downloads directory by type into categorized subdirectories
Read contents of a file
3 of 5 tools lack visible input schemas. open_browser, empty_recycle_bin, and organize_files are referenced in src/main.js but no explicit schema definition is provided in the source. Per HARD SCORING RULE: tools without visible schemas must score 0 on schema dimension.
Destructive operations (empty_recycle_bin, organize_files) lack confirmation/dry-run support and error recovery guidance. No indication of permission checks or audit logging. Agents can permanently delete data without safeguards.
All tool descriptions are under 50 characters and lack WHAT/WHEN/WHY context. Most are 35-45 chars with no guidance on when to use them or what they return. E.g., 'Read contents of a file' lacks context on file size limits, encoding handling, or error cases.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | <=2025-11-25 | v2 |
Parameter descriptions missing or minimal. 'path' parameters in read_file and list_directory lack info on allowed formats, absolute vs. relative, path length limits, or symlink handling. 'url' in open_browser lacks validation rules (http/https only).
No output schema documentation for any tool. Clients cannot know what fields to expect (file content type, directory entries format, success/error response structure).
open_browser tool accepts any 'url' string with minimal validation (only checks non-empty). No enum, regex pattern, or description constraints. LLMs could pass invalid URLs like 'javascript:alert()' or 'file:///etc/passwd'.
empty_recycle_bin and organize_files accept no parameters and provide no confirmation or dry-run option. Agents cannot preview, confirm, or cancel destructive operations. Zero error recovery guidance.
Mixed Rust and JavaScript implementation across src-tauri/src/mcp/server.rs and src/main.js with no clear transport or unified schema registry. Unclear how tools are registered, invoked, or exposed to MCP clients.
No error handling patterns visible. No indication of how tools return failures, what error codes/messages LLMs should expect, or recovery guidance. E.g., read_file with invalid path should return actionable error like 'File not found at /path/to/file. Check permissions or call list_directory() first.'