A documentation and knowledge management system with MCP server integration for searching, reading, and writing documents with graph-based knowledge navigation
Tabula demonstrates solid tool design with 23 well-named, verb-prefixed tools covering document management, search, and rendering. All tools have descriptions (avg 150 chars) and input schemas with types. However, output schemas are entirely undocumented, LLMs cannot predict response structure for planning. Parameter descriptions are present but often generic ('Document ID' vs 'The unique identifier for the document'). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification. Error handling is minimal, no recovery guidance or actionable error messages visible in schemas. Composition is strong: tools chain well (search→get_doc→update_doc), and parameter naming is consistent (workspaceId, slug, id). Missing: output schema documentation, error recovery patterns, and tool annotations.
Apply a sequence of text edits to a document source. Edits are specified as line ranges and replacement text.
Compile Typst source to SVG. Returns the SVG markup or an error message with line numbers.
Create a new document in a workspace. New documents are private by default; use publish to make them public. Returns the created document with its assigned slug.
Create a new document template in a workspace.
Delete a template from a workspace.
One hop from a document in the knowledge graph: outgoing wikilinks, backlinks (with the sentence around each mention), semantically similar documents (with cosine similarity), and unlinked title mentions. Call repeatedly on interesting neighbors to walk the graph and build up an understanding of a topic; use get_doc to read a document in full.
Fetch a document by id, or by workspace + slug. Returns its source and metadata. Docs mirrored from a git repo also carry repoPath, repoCommit, repoCommitAt and repoAuthor — the commit that last changed the file (as observed at sync time).
Output schemas completely undocumented. LLMs cannot predict response structure, field names, or types for any of the 23 tools. This breaks downstream planning and forces agents to guess at response format.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. Tools marked READ_ONLY, WRITE, REVERSIBLE, and DESTRUCTIVE in metadata but not exposed to LLM via schema annotations. Agents cannot reason about safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Fetch a template by workspace and slug. Returns the template source and metadata.
The link graph of a workspace at a glance: documents (slug, title, link degree) and the wikilink edges among them, most-connected first. Use to orient before walking with doc_neighbors.
List documents in a workspace the caller can access. Drafts are excluded unless includeDrafts is set — use list_drafts for those. In repo-mirror workspaces each row carries repoPath, and updatedAt is when the mirror last saw the file change.
List unfinished drafts in the caller's personal workspace. Drafts are ephemeral documents with a TTL; they are never shared and only visible to their author.
List document templates in a workspace. Templates are reusable document skeletons with optional frontmatter fields.
List all versions of a document, with editor names and timestamps. Versions are created on each edit and when a draft is promoted.
List the workspaces the caller can access, with their role in each.
Request publication of a document or approve a pending publication request. Returns the publication state: 'published' if immediately approved, 'pending' if awaiting approval.
Render markdown source to HTML with syntax highlighting and wikilink resolution.
Render markdown source to PDF with syntax highlighting and wikilink resolution.
Restore a document to a previous version. Creates a new version with the restored content.
Full-text search across documents the caller can access. Returns ranked hits with highlighted snippets.
Pure embedding search at chunk granularity: returns the best-matching passages with their document refs and cosine similarity. Use as entry points into the document graph, then walk outward with doc_neighbors. Empty when the semantic index is unavailable — fall back to search_docs.
Unpublish a document, making it private again. Only the document owner or a workspace maintainer can unpublish.
Update a document's content and metadata. Publishes a new version and updates the published snapshot if the document is public.
Update a template's name and/or source.
Parameter descriptions are generic and lack actionable constraints. E.g., 'Document ID' instead of 'The unique identifier assigned when the document was created; required to fetch or modify'. No format hints, ranges, or examples for LLM guidance.
No error recovery guidance in tool descriptions. Tools like publish, delete_template, and restore_version can fail but provide no hints on what to do next (retry, ask user, check permissions). Agents left guessing.
Pagination support incomplete. list_docs, list_workspaces, list_versions, list_templates accept no limit/offset parameters. Large result sets will blow context windows. search_docs and semantic_search have limits but no cursor/offset for continuation.