Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Overleaf

MCPB · MCP-SERVER-OVERLEAF-0.3.9.MCPB · 2 COMPONENTS

Overleaf MCP server for Claude, Codex, ChatGPT, and Cursor with safe LaTeX editing and review.

+4 this week 56 Trust /100

Last scanned (21 hours ago)

Scores higher than 90% of MCPB servers

Category Documents and Files

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security25
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs were checked across the 6 of 6 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • 0 of 6 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 19 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4570 tokens (~253/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management60
  • Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (6% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 22 Oct 26 +3
    • Stability: unverified → 0.17 ▲ functional
  • 17 Oct 26 +30
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Destructive annotations: 100 functional
    • First check of Tool coverage: 6 functional
    • First check of Tool coverage: 100 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed mcpb/https://github.com/yangzichao/mcp-server-overleaf/releases/download/v0.3.9/mcp-server-overleaf-0.3.9.mcpb

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem mcpb
Reason No attestation published

Background: How many MCP packages publish verified provenance →

Dependencies 6 packages
Packages resolved 6
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 18 exposed · ~4,570 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
compile_project ~283

Compile one project locally with latexmk -pdf and report the errors and warnings, so a broken paper is caught before collaborators see it. Call it after editing and before push_changes. It compiles the clone as it stands, local edits included, without pulling, and halts at the first error. Without mainTexFile it tries main.tex, paper.tex, manuscript.tex, root.tex, thesis.tex and article.tex at the root, then the shallowest .tex file, and stops with a message if that file has no \begin{document}. Build artifacts go to a directory outside the clone, so they are never pushed, and only the log comes back, never a PDF. Without latexmk and a TeX distribution installed locally it says so instead of compiling; a run past the configured timeout, 180 seconds by default, is reported as an error. It also restores any files sparse checkout was holding back, since figures must be on disk to compile.

NameTypeReqDescription
mainTexFilestring–Path to the root .tex file, the one containing \begin{document}. Omitted, the server guesses it from the project layout and says so if the guess has no document environment.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

delete_file ~238

Delete a file from the project. The file is removed from the local clone only: it stays in Overleaf, and co-authors keep seeing it, until push_changes publishes the removal. Until then discard_local_changes brings it back, and show_diff shows the pending deletion. Deleting a file a co-author still cites or includes will break their compile, so confirm it is unused first with search_project on its path or label. To replace a file's contents instead, use write_file. path is relative to the project root, as list_files prints it; a directory is refused, and a file sparse checkout keeps off disk is still deleted from the project. Pulls from Overleaf first. Returns a confirmation, or says the path is not in the project and deletes nothing.

NameTypeReqDescription
pathstringyesPath of the file to delete, relative to the project root, e.g. sections/old-draft.tex. Directories cannot be deleted, only files.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

discard_local_changes ~175

Permanently throw away every local edit, new file and unpushed commit in one project's clone, fetching Overleaf first so the clone ends up matching its current version. The discarded work cannot be recovered from this server. Call show_diff first, and only call this once the user has said the work should be abandoned. Its main use is after push_changes refuses a conflicting change: the clone cannot be pushed again until the conflicting local commits are either published or discarded here. Only the chosen project is reset; pending work in other projects is untouched. Returns how many edited files and unpushed commits were discarded, or that there was nothing to discard.

NameTypeReqDescription
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

edit_section ~396

Replace one whole section of a .tex file, located by its title. Use replace_text for a smaller change and this to rewrite a section wholesale. The section runs from its heading to the next heading of the same or a shallower level, never swallowing trailing matter such as \end{document} or the bibliography. newContent replaces that range line for line, so it must start with the \section{...} command itself or the heading is lost, and should end with a newline to keep the blank line before the next heading. sectionTitle is compared case-insensitively with the title in braces: an exact match wins, otherwise the first heading in document order that contains it. Pulls from Overleaf first, then edits only the local clone; push_changes publishes it. Returns the heading replaced and its former line range; if no title matches, nothing changes and the reply lists the titles.

NameTypeReqDescription
expectedRevisionstring–Optional guard: the 64-character revision hash returned by read_file with mode=full or mode=smart for this same file. When given, the edit is refused if the file changed since that read — for example…
newContentstringyesThe section's full replacement text, starting with its own sectioning command, e.g. \section{Introduction} followed by the new body.
pathstringyesPath to the .tex file relative to the project root.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
sectionTitlestringyesTitle of the section to replace, as it appears in the sectioning command. Matched case-insensitively, with a substring fallback. Call list_sections if unsure.

No output schema declared.

No examples provided.

list_files ~262

List every file in the project, grouped by kind (LaTeX sources, bibliographies, figures, other), after pulling the latest commits from Overleaf. Use it to find exact paths before reading or editing; use project_summary when counts are enough, and search_project to find which file mentions something. Files sparse checkout keeps off disk are listed too, since they are still part of the project. extension keeps only paths ending in that suffix, case-insensitively, and filters untracked files as well; includeUntracked adds files created locally that push_changes has not committed yet, marked (untracked). Returns the file count and the likely main document, then the paths under each kind. If the pull conflicts with unpushed local work, it fails, keeps that work, and says how to resolve it.

NameTypeReqDescription
extensionstring–Case-insensitive extension, e.g. tex or .bib; omitted lists all kinds.
includeUntrackedboolean–Also list files created locally and not yet pushed to Overleaf, excluding ignored build artifacts (default false).
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

list_projects ~110

List the Overleaf projects this server is configured to reach, marking which one is the default. Reads local configuration only, so it answers without contacting Overleaf and proves nothing about access. Call this when a request is ambiguous about which paper it means, or when another tool reports an unknown project. Returns one line per registered name, marked (default) where it applies and followed by its display name when one is configured. Any project not listed can still be reached by passing its Overleaf address as `project`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_sections ~209

List the sectioning commands in one .tex file, \part down to \subparagraph including starred forms, with their nesting depth and line ranges. Call it before read_section or edit_section to get the exact titles they match, and to address part of a paper by title instead of line numbers that shift with every edit. path names a single file: \input and \include are not followed, so list each included file separately, and commented-out headings are skipped. Pulls from Overleaf first. Returns one line per heading, indented by depth, as \section{Title} [lines start-end], or says the file has none; a missing, binary or out-of-project path fails.

NameTypeReqDescription
pathstringyesPath to the .tex file relative to the project root, e.g. main.tex.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

move_file ~246

Move or rename a file inside one project, creating any missing parent directories. The move happens in the local clone only; nothing changes in Overleaf until push_changes. LaTeX references are not rewritten: an \input, \include or \includegraphics naming the old path will break, so search_project for it afterwards and fix the references with replace_text before pushing. Both paths are relative to the same project's root; to move a text file between projects, read_file it from one and write_file it into the other. Pulls from Overleaf first. If fromPath is not a file in the project or a file already exists at toPath, nothing moves and the reply says why.

NameTypeReqDescription
fromPathstringyesCurrent path of the file, relative to the project root, e.g. intro.tex.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
toPathstringyesNew path for the file, relative to the project root, e.g. sections/intro.tex. Must stay inside the project and must not already exist.

No output schema declared.

No examples provided.

project_status ~197

Report where one project's local clone stands against Overleaf: branch and head commit, commits just pulled, commits still unmerged, local commits waiting to be pushed, files edited but not committed, and the last ten commits. Call it to learn whether there is anything to push or anything new from a collaborator; use show_diff to read the pending edits themselves. It pulls as part of answering, and that pull only updates the local clone: nothing changes on Overleaf and no local edit is dropped. A conflicting pull does not fail the call; the reply adds a WARNING with the conflict and the clone is left as it was. For a project not opened before, the clone is made first, so that first report shows nothing pulled. Returns plain name: value lines.

NameTypeReqDescription
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

project_summary ~211

Summarize one project in a single structured result (file counts by kind, the likely main document and its section count, pending local work) to orient at the start of a task. Use list_files for every path, list_sections for a document's outline, and project_status for commit-level sync state. mainFile is a guess: main.tex, paper.tex, manuscript.tex, root.tex, thesis.tex or article.tex at the root, otherwise the shallowest .tex file, so check it for \begin{document} before relying on it. Pulls from Overleaf first; if that pull conflicts with unpushed local work, it fails and keeps the work. project can name any project the default token reaches, registered or not; the first call on a project clones it, so it is slower than later calls.

NameTypeReqDescription
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
NameTypeReqDescription
categoriesobjectyesFile counts by kind, keyed by category. A category with no files is absent rather than zero.
filesarrayyesThe first ten file paths, sorted. Call list_files for all of them.
localChangesstringyesgit diff --stat for edits not yet pushed to Overleaf; empty string when there are none.
mainFilestring|nullyesBest guess at the root document, from conventional names and content; null when the project has no .tex file. Verify before relying on it.
sectionCountScopestringyesStates what totalSections counted, so the number is not read as a project-wide total.
totalFilesintegeryesFiles in the project: tracked files plus local files not yet pushed.
totalSectionsintegeryesSectioning commands in mainFile only, not across every .tex file. 0 when mainFile is null.
trackedFilesintegeryesFiles Overleaf already has.
untrackedFilesarrayyesFiles created locally that Overleaf does not have yet, excluding ignored build artifacts.

No examples provided.

push_changes ~243

Publish every pending local edit to Overleaf as one commit. This is the only tool that changes the project collaborators see, and the change is immediate and public. Call show_diff first, and compile_project when the edit could break the build. Before pushing, the server re-checks Overleaf and rebases onto whatever collaborators pushed in the meantime. If two edits touch the same lines the push is refused, both versions are reported, and no local work is lost: nothing is overwritten and no winner is chosen. commitMessage labels the one commit made from the pending edits; commits already waiting from an earlier refused push keep their own messages and go out with it. Only the chosen project is pushed. Returns the new commit hash and the diff that was published, or reports that there was nothing to push.

NameTypeReqDescription
commitMessagestringyesMessage describing the change, shown in the project's Overleaf history. One line, written for a co-author, e.g. "Rewrite Section 4 discussion".
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

read_file ~416

Read one text file from the project after pulling the latest commits from Overleaf. Plain calls return the text, line-numbered when startLine or endLine is given; startLine alone reads to the end, and endLine is clamped to the file. mode=full returns JSON with the content and a revision hash for a guarded edit; mode=smart with previousRevision returns kind unchanged, a delta, or full content when this server process does not know that revision or a delta would be no smaller. Use a line range to sample a large file, mode=full before an edit that passes expectedRevision, and mode=smart to re-read a file already read. Apply a delta only to its exact baseline: split on newline, replace deleteLineCount lines at the 1-based startLine with change.lines, and join on newline. Plain text is cut off after 60,000 characters; in a revision mode, a file too large to return whole comes back truncated with no revision. Fails without reading for a missing or binary file, a path outside the project, a line range combined with mode, or startLine after endLine.

NameTypeReqDescription
endLineinteger–Last line to return, inclusive. Cannot be combined with mode.
modestring–Return revision-aware JSON instead of plain text: "full" for whole content plus a revision, "smart" for a delta against previousRevision. Cannot be combined with startLine/endLine.
pathstringyesPath to the file relative to the project root, e.g. sections/intro.tex.
previousRevisionstring–A 64-character revision hash this server returned for this same file earlier in this session. Requires mode=smart.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
startLineinteger–First line to return, 1-indexed. Cannot be combined with mode.

No output schema declared.

No examples provided.

read_section ~262

Read one section of a .tex file by its title: from its heading to the next heading at the same or a shallower level, stopping before trailing matter such as \appendix, the bibliography or \end{document}. Prefer it over read_file when revising one part of a paper, so the rest stays out of context. sectionTitle is compared case-insensitively with the title in braces, not an optional [short] title: an exact match wins, otherwise the first heading in document order that contains it, so a short fragment can pick an earlier section than intended. Pulls from Overleaf first. Returns the section's LaTeX source as stored, cut off after 60,000 characters; if nothing matches, the reply lists the titles that exist.

NameTypeReqDescription
pathstringyesPath to the .tex file relative to the project root, e.g. main.tex.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
sectionTitlestringyesSection title exactly as it appears inside the sectioning command, e.g. Introduction for \section{Introduction}. Call list_sections first if unsure.

No output schema declared.

No examples provided.

replace_text ~337

Replace an exact snippet of text in a project file. Prefer it over write_file and edit_section for a targeted change: nothing outside the snippet is touched. findText must match exactly, whitespace and newlines included, and occur once unless replaceAll is set; replaceWith is inserted literally, so $$, $& and $1 stay as written. If the snippet is missing, or occurs several times without replaceAll, nothing changes and the reply gives the count; widen findText with surrounding text to make it unique. Pulls from Overleaf first, then edits only the local clone; push_changes publishes it. Returns how many occurrences were replaced.

NameTypeReqDescription
expectedRevisionstring–Optional guard: the 64-character revision hash returned by read_file with mode=full or mode=smart for this same file. When given, the edit is refused if the file changed since that read — for example…
findTextstringyesExact text to find, matched literally including whitespace and newlines. Not a regular expression.
pathstringyesPath relative to the project root.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
replaceAllboolean–Replace every occurrence instead of requiring exactly one match (default false). Only set this when replacing all of them is intended.
replaceWithstringyesText to put in its place. Empty string deletes the snippet.

No output schema declared.

No examples provided.

search_project ~319

Search the project's text sources for a literal string or a regular expression, returning matching lines as path:line: text. Use it to find where a term, citation key, label or command appears when you do not know which file holds it; once you do, use read_file or read_section, and use list_files to find a file by name. Only .tex, .ltx, .bib, .cls, .sty, .bst, .txt and .md files are searched, and a file created locally is not searched until push_changes commits it. Both modes are case-insensitive and match one line at a time, so a pattern cannot span lines. A regular expression uses JavaScript syntax, sees the first 4,000 characters of each line, and is abandoned with an error after 10 seconds; an invalid one fails with its syntax error. maximumMatches counts matching lines, taken in path order. Pulls from Overleaf first.

NameTypeReqDescription
isRegularExpressionboolean–Treat query as a regular expression instead of literal text (default false).
maximumMatchesinteger–Stop after this many matches, between 1 and 500 (default 100).
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.
querystringyesWhat to look for. Literal text by default, so LaTeX backslashes need no escaping; a regular expression when isRegularExpression is true.

No output schema declared.

No examples provided.

show_diff ~176

Show a unified diff of everything in one project's clone that Overleaf does not have yet: uncommitted edits, new and deleted files, and commits left behind by a refused push. Call it before push_changes to see exactly what collaborators will receive, and after a refused push to inspect what is still pending; use project_status when counts are enough. It does not pull first, so the comparison is against Overleaf as last fetched; it contacts Overleaf only to clone a project not opened before. Covers only the chosen project. The diff is cut off after 60,000 characters, and "No local changes pending." means there is nothing to push.

NameTypeReqDescription
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

sync_project ~175

Pull the latest commits from Overleaf into one project's local clone. Nothing is sent to Overleaf and no local edit is discarded. The read tools pull on their own, so this is rarely needed first; call it to check explicitly that the clone is current, or after a collaborator says they have pushed. Use project_status for the full picture. If the pull cannot complete cleanly it fails and leaves local work untouched, rather than resolving the conflict on its own. Only the chosen project is pulled; a project not opened before is cloned instead, and reports nothing pulled. Returns how many commits were pulled and how many local commits are still unpushed.

NameTypeReqDescription
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

write_file ~315

Write a whole file: create it, with any missing parent directories, or overwrite it entirely. Use it to add a new file; for an existing one prefer replace_text or edit_section, which cannot drop text you did not mean to rewrite. content is written exactly as given, as UTF-8, with no trailing newline added. expectedRevision makes the call a guarded overwrite, refused if the file changed since that read or no longer exists, so leave it out when creating a file. path must be relative and stay inside the project; absolute paths, .. escapes and the .git directory are refused. Pulls from Overleaf first, then writes only the local clone; push_changes publishes it. Returns whether the file was created or overwritten.

NameTypeReqDescription
contentstringyesThe complete new contents of the file, not a fragment to append.
expectedRevisionstring–Optional guard: the 64-character revision hash returned by read_file with mode=full or mode=smart for this same file. When given, the edit is refused if the file changed since that read — for example…
pathstringyesPath relative to the project root, e.g. sections/related-work.tex. Must stay inside the project.
projectstring–Which project to use: its Overleaf address, its 24-character id, or a registered project name. Omit to use the default project.

No output schema declared.

No examples provided.

Install

How do I install the Overleaf MCP server?

Overleaf ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, a057f042356c2e89b3faf41b79f7a48752ab0ba3f0bbd2c16fd8425386929655; the commands to do that are on this page. If it does not match, do not open it.

mcpb · mcp-server-overleaf-0.3.9.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

a057f042356c2e89b3faf41b79f7a48752ab0ba3f0bbd2c16fd8425386929655

macOS / Linux

echo "a057f042356c2e89b3faf41b79f7a48752ab0ba3f0bbd2c16fd8425386929655  mcp-server-overleaf-0.3.9.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\mcp-server-overleaf-0.3.9.mcpb).Hash -eq "a057f042356c2e89b3faf41b79f7a48752ab0ba3f0bbd2c16fd8425386929655"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the Overleaf MCP server?

Overleaf is an MCP server listed in the public MCP registry as io.github.yangzichao/mcp-server-overleaf. Overleaf MCP server for Claude, Codex, ChatGPT, and Cursor with safe LaTeX editing and review. This page covers its MCPB bundle (https://github.com/yangzichao/mcp-server-overleaf/releases/download/v0.3.9/mcp-server-overleaf-0.3.9.mcpb).

Is the Overleaf MCP server safe to use?

Overleaf scores 56 out of 100 on VerifyMCP. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Overleaf MCP server expose?

Overleaf exposes 18 tools: list_projects, read_file, list_files, project_summary, list_sections, and 13 more. Their descriptions and schemas cost roughly 4,570 tokens of context every time the server is loaded.

What licence is the Overleaf MCP server under?

Overleaf declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.