MCP server giving AI agents local zip tools — create, list, extract (free), plus extract-one & add-to-zip (Pro). Files never leave the machine.
VaultArchive has clear, action-verb naming (archive_zip, archive_list, archive_extract) and reasonable descriptions (avg ~80 chars). All 5 tools have input schemas with Zod validation and type definitions. However, parameter descriptions are minimal (often single phrases like 'Absolute paths of files to add to the zip'), lacking guidance on constraints, formats, or error recovery. Output schemas are not documented, callers must infer return structure from implementation. Error handling returns plain text messages without recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (WRITE vs READ_ONLY). Missing output schema documentation is a critical gap for LLM planning.
Pro: add local files to an existing .zip and write the updated archive.
Extract all files from a local .zip into a directory (unsafe paths are skipped).
Pro: extract a single named entry from a local .zip.
List the entries (names + sizes) of a local .zip archive.
Zip a list of local files into a single .zip archive.
Output schemas not documented. Callers cannot infer return structure (e.g., archive_list returns a formatted string, not a structured object with entries array). LLMs cannot plan downstream operations without knowing response shape.
Parameter descriptions lack constraint details. 'Absolute paths of files to add to the zip' does not specify: must be readable files? relative or absolute only? what happens if a file doesn't exist? LLMs cannot validate inputs without explicit constraints.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). archive_list is READ_ONLY; archive_zip, archive_extract, archive_extract_one, archive_add are WRITE/destructive. Agents cannot distinguish safe from risky operations without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Error messages are plain text without recovery guidance. 'Error: Entry "xyz" not found' does not suggest calling archive_list first. Per pattern:recovery-guide, errors should guide the LLM's next action.
archive_extract silently skips unsafe paths (path traversal attempts) without clear feedback. LLMs cannot distinguish 'extraction succeeded with warnings' from 'extraction succeeded fully'. Return per-item success/failure for transparency.