MCP server for Overleaf/LaTeX project formatting and linting
Server has 27 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, input schemas are minimal, most tools accept only 1-2 string parameters with basic descriptions. Output schemas are not documented in the visible code; tools return .model_dump() of Pydantic models, but the structure of those models is not visible in the provided source. Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. Parameter descriptions lack detail on constraints, formats, and valid ranges. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY vs WRITE). Security: no evidence of secret injection for git/Overleaf credentials; tools like pull_from_overleaf and push_to_overleaf likely require auth but no parameter documentation shows how.
Cross-file heading case, quotes, dashes.
Check figures for caption/label/centering/float/width.
Dry-run latexindent; return unified diff.
Check math for brackets, \left/\right, align column drift.
Detect duplicate/conflicting/missing packages.
Validate tabular column counts.
Run latexmk on a LaTeX file; returns PDF path or parsed errors.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classification. Tools like write_tex_file, compile, push_to_overleaf are marked WRITE but lack destructiveHint annotation to signal to agents that these are irreversible.
Output schemas not documented. Tools return .model_dump() of Pydantic models, but the structure of those models (fields, types, required vs optional) is not visible in the provided source. LLMs cannot plan downstream tool calls without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Report which LaTeX binaries are available.
Parse a LaTeX log into structured errors with suggestions.
Zip the project root for upload back to Overleaf.
Dangling refs, unused labels, orphan bib.
Run latexindent on a file, modifying it in place.
Format a LaTeX snippet without touching disk.
Detect main file, sections, bib, inputs, classes.
Extract an Overleaf project zip into the project root.
Run chktex; return structured warnings.
List .tex/.bib/.cls/.sty files in the project.
List Overleaf projects visible to the logged-in ols session.
Return manual steps to run `ols login` (interactive — not automatable from MCP).
Pull the remote Overleaf project into project_root via overleaf-sync (free-tier).
Push local project_root changes to Overleaf via overleaf-sync (free-tier).
Branch, ahead/behind, dirty state.
Clone or pull --rebase the Overleaf project.
Stage all changes, commit with message, push.
Read a .tex file; returns content and line count.
Suggest column spec matching widest row.
Atomically write content to a file.
No error handling or recovery guidance. Tools do not document what errors they can raise, whether they are retryable, or what the LLM should do next. E.g., compile() may fail with LaTeX errors, but no guidance on how to interpret or recover.
Parameter descriptions lack constraint details. E.g., 'path' parameters do not specify format (relative vs absolute), allowed extensions, or path traversal restrictions. 'message' in push_to_overleaf has no length limit or format guidance.
Git and Overleaf authentication not documented. Tools like pull_from_overleaf, push_to_overleaf, olsync_pull, olsync_push require credentials but no parameter or description indicates how auth is configured. Risk of secrets in parameters or missing auth setup.