Exposes ZIM file operations as MCP tools for reading, searching, writing, editing, and managing offline Wikipedia archives with semantic search and LLM generation capabilities
ZimAgent has 9 well-named tools with clear verb-noun patterns (zim_read_article, zim_search, zim_write_article, etc.). All tools have descriptions and input schemas with type definitions. However, descriptions are inconsistent in depth and quality. Most descriptions are 50-150 chars, which is acceptable, but lack actionable guidance on when to use each tool vs. alternatives. Parameter descriptions are present but generic (e.g., 'Article URL path' without format examples or constraints). Output schemas are documented in descriptions but not formally in JSON Schema. Error handling is minimal, tools return JSON with 'error' or 'status' fields but provide no recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, REVERSIBLE). Composition is good: tools are single-responsibility and chainable (search returns paths that read accepts). Missing: pagination guidance for list tools, explicit constraints on parameters (e.g., max_results bounds), and structured error messages.
Soft-delete an article (tombstone in overlay). The article remains in the base ZIM file but is hidden. Use zim_restore_article to undo. Parameters ---------- path : str Article URL path to delete. Returns JSON: {"path", "deleted": bool}
Edit an existing article's HTML content. Parameters ---------- path : str Article URL path. new_html : str New HTML content. new_title : str, optional New title (keeps existing if omitted). Returns JSON: {"path", "status"}
List overlay articles (most recently modified first). Parameters ---------- max_results : int Maximum entries to return (default 50). Returns JSON: {"articles": [...]}
List all articles that have been created, edited, or deleted. Returns JSON: {"articles": [{"path", "title", "modified_at", "deleted"}, ...]}
Read an article from the ZIM archive by its URL path. Parameters ---------- path : str Article URL path, e.g. "A/Python_(programming_language)". Returns JSON with 'title', 'text', 'html', 'source' fields. Returns an error JSON if not found.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels documented in metadata. LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Parameter descriptions lack actionable constraints. 'max_results' has no bounds (min/max), 'path' has no format specification, 'html' has no length limit. LLMs cannot validate inputs without explicit constraints.
Error handling is minimal. Tools return JSON with 'error' or 'status' fields but provide no recovery guidance. 'Article not found' does not suggest calling zim_search() first. Errors do not categorize as retryable vs. user-fixable.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Restore a soft-deleted article. Parameters ---------- path : str Article URL path to restore. Returns JSON: {"path", "restored": bool}
Search for articles by title prefix in the ZIM archive. Parameters ---------- query : str Search query / title prefix. max_results : int Maximum number of results (default 10). Returns JSON: {"results": [{"path", "title"}, ...]}
Return statistics about the ZIM archive and overlay. Returns JSON with zim_path, article_count, overlay_count.
Create or replace an article in the ZIM overlay. Parameters ---------- path : str URL path, e.g. "A/My_Article". title : str Article title. html : str HTML content of the article. Returns JSON: {"path", "status"}
List tools (zim_list_modified, zim_list_articles) lack pagination guidance. No mention of total count, next_cursor, or offset. Descriptions do not explain when to call each vs. the other.
Descriptions do not explain when to use zim_edit_article vs. zim_write_article. Both modify articles; the distinction (edit = update existing, write = create/replace) is not explicit. LLMs may choose wrong tool.