VisualDoc
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| doc_render_report | Render a DOCX to PDF (LibreOffice), extract per-page geometry, and check layout rules. Returns structured JSON — no images. Use this to see whether a document is visually correct: margin/table overflow, low-resolution images, likely orphan headings, plus the measured size and effective margins of every page. Args: document: Absolute or relative path to a .docx file. pages: Optional 1-based page numbers to report (e.g. [4,5,6]). Omit for all. rules: Optional path to a YAML rule pack. Omit to use rules/general.yaml. Returns:
A dict with |
| doc_selftest | Health check: confirm the render + geometry stack is wired up. Call this first from a new client to prove the server is alive and that LibreOffice / PyMuPDF are reachable, before pointing it at a real document. |
| doc_get_structure | List the addressable elements of a DOCX with ids AND stable anchors. Two ways to address an element as a doc_apply_patch
assign_anchors=True writes a normalized copy with anchors filled in and returns
it as Pass the returned |
| doc_apply_patch | Apply safe layout ops to a COPY of the DOCX (original untouched), validate by reopening the result, and save a revision. Each op = {"op": , "target": "el-N" | anchor, ...params}. Call doc_get_structure first for ids/anchors + version_hash; pass that as expected_version_hash. The output always carries anchors so a chain of patches stays addressable. Returns {ok, output, version_hash, applied, results[], validation}. Each op reports applied/error independently. |
| doc_autofix | Closed loop as one tool: report → fix → re-render → diff, until nothing is left to fix or max_iter. The original file is never modified. mode (default 'safe'):
Regression guard: if an iteration introduces a NEW warning, that revision is discarded and the loop stops with the previous good version kept. Returns document_final (path to the fixed revision), baseline vs final counts,
per-iteration |
| doc_diff_versionsB | Render two DOCX versions and diff their layout reports: what got resolved,
what regressed ( |
| doc_get_page_imageA | OPTIONAL visual channel: render ONE page of the DOCX to a PNG for the agent to eyeball a specific concern. Use sparingly — images are costly in model context (see docs/01-compatibility.md); the deterministic doc_render_report (no images) is the primary signal. dpi is clamped to 36..300. On failure returns a structured {ok:false, error} instead. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one for comparing versions via diff, the other for extracting a single page image. There is no overlap.
Both tools follow a consistent verb_noun pattern with the 'doc_' prefix: doc_diff_versions and doc_get_page_image.
Only two tools are provided for a documentation visualization server. The description references a primary tool (doc_render_report) that is not included, making the surface too thin for its stated purpose.
The primary signal for the server (the deterministic report without images) is missing as a tool. There is no way to get the main report, only a diff and a page image, leaving a severe gap in coverage.