Changelog¶
All notable changes to this project are documented here. This project follows Semantic Versioning. Until 1.0.0, tool schemas and result shapes may change in a minor or patch release; each such change is listed below.
0.1.4 - 2026-09-01¶
Documentation restructure and runtime instructions for MCP clients. No tool was added, removed, or changed in schema or result shape; the server still registers 19 tools.
Added¶
- Usage instructions in the MCP initialize response. The server now sets the MCP
instructionsfield, so clients that surface it (Claude Code among them) give the model the safety contract, read before write, revision handling,upload_filesemantics, confirmations, compile allowance, and what to do onAUTH_EXPIRED, without anyone pasting the README into a prompt. Exported asSERVER_INSTRUCTIONS; a test keeps it under 450 words. - Documentation site at https://mhmdaskari.github.io/overleaf-web-mcp/, built with MkDocs
Material from
docs/and deployed by GitHub Actions on every push tomain. It holds the full tool reference, safety model, configuration, internals, development guide, roadmap, and this changelog. AGENTS.mdfor coding agents contributing to the repository, with the rules that must keep holding, test expectations, and the release steps.CLAUDE.mdimports it for Claude Code.
Changed¶
- README rewritten for people. It now leads with what you can say to an assistant, a three-step install, what the server can do, and how it keeps a project safe, in plain language, and links to the site for everything else. The 19-row tool tables, the configuration table, the protocol notes, and the step-by-step workflows moved to the documentation site.
- The tool-count test now checks the README badge and the docs tool reference instead of two places in the README.
0.1.3 - 2026-09-01¶
Documentation, metadata, and small additive fixes. No tools were added or removed; the server still registers 19 tools. Planned in ROADMAP.md.
Changed¶
get_project_treenow returns an object instead of a bare array. The entities are underentities, alongsiderootDocPath,compiler,imageName,trackChangesActive, and ahashNotedescribing the hash format. Callers that iterated the result directly must now iterateresult.entities. This is the only response-shape change in this release.compile_project.rootFilePathis now optional. Omitted, it compiles the root document configured in Overleaf itself, matching the web UI's Recompile button. A project with no configured root and norootFilePathreturnsINVALID_ARGUMENTinstead of failing to resolve a path. Its description no longer leaks the internalrootDoc_idparameter name.upload_fileis annotateddestructiveHint: true. It replaces an existing entity at the destination path in place, so the previousdestructiveHint: falsemisdescribed it.upload_filereturns a normalized result:entityId,entityType,path,replaced, and, for binary files,hash. Overleaf's raw response is no longer passed through under anuploadkey.compile_projectresults now includerootFilePath, the document actually compiled.download_fileno longer silently overwrites a local file. It fails withINVALID_ARGUMENTunless the newoverwriteparameter istrue, and returnslocalPathalongsidebytes.
Added¶
write_fileacceptslocalPathas an alternative tocontent, mutually exclusive with it. This keeps a whole-file replacement revision-checked and optionally tracked without sending the file through the MCP client's tool-argument budget. Non-UTF-8 content is rejected rather than written as replacement characters, and a leading byte order mark is stripped.upload_fileacceptsdestinationName, so a local file can be stored under a different name in the project.- Overleaf's upload rejections are translated into actionable errors. Overleaf reports
duplicate_file_name,invalid_filename,project_has_too_many_files, andfolder_not_foundas HTTP 422; these now surface asINVALID_ARGUMENTwith an explanation and the original code indetails.overleafError, instead of a bareREMOTE_ERROR. Only a short lowercase identifier is ever propagated, so no response content can leak through an error. - Continuous integration on pushes and pull requests running type-check, lint, tests, build, and the packed-file check. Previously these ran only when a release was published.
- ROADMAP.md describing the planned path from 0.1.3 to 1.0.0.
- This changelog.
Documentation¶
- The
hashfield is documented as a git blob hash,sha1("blob " + byteLength + "\0" + content), identical togit hash-object <file>. Plainsha1sumnever matches. The hash is present only on binaryfileentities; Overleaf stores no content hash fordocentities. upload_file's upsert semantics are documented, including that Overleaf decidesdocversusfileby extension and UTF-8 validity, that it is a valid way to replace.tex,.bib, and.bstdocuments from disk, and that replacing a document this way is a blind, untracked write.- A decision table for
write_fileversusupload_file, and the real document and update size limits, so callers no longer have to guess a size threshold. - A worked example of the hash-comparison workflow for uploading only changed binaries.
- A test asserts the README's tool count matches the registered tool list, so the badge cannot drift.
0.1.2 - 2026-07-20¶
- Project history monitoring through
monitor_project_history. - Tracked document writes through
writeModeonwrite_file,create_file, andwrite_section.
0.1.1 - 2026-07-16¶
- Documentation and packaging corrections.
0.1.0 - 2026-07-15¶
- First release: browser-assisted session capture, project and file management, revision-checked and section-level writing, compilation, and review comments.