Markdown wiki with full revision history exposed as an MCP server. Pages are addressed by slash-separated paths. Every write creates a new revision; nothing is ever overwritten in place.
go-wiki demonstrates solid tool design with 12 well-named, verb-prefixed tools covering a complete wiki lifecycle. All tools have descriptions (avg 150 chars, within baseline 194). Input schemas are present and typed for all tools. However, output schemas are entirely undocumented, LLMs cannot predict response structure for chaining. Parameter descriptions are present but often terse (avg 45 chars vs baseline 72). Error handling guidance is absent; tools do not indicate retryability or recovery paths. No tool annotations (readOnlyHint, destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Missing pagination documentation for list tools despite accepting limit/offset. Overall: competent definitions with gaps in output documentation and error guidance.
Create a new page. Fails if the path is taken; use wiki_update_page to change an existing page.
Delete a page. Its final version is archived first, so the history remains readable afterwards.
Diff two revisions of a page. format=unified returns a patch, format=lines returns per-line operations, format=stat returns counts only. Defaults to the previous revision against the current one.
Read a page. Without rev the current version is returned; rev accepts a number, a negative offset (-1 is the version before current), or current/previous.
List everyone who has authored a page or a revision, with edit counts. Useful before filtering a search by author.
List wiki pages, optionally restricted to a path prefix. Returns metadata only, not page bodies.
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, nesting) for any tool, breaking tool chaining and forcing exploratory calls.
No tool annotations despite clear risk stratification. Tools marked READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE in source but not exposed via readOnlyHint/destructiveHint/idempotentHint in schema.
No error handling guidance. Tools do not document failure modes, retryability, or recovery paths. E.g., wiki_create_page fails if path exists, but LLM has no guidance on next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
List the revision history of a page, newest first, including author, comment, size and checksum.
Move or rename a page together with its whole subtree. History follows the pages; a move does not create a revision because the text does not change. Links to the moved pages are repointed across the wiki, and that rewrite does create a revision on every page it touches. Fails if the target path is taken or lies inside the moved subtree.
Restore an old revision by writing its body back as a new revision. The history is never rewound.
Search pages. Combine a full-text query with filters by subtree, author, contributor and time range; any filter works without a query, so "pages by author X changed since Monday" is a plain call. Sort by relevance, update time, creation time, path or title.
Walk the page tree one level at a time: the children of a node with counts of pages below them, instead of a flat list of every page. Sections that have no page of their own are nodes too, so the tree never breaks in the middle. Leave path empty for the top of the tree.
Replace the body of a page, archiving the previous version as a new revision. Creates the page if it does not exist. Pass base_rev to refuse the write when someone else edited the page meanwhile.
Pagination not documented for list tools. wiki_list_pages, wiki_search, wiki_list_revisions accept limit/offset but descriptions do not explain total count, next_cursor, or result capping behavior.
Parameter descriptions are terse (avg 45 chars vs baseline 72). E.g., 'rev' param in wiki_get_page says 'revision number, negative offset, or current/previous' but does not explain what 'current' means or when to use each form.