TeXFlow has 6 tools with reasonable structure and action-based naming. However, the server exhibits significant gaps: (1) Tool descriptions are overly long and often use free-form narrative instead of concise, LLM-optimized explanations. E.g., 'document' description is 800+ characters and lists 10 sub-actions, forcing the LLM to parse a complex manual rather than getting a clear intent statement. (2) Input schemas exist for all tools but lack critical metadata, parameters are typed but descriptions are often generic or missing context. E.g., 'source' parameter appears in both 'document' and 'queue' but its meaning varies wildly (BibTeX entry vs file content vs operation dict) with no disambiguation. (3) Output schemas are completely undocumented, no description of what each tool returns, what fields to expect, or how to chain results. (4) No error handling guidance. Tools return raw strings with _with_hints() appended, but no structured error classification or recovery instructions. (5) Tool composition has issues: 'queue' bundling multiple operations in one call is convenient but breaks atomic error handling, if operation 3 of 5 fails, the LLM has no way to know which ones succeeded. (6) Many tool parameters are optional with no documented defaults, creating ambiguity. E.g., 'edit' with action='insert' requires 'block_type' and 'section' but the function signature has them as None-defaulted. Scoring: Naming is solid (verb-forward, clear). Descriptions are present but too verbose and lack LLM optimization. Schemas exist but are incomplete (no output documentation). Error handling is absent. Overall: This is a C (fair/60s range) server, functional but with noticeable gaps that would require agent workarounds.
Create, ingest, and inspect documents. Actions: - create: Scaffold a new empty document. Optionally set class, title, author. - ingest: Parse markdown text, .tex file, or .md file into the document model. - outline: Show document structure (sections, block counts). - read: Read content of a specific section as prose text. - update: Update document metadata (title, author, date, abstract). - reset: Clear the current document and saved state. Next create/ingest starts fresh. - bib_add: Add a bibliography entry (provide BibTeX-format entry as source). - bib_remove: Remove a bibliography entry by key (provide key as source). - bib_list: List all bibliography entries. - bib_style: Set bibliography style (provide style name as source, e.g. "authoryear", "numeric").
Manipulate document content structurally. Actions: - insert: Add a new block at a position within a section. - replace: Replace a block at a position with new content. - delete: Remove a block at a position. - move: Move a block from one location to another. - read_raw: Read a RawLatex block with line numbers. - replace_raw: Update a RawLatex block (full or line-level) with lint check. Sections are addressed by title path (e.g., 'Methods/Data Collection'). Blocks within a section are addressed by 0-based index. page_break: For sections — "before", "after", "both", or "" to clear. Emits \clearpage before/after the section.
Configure document typesetting and layout. Only provided parameters are changed; others are left as-is. section_break: Page break before level-1 sections. "before" inserts \clearpage before each \section. Works in any column mode. Individual sections can override via edit(page_break="before").
Tool descriptions are 200-800 characters and read like user manuals; LLM-optimized descriptions should be 50-200 chars, stating intent + context, not implementation details. Baselines show 194 chars average for A-tier tools.
Output schemas completely undocumented. Tools return free-form strings (often with appended state hints), but LLMs cannot infer what fields to extract or how to chain results. E.g., 'render' returns 'PDF path' as string but no structured metadata. This violates the critical requirement that LLMs know what to expect.
Parameters with context-dependent meaning lack disambiguation. 'source' in 'document' means BibTeX entry for bib_add but file content for ingest, description doesn't clarify. 'content' in 'edit' means different things for insert/replace/replace_raw. LLMs will misuse these parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Execute multiple operations in a single call. Each operation is a dict with 'tool' (document, layout, edit, render, reference) plus the arguments for that tool. Operations run sequentially; disk is written once at the end. Example: queue(operations=[ {"tool": "document", "action": "create", "title": "My Doc"}, {"tool": "edit", "action": "insert", "block_type": "section", "title": "Intro", "level": 1}, {"tool": "edit", "action": "insert", "content": "Hello world.", "section": "Intro"}, {"tool": "layout", "columns": 2, "font": "palatino"} ]) Args: operations: List of operation dicts. continue_on_error: If False (default), stop on first error.
Search LaTeX documentation, symbols, packages, and error solutions. Actions: - search: Search for LaTeX commands or general topics. - symbol: Find symbols by description (e.g., "approximately equal"). - package: Get information about a LaTeX package. - check_style: Analyze a .tex file for best practices. - error_help: Get help for LaTeX error messages. - example: Get working examples for a topic (table, equation, figure, list, code). - templates: Browse available LaTeX templates. Optionally filter by category or slug. - capabilities: Enumerate system LaTeX support (engines, tools, packages). - styles: Browse document style presets. Optionally filter by slug or keyword.
Compile and export the document. Actions: - compile: Serialize model to .tex, compile to PDF. Returns PDF path. - preview: Render a specific page as PNG file. Returns file path and dimensions. - tex: Export the raw .tex source. Returns the LaTeX content.
No error handling guidance. Tools return result strings with hints appended, but no structured error classification (retryable vs user-fixable vs fatal) or recovery instructions.
queue tool batching breaks atomic error handling. If operation 3 of 5 fails, the LLM has no per-operation success/failure feedback, forcing a retry of the entire batch. No documented behavior for partial success.
Many parameters are optional (default None) without documented defaults or constraints. E.g., 'edit' action='insert' requires 'block_type' but schema doesn't enforce it. 'render' 'output_path' is optional but no guidance on where output lands. This creates ambiguity.
Numeric parameters lack bounds. 'layout' columns, 'edit' position, 'render' page and dpi have no min/max hints. 'render' dpi could be 15 or 600, LLMs cannot infer reasonable bounds and may pass absurd values.
Enum parameters not declared as enums. 'document' action is free-form string ('create', 'ingest', 'outline', 'read', 'update', 'reset', 'bib_add', 'bib_remove', 'bib_list', 'bib_style') but no enum constraint. Same for 'edit' action, 'render' action, 'reference' action. Free-form invites hallucinated sub-actions.