Skip to content

Releases

mcp-server-overleaf 0.3.9

Choose a tag to compare

@github-actions github-actions released this 15 Oct 19:35

There is no 0.3.8. Glama already uses that label for a rebuild of 0.3.7, so this release
skips it and keeps the npm version and Glama's label the same.

  • Say in the tool descriptions what each argument does beyond its schema, and how each tool
    fails. replace_text inserts replaceWith literally, so $$ and $1 are kept. A section
    title is matched against the title in braces: an exact title wins over the first one that
    contains it. write_file with expectedRevision refuses a file that no longer exists.
    compile_project names the files it tries when mainTexFile is omitted, and it compiles the
    clone without pulling. search_project skips a new file until push_changes commits it.
    show_diff does not pull. discard_local_changes deletes new files too. Glama's tool
    definition score had marked 13 of the 18 tools down for adding nothing to their parameters.
  • Stop the integration tests from failing intermittently with ENOTEMPTY while deleting a clone.
    Git starts git maintenance run --auto --detach after fetch, commit and push, and that
    process can still be writing inside a clone after the server has exited. The tests now turn
    automatic maintenance off, through the environment for the server and through the bare
    repository's own config for the push side, which does not see that environment.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.9 setup.

mcp-server-overleaf 0.3.7

Choose a tag to compare

@github-actions github-actions released this 15 Oct 08:03
  • Start without any credentials instead of exiting. With no token and no registered project,
    the server now lists its tools, and every call that needs Overleaf answers that
    OVERLEAF_GIT_TOKEN is not set, as does list_projects. Glama's sandbox starts a listed
    server with no credentials, and 0.3.6 exited there before answering initialize. A project
    registered without any token is still a startup error, since that configuration is half written.
  • Wait for the package document npm install reads, not only the per-version one, before
    verifying a publication. For 0.3.6 the version document answered while the abbreviated
    packument the install fetches still lacked the version, so the install failed with ETARGET,
    and the GitHub release and the MCP registry listing were skipped until the job was rerun.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.7 setup.

mcp-server-overleaf 0.3.6

Choose a tag to compare

@github-actions github-actions released this 14 Oct 06:02
  • Say in every tool description what the tool returns. Only project_summary declares an
    output schema, so for the other seventeen the description is the only place a client learns
    the reply's shape and its no-op cases: a missing snippet, a section title that matches
    nothing, a destination that already exists. The edit and file tools now also say that they
    pull from Overleaf first. move_file named \\input with two backslashes because the source
    escaped them twice; it now names \input, and the contract test rejects a doubled backslash
    in any description.

  • Give npm up to ten minutes to serve a new version before the release workflow calls the
    publication missing. npm accepts a publish before its registry returns it, and 0.3.5 took
    about two minutes to appear; the check allowed one, so it failed a publish that had
    succeeded and skipped the GitHub release and the MCP registry listing until it was rerun.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.6 setup.

mcp-server-overleaf 0.3.5

Choose a tag to compare

@github-actions github-actions released this 10 Oct 07:21
a582b0e
  • Stop the package check failing on upstream patch releases. It installs the packed archive
    the way a user does, which makes npm resolve this package's declared ranges against the
    registry instead of reading the archive's shrinkwrap, so that tree is always the newest one
    those ranges allow — then it required that tree to be version-identical to the lock. The two
    can only agree in the window between an upstream publish and the next npm update, so CI
    went red on branches that had not touched a dependency, with the same unrelated dependency
    bump as the fix each time. hono hit it most often, being an unpinned peer of the MCP SDK
    with a fast release cadence, but every runtime range was exposed the same way. The trees are
    now compared by shape: a package in one and not the other fails, and so does a major version
    apart (a minor, for a 0.x package), which is how an unpinned peer would slip an untested
    major into a user's tree. Every copy npm nests counts, so a second major nested beside the
    hoisted one fails too. A newer patch or minor is only printed, with npm update as the way
    to bring the lock level, since both trees are tested. Dependabot will not do it: its npm
    version updates only bump dependencies this package names, and hono is not one.

  • Add executable specifications. tests/features/publishingToOverleaf.feature states in plain
    sentences what this server promises a co-author — an edit waits in the clone, a push that
    would overwrite their newer work is refused, a deletion stays local until it is pushed — and
    every sentence is bound to a real call against the server over stdio. The prose and the
    behaviour are checked against each other on every run: a sentence with no binding fails the
    suite, so the document cannot quietly stop being true. Run through Vitest with
    @amiceli/vitest-cucumber, a development dependency, so there is no second test command.

  • Refresh the runtime dependencies to the newest versions the declared ranges allow:
    @modelcontextprotocol/server 2.3.1, @modelcontextprotocol/node 2.1.1 and hono 4.13.13.
    The MCP SDK packages are now licensed Apache-2.0, and @modelcontextprotocol/node depends
    on hono directly instead of as a peer.

  • Let the repository audit accept a named advisory until a review date. node-forge has a
    high-severity advisory with no fixed release, reached only through @anthropic-ai/mcpb, a
    development dependency, in a signature check this repository never calls; npm cannot
    ignore one advisory, so it held every branch red. npm run audit:dependencies now fails on
    anything not listed in scripts/audit/acceptedAdvisories.mjs, and on a listed advisory once
    its review date passes. The audit of the installed runtime tree is unchanged and accepts
    nothing.

  • Fix the category names project_summary promises. Its output schema named a category
    bib, which this project has never produced; the real names are tex, bibliography,
    figure, class-or-style, build-artifact and other, and two of them were missing
    from the list entirely. The schema now builds that list from LATEX_FILE_CATEGORIES in
    latexProjectFiles.ts, so prose can no longer drift from what the code emits.

  • Cover the three places where a test could not have caught a defect it was meant to.
    delete_file and move_file remove and relocate files from a client-supplied path, but
    symlinkEscape.test.ts — the file that proves path containment for every other file
    operation — did not exercise them; it does now, for both ends of a move. ranges payload
    parsing had no unit test at all, although it is the one input on this server with no
    published contract and the fake remote only ever produces well-formed shapes. And the
    project_summary assertion parsed the text block, so it would have passed with no
    structured content on the wire at all; it now validates the wire value against the
    schema the tool advertises.

  • Add delete_file and move_file, the two parts of the file surface write_file could not
    express: the server could create and overwrite a file but never remove or rename one, so
    cleaning up an obsolete draft or reorganising a paper's sections meant leaving Overleaf.
    Both go through the Git bridge like every other edit, so a removal is local until
    push_changes and discard_local_changes undoes it. move_file refuses rather than
    overwrite an existing destination, and says which LaTeX references it has not rewritten.

  • Rewrite every tool description and every parameter description against what the code
    actually does. Three tools described their project parameter more narrowly than the
    server accepts, or did not describe it at all, so a model could not know an Overleaf
    address was a valid value. Descriptions now also state when to call a tool and when to
    prefer another, which side effects it has, and where its behaviour stops: search_project
    names the eight extensions it actually searches, read_section and edit_section name the
    trailing matter a section stops at, and add_comment says the thread it creates is empty.

  • Declare openWorldHint on every tool. Every tool but list_projects contacts Overleaf,
    including the read tools, which pull before answering; none of them said so.

  • Declare an outputSchema for project_summary and return its result as
    structuredContent, so a client gets a typed object with documented fields instead of a
    JSON string it has to parse out of a text block.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.5 setup.

mcp-server-overleaf 0.3.4

Choose a tag to compare

@github-actions github-actions released this 11 Sep 14:43
  • Describe this server by what makes it different. Every storefront line, on npm, in the MCP
    registry, and in both plugin marketplaces, said "over the Overleaf Git bridge", which is the
    positioning of every competing Overleaf server and omits the one capability none of them
    has. The package description, the plugin and bundle copy, and the README's opening now name
    tracked changes.
  • List OVERLEAF_SESSION_COOKIE in the registry record and in --help. Neither mentioned it,
    so nothing a user could read before installing said the tracked-changes tools existed.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.4 setup.

mcp-server-overleaf 0.3.3

Choose a tag to compare

@github-actions github-actions released this 11 Sep 04:29
  • Add three optional tools that reach Overleaf's editor instead of its Git bridge, so an edit
    can arrive as a suggestion in the review panel rather than as finished text. suggest_edit
    sets the tracked-changes flag on an editor operation, which a Git push cannot express;
    list_tracked_changes reads the suggestions and comment-thread anchors on a document;
    add_comment anchors a thread to a passage. They need an Overleaf session cookie, which is
    a different and broader credential than the Git token, so they are registered only when one
    is configured and the other sixteen tools are unchanged without it. See
    Tracked changes for what they cannot do and why the protocol they
    use is less stable than the bridge.
  • Implement Overleaf's Socket.IO 0.9 wire format directly rather than depending on the
    browser client it is forked from, and use the WebSocket built into Node, so the new tools
    add no runtime dependency. The codec is verified packet by packet against Overleaf's own
    parser.
  • Open the README with what distinguishes this server, since the answer to "which Overleaf
    MCP server" was previously only reachable by reading a comparison document.
  • Extend the related-projects comparison to the two servers that do not use the Git bridge,
    and record which of their capabilities this one now has.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.3 setup.

mcp-server-overleaf 0.3.2

Choose a tag to compare

@github-actions github-actions released this 10 Sep 23:57
  • Accept a project's Overleaf address wherever a tool takes project, not just its raw
    24-character id. Someone reaching for a second paper has what the address bar holds, and
    the id-only form meant a client configured with one project could reach the rest of the
    account only through a string nobody has to hand. setup and OVERLEAF_PROJECT_ID
    already took an address; the tools now agree with them.
  • Have list_projects say that any other project can be named by its address, so the
    configured list stops reading as the only choice. Its empty state no longer leads with
    OVERLEAF_PROJECTS, an environment variable a bundle or plugin user never sets.
  • Correct what this project says about Overleaf plans. Overleaf documents Git integration
    as gated on the project owner's subscription rather than the caller's, and documents no
    plan restriction on generating a token. The README, the setup failure message, and the
    Claude Desktop install panel each claimed the user's own plan had to include Git.
  • Ship this repository as a plugin marketplace for both Claude Code and Codex. Adding it
    with claude plugin marketplace add yangzichao/mcp-server-overleaf or the matching
    codex command, then installing overleaf@mcp-server-overleaf, replaces a hand-written
    client configuration entry. One plugins/overleaf directory serves both clients, so they
    cannot drift apart. The plugin declares no environment variables, so a public marketplace
    cannot carry a credential; the server reads the projects.json that setup writes.
    npm run plugins:build regenerates both manifests and both marketplaces from
    package.json, and the check suite fails if the committed files drift.
  • Lead the README with a table of every client and the route that installs it, and fix a
    stale link from the ChatGPT tunnel guide into the README.
  • Refresh the shrinkwrap for zod 4.6.2.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.2 setup.

mcp-server-overleaf 0.3.1

Choose a tag to compare

@github-actions github-actions released this 10 Sep 09:54
  • List the server in the official MCP registry. The release workflow now authenticates with
    GitHub OIDC and publishes server.json under io.github.yangzichao/mcp-server-overleaf,
    describing both the npm package and the .mcpb bundle, with the bundle hash taken from the
    exact file the same job attached to the release.
  • Add mcpName to package.json, which is how the registry proves npm package ownership.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.1 setup.

mcp-server-overleaf 0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 05:30
  • Package the server as a Claude Desktop bundle: npm run mcpb:build produces a .mcpb
    archive holding the published npm tarball, its runtime dependencies, a generated
    icon, and a manifest whose tool list is read back from the staged server over stdio. The
    release workflow attaches it to the GitHub release, so Claude Desktop users install by
    double-clicking one file.
  • Accept an Overleaf project URL wherever OVERLEAF_PROJECT_ID is read, not only a bare
    24-character id. The desktop install panel can now ask for the address bar.
  • Mark replace_text and push_changes with destructiveHint: true. Both change the user's
    paper, and the Connectors Directory requires the applicable hint on every tool.
  • Add a privacy policy covering what the server stores, where it sends it, and what it never
    collects.

Install in Claude Desktop by downloading mcp-server-overleaf.mcpb below and double-clicking it. Everywhere else: npx --yes mcp-server-overleaf@0.3.0 setup.