MCP server for reading and writing Overleaf projects via Claude Code / Claude Desktop
Overleaf MCP has 10 tools with complete input schemas and descriptions, but quality is uneven. Tool names follow verb_noun convention (list_files, read_file, write_file, patch_file, commit_and_push). Descriptions are present but brief (avg ~60 chars, below the 194-char baseline). Parameters have types and descriptions, but lack constraints (enums, ranges, patterns). No output schemas documented. Error handling is minimal, no recovery guidance or actionable error messages. The patch_file tool has good error logic (detects 0 or >1 matches) but others lack validation. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write semantics. The smart diff feature in read_file is clever but underdocumented, LLMs won't understand when to use read_file vs read_file_full without explicit guidance.
Commit all changes and push to Overleaf. Pulls first to detect conflicts
Get a summary of staged and untracked changes in the local repository
Get the content of a specific section from a LaTeX file
Get all section/subsection/subsubsection titles and their positions in a LaTeX file
List all text files (tex, bib, bst, cls, sty, bbl, cfg) in the Overleaf project
List all .tex files in the Overleaf project
Replace specific text in a file without transferring full content. Fails if text appears 0 or >1 times
No output schemas documented. LLMs cannot plan downstream calls or extract structured data. E.g., list_files returns a list of strings, but format/structure is implicit. get_sections returns objects with title/type/index, but this is undocumented.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The server clearly marks tools as READ_ONLY or WRITE in metadata, but these are not exposed to the LLM via MCP tool annotations. LLMs cannot infer which tools are safe to retry or have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Read a file from the Overleaf project. Returns only changed content since last read (smart diff mode)
Read full content of a file from the Overleaf project (bypasses smart diff, returns complete file)
Write content to a file in the Overleaf project (creates or overwrites)
read_file vs read_file_full distinction is underdocumented. read_file uses smart diff (returns only changes since last read), but the description does not explain when to use it vs read_file_full. LLMs will not understand the trade-off without explicit guidance.
No parameter constraints (enums, ranges, patterns). The 'project' parameter defaults to 'default' but no enum of valid projects is provided. LLMs may pass invalid project names, causing silent failures.
Error handling lacks recovery guidance. patch_file throws 'Text to replace not found' and 'Found N occurrences', but does not suggest next steps (e.g., 'Try read_file_full to see current content'). Other tools have no documented error cases.