Skip to main content
Glama

Overleaf MCP Server Visualizing the bridge between Overleaf and AI through MCP

"I tried to argue with Overleaf, but it said my syntax was invalid."

Overleaf MCP

A VS Code extension and MCP server for Overleaf. Sign in once, see all your Overleaf projects in a VS Code side panel, open and edit them live, compile and read the PDF right next to your source, sync any project to a local folder, and give AI assistants (anything that speaks the Model Context Protocol) the tools to search, read, edit, and compile your papers — one project or many at a time. 🧠

🔗 Repo: https://github.com/GhoshSrinjoy/Overleaf-mcp · ⬇️ Downloads: latest release

VS Code with the Overleaf panel, a live Overleaf file and its PDF preview Your Overleaf projects in the side panel, a file open live from Overleaf, and its PDF beside it.


Executive Summary

Version 2 is a rewrite around a single, faster core:

  • Live, not polled. The server talks to Overleaf the way the Overleaf editor does: one persistent realtime connection per project. Reading a file takes milliseconds instead of a git pull per call, and edits are applied as small operational-transform updates that merge with whatever collaborators are typing. They show up live in their browser.

  • See what you write. Compile on Overleaf and read the PDF in a VS Code tab: it recompiles as the project changes (your saves, collaborators, AI edits), lists errors with links to the line, and jumps between source and PDF with SyncTeX.

  • Works on every plan. Signing in with the Overleaf website session needs no paid Git integration and no per-project tokens. Git tokens still work for headless servers (your old projects.json keeps working).

  • No infrastructure. Redis and BullMQ are gone. Per-project queues and file locks handle concurrency; the server is a single file you can download and run with Node.js.

  • Built for agents. Exact search-and-replace edits, a "suggest mode" that records AI edits as tracked changes for you to accept or reject, ripgrep plus ranked (BM25) search across projects, a LaTeX outline that follows \input, and compile with errors reported as file:line.

In short: Overleaf ⇄ live connection ⇄ VS Code panel + PDF preview + local folders + MCP ⇄ your AI assistant.


Related MCP server: Overleaf MCP Server

Features

VS Code extension

  • 📚 Projects panel listing every project (pinned first, then by last update), expandable into its live file tree. Collaborators' file changes appear immediately.

  • ✏️ Live editing of Overleaf files (overleaf:// documents): saving pushes your change; edits from collaborators or AI tools reload open files; if a document changed while you edited, your save is merged on top instead of overwriting it.

  • 📄 PDF preview next to the editor: Recompile, automatic recompiles on change or on save, draft mode, stop on first error, an errors-and-warnings list that opens the line, zoom, page navigation, download, and SyncTeX both ways (double-click the PDF → source; Show in PDF from the editor).

  • 🔁 Local folder sync (two-way): keep a project mirrored in a folder so local LaTeX builds, git and AI file tools work on real files. Edits on both sides merge; true clashes get conflict markers.

  • 🩺 Compile problems in the Problems panel, on the Overleaf files and on synced local copies.

  • 🔎 Search across projects (the same engine the AI uses).

  • 🔐 Sign in with the browser (Google, ORCID, institutional SSO, password, captcha — whatever Overleaf asks), by pasting a session cookie, or with email/password on self-hosted servers.

  • 🔌 One-click AI client setup for command-line assistants, desktop apps and editors (list), or every one installed at once, and automatic registration with VS Code's built-in MCP support.

MCP server

21 tools, listed below. It runs inside VS Code, or on its own as a single downloadable file, an npm package, a Claude Desktop bundle, or a Docker image.


Install

Everything is on the latest release. You don't need to clone this repository; that is only for building from source.

File

For

overleaf-mcp.vsix

The VS Code extension (panel, live editing, PDF preview, and the MCP server for every assistant on the computer)

overleaf-mcp.js

The MCP server as one file, for assistants without VS Code. Needs Node.js 20+

overleaf-mcp.mcpb

Claude Desktop: open it to install (Settings → Extensions → Install Extension…)

overleaf-live-mcp.tgz

The npm package, for npx

VS Code

Download and install in one step:

# Windows (PowerShell)
Invoke-WebRequest https://github.com/GhoshSrinjoy/Overleaf-mcp/releases/latest/download/overleaf-mcp.vsix -OutFile "$env:TEMP\overleaf-mcp.vsix"; code --install-extension "$env:TEMP\overleaf-mcp.vsix"
# macOS / Linux
curl -fsSL -o /tmp/overleaf-mcp.vsix https://github.com/GhoshSrinjoy/Overleaf-mcp/releases/latest/download/overleaf-mcp.vsix && code --install-extension /tmp/overleaf-mcp.vsix

Or without a terminal: download overleaf-mcp.vsix from the latest release, then in VS Code open the Extensions view → … menu → Install from VSIX… and pick the file. If VS Code was already open, run Developer: Reload Window afterwards. (On macOS, if code is not found, run Shell Command: Install 'code' command in PATH in VS Code first.)

Then click the Overleaf icon in the activity bar → Sign in. A browser window opens on the Overleaf login page; log in as usual and it closes by itself. Your projects appear in the panel. To give other assistants access, open the panel menu (…) → Connect an AI Client… and pick one, or Every AI tool found on this computer.

Self-hosted Overleaf (Community Edition / Server Pro)? Run Overleaf: Use a Different Overleaf Server… first.

AI assistants without VS Code

1. Download the server (skip this if you use the VS Code extension: it installs the same file in the same place):

# macOS / Linux
mkdir -p ~/.overleaf-mcp/server && curl -fsSL -o ~/.overleaf-mcp/server/overleaf-mcp.js \
  https://github.com/GhoshSrinjoy/Overleaf-mcp/releases/latest/download/overleaf-mcp.js
# Windows (PowerShell)
New-Item -ItemType Directory -Force "$HOME\.overleaf-mcp\server" | Out-Null
Invoke-WebRequest https://github.com/GhoshSrinjoy/Overleaf-mcp/releases/latest/download/overleaf-mcp.js -OutFile "$HOME\.overleaf-mcp\server\overleaf-mcp.js"

2. Add it to your assistant:

Assistant

macOS / Linux

Claude Code

claude mcp add --scope user overleaf -- node ~/.overleaf-mcp/server/overleaf-mcp.js

Codex CLI

codex mcp add overleaf -- node ~/.overleaf-mcp/server/overleaf-mcp.js

GitHub Copilot CLI

copilot mcp add overleaf -- node ~/.overleaf-mcp/server/overleaf-mcp.js

Gemini CLI

In ~/.gemini/settings.json: "mcpServers": {"overleaf": {"command": "node", "args": ["/home/you/.overleaf-mcp/server/overleaf-mcp.js"]}}

Cursor, Windsurf, others

The same mcpServers entry in the client's MCP config (~/.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, …)

Claude Desktop

Open overleaf-mcp.mcpb (no Node.js needed), or use the mcpServers entry in claude_desktop_config.json

VS Code without the extension

code --add-mcp '{"name":"overleaf","command":"node","args":["/home/you/.overleaf-mcp/server/overleaf-mcp.js"]}'

On Windows (PowerShell), use the full path and quote the -- (PowerShell drops a bare -- before it reaches these tools):

claude  mcp add --scope user overleaf '--' node "$HOME\.overleaf-mcp\server\overleaf-mcp.js"
codex   mcp add overleaf '--' node "$HOME\.overleaf-mcp\server\overleaf-mcp.js"
copilot mcp add overleaf '--' node "$HOME\.overleaf-mcp\server\overleaf-mcp.js"

3. Sign in. Ask the assistant to sign in to Overleaf (the sign_in tool opens the Overleaf login page in your browser), or do it once from a terminal: node ~/.overleaf-mcp/server/overleaf-mcp.js login --browser. The session is saved in ~/.overleaf-mcp/credentials.json and shared by every assistant on the computer.

With npx instead: use npx -y https://github.com/GhoshSrinjoy/Overleaf-mcp/releases/latest/download/overleaf-live-mcp.tgz as the command (for example claude mcp add --scope user overleaf -- npx -y <that URL>). On Windows, clients that cannot start npx themselves need cmd /c npx -y <that URL>.

From source

Only needed if you want to change the code or build the files yourself:

git clone https://github.com/GhoshSrinjoy/Overleaf-mcp.git
cd Overleaf-mcp
npm install
npm run package                      # creates overleaf-mcp-<version>.vsix
code --install-extension overleaf-mcp-2.1.0.vsix
npm run package:release              # all release files into build/release

PDF preview

Right-click a project → Open PDF Preview, or click the preview button at the top of an open .tex file. The preview opens beside the editor.

  • Recompile (or Ctrl+Enter / ⌘+Enter in the preview) compiles on Overleaf with the project's own compiler and main document. While the preview is open it also recompiles by itself:

    • On any change (default): your saves, collaborators' edits and AI edits.

    • When you save: only your saves in VS Code (Overleaf files and synced local copies).

    • Never: only when you press Recompile.

    Pick one under the arrow next to Recompile, or with the overleafMcp.pdf.autoCompile setting. A preview in a background tab catches up when you show it.

  • Draft mode (faster, leaves images out) and Stop on first error are in the same menu.

  • Errors and warnings are counted in the toolbar; click the count for the list, and an entry to open its line. They are also in the Problems panel.

  • SyncTeX: double-click anywhere in the PDF to open the source line that produced it. In the editor, right-click → Show in PDF highlights where the cursor's line ended up. Both also work for projects synced to a local folder.

  • Zoom (also Ctrl + mouse wheel), page number, Save the PDF…, Open in your PDF viewer, the raw compile log, and find (Ctrl+F).

Show in PDF: the selected paragraph highlighted in the PDF SyncTeX: the paragraph under the cursor, highlighted in the PDF.

The compile options menu of the PDF preview When to recompile, draft mode and stop on first error.

A LaTeX error underlined in the editor, listed in the preview and in the Problems panel An error from Overleaf's compile: underlined at its line, listed in the preview (click to jump) and in the Problems panel.

To give Show in PDF a shortcut, add to keybindings.json:

{ "key": "ctrl+alt+j", "command": "overleafMcp.syncToPdf", "when": "resourceScheme == overleaf" }

Connecting AI clients

The extension installs a stable copy of the server at ~/.overleaf-mcp/server/overleaf-mcp.js (it survives extension updates) and shares your sign-in with it through ~/.overleaf-mcp/credentials.json. Connect an AI Client… writes the configuration for you:

The Connect an AI Client list, showing which assistants are installed Pick one assistant, or set up every one found on the computer.

Client

What the extension does

VS Code chat (agent mode)

Registered automatically ("Overleaf" in the tools list)

Claude Code, Codex CLI, GitHub Copilot CLI

Runs the tool's own mcp add command in a terminal

Claude Desktop, Cursor, Windsurf, Gemini CLI

Adds overleaf to the tool's JSON config (keeping a .bak copy)

Every AI tool found on this computer

All of the above for each tool that is installed

Any HTTP client

http://127.0.0.1:39847/mcp with Authorization: Bearer <token> (Show MCP Connection Details copies the token). Runs while VS Code is open

Stdio servers work with or without VS Code running. The HTTP endpoint shares the extension's live connections, so its edits show up in open editors instantly. More client-specific notes are in CLAUDE_CONFIG.md.


MCP Tools

Tool

What it does

status

Signed-in account, pinned projects, search engine

sign_in

Opens the Overleaf login page in the browser (or takes a session cookie) and shares the session with every assistant on the computer

list_projects

All projects with ids, last update, owner, access, tags, local sync folder

pin_projects

Pin/unpin projects; pinned projects are the default scope, and one pinned project lets tools omit project

create_project

New blank or example project

list_files

File tree with the main document marked

read_file

Live content (optionally a line range); images come back as images

grep

Exact text or regex across one, several or all projects (ripgrep), with context lines and globs

search

Relevance-ranked passages for a topic (BM25 with fuzzy and prefix matching)

get_outline

Chapters/sections across \input/\include, each with file:line

get_section

The LaTeX of one section, found by title

edit_file

Exact search-and-replace edits, applied atomically and live; suggest: true makes them tracked changes; dryRun previews the diff

write_file

Create or overwrite a file (minimal live diff for existing docs)

delete_file, move_file, create_folder

File management

upload_file, download_file

Move files between this computer and a project

compile

Compile on Overleaf; errors/warnings with file:line; optionally save the PDF

history, history_diff

Project history (who changed what, when) and diffs between versions

Every tool accepts a project by name, id or Overleaf URL, and every file in a project can be read, searched and changed. Errors explain how to recover (for example, an ambiguous oldText reports how many times it occurs; a near miss shows the passage that differs only in whitespace).

Overleaf documents cannot contain emoji or other characters outside the Basic Multilingual Plane; tools reject such edits with the offending line instead of letting Overleaf corrupt them.


Local folder sync

Right-click a project → Sync to Local Folder… (default ~/Overleaf/<project>). The folder must be new or empty.

  • Saving a file locally pushes it within a second; edits on Overleaf are written to the file.

  • Changes made while sync was off are reconciled three ways (local / Overleaf / last synced): one-sided changes are copied, edits on both sides are merged, and clashing edits get <<<<<<< markers. Resolve and save; the resolution is pushed.

  • Build output (*.aux, *.log, the main PDF, …) stays local; edit .overleafignore in the folder to change that.

  • The PDF preview, Show in PDF and compile problems work on the local copies too.

  • Only one VS Code window (or CLI) syncs a folder at a time; another takes over if it closes.

  • Without VS Code: overleaf-mcp sync "<project>" [folder].


Headless, CLI and Docker

The server is a single self-contained file (overleaf-mcp.js on the release page, dist/mcp-server.js when built; Node ≥ 20). From npm it is called overleaf-live-mcp.

overleaf-mcp                         serve MCP over stdio (what AI clients launch)
overleaf-mcp --http [--port N]       serve MCP over HTTP on 127.0.0.1
overleaf-mcp login --browser         sign in on the real login page
overleaf-mcp login --cookie <value>  or paste the overleaf_session2 cookie
overleaf-mcp login --email E --password P   (self-hosted servers)
overleaf-mcp status | logout
overleaf-mcp sync <project> [folder] two-way sync until Ctrl+C

(overleaf-mcp stands for node path/to/overleaf-mcp.js.)

Docker (your existing client config docker compose run --rm -T mcp keeps working):

docker compose build
docker compose run --rm mcp login --cookie "<overleaf_session2 value>"   # optional: web session
docker compose run --rm -T mcp                                         # what MCP clients run

The compose file mounts projects.json (Git tokens) and ./data (session, caches, Git clones). Without a session, projects listed in projects.json are served through the Git bridge:

{
  "projects": {
    "default": { "name": "My Paper", "projectId": "YOUR_PROJECT_ID", "gitToken": "YOUR_GIT_TOKEN" }
  }
}

Git-token projects support reading, searching, outlines, edits (commit + push, retried if someone pushed first) and history. Compile, suggest mode and project listing need the web session.

Environment variables

Variable

Purpose

OVERLEAF_MCP_HOME

Data directory (default ~/.overleaf-mcp)

OVERLEAF_COOKIES / OVERLEAF_SESSION

Session for headless use (full Cookie header, or the overleaf_session2 value)

OVERLEAF_SERVER_URL

Server (default https://www.overleaf.com); also where sign_in signs in

PROJECTS_FILE

Git-token projects file (default <home>/projects.json)

OVERLEAF_GIT_TOKEN, OVERLEAF_PROJECT_ID

Single Git-token project without a file

OVERLEAF_GIT_AUTHOR_NAME, OVERLEAF_GIT_AUTHOR_EMAIL

Commit identity for Git-token edits

OVERLEAF_MCP_TOKEN, OVERLEAF_MCP_PORT

Bearer token and port for --http

OVERLEAF_MCP_RG

Path to a ripgrep binary


Methodology

                    ┌──────────────── Overleaf (overleaf.com or self-hosted) ────────────────┐
                    │  web API (projects, zip, uploads, compile, SyncTeX, history)   realtime │
                    └───────────────▲────────────────────────────────────────▲────────────────┘
                                    │ session cookie                          │ OT updates, live events
┌──────────────────────── core (TypeScript) ──────────────────────────────────┴──────────────┐
│ SessionBackend ── realtime pool (1 connection/project, auto-reconnect)    GitBackend (tokens) │
│ OverleafService: project resolution · pins · snapshot cache · ripgrep / BM25 search          │
│                  LaTeX outline · log parser · 3-way merge · local mirror engine              │
└───────────────▲───────────────────────────────▲───────────────────────────────▲─────────────┘
                │                               │                               │
     MCP server (stdio / HTTP)          VS Code extension                CLI (sync, login)
     AI assistants                      panel · overleaf:// files ·      Docker image
                                        PDF preview (pdf.js) ·
                                        local sync · problems
  1. Sign-in. A throwaway browser profile opens the real Overleaf login page; once you are in, the session cookie is captured over the DevTools protocol and the profile is deleted. Cookies live in VS Code's secret storage, mirrored (optionally) to an owner-only file for MCP servers started by other apps.

  2. Reading. Documents are read over the realtime connection (always the latest text, including unsaved typing of collaborators). Search uses a local text snapshot per project, refreshed only when Overleaf reports the project changed.

  3. Writing. Edits become OT updates against the version that was read; the server transforms them over concurrent edits. Overleaf's newer history-ot documents are supported, including tracked changes.

  4. Compiling. Compiles run on Overleaf's own servers. The preview draws the PDF with pdf.js inside a locked-down webview; SyncTeX lookups go to Overleaf with the id of the build on screen, so positions always match the PDF you see. Edits arriving over the realtime connection trigger debounced recompiles, one at a time per project.

  5. Concurrency. Per-project queues in-process, file locks across processes, and a lease for local sync folders.


Security notes

  • ~/.overleaf-mcp/credentials.json holds the Overleaf session (owner-only permissions). Turn off overleafMcp.mcp.shareSessionWithExternalClients to keep it only in VS Code's secret storage.

  • Signing out also ends the session on Overleaf when it was created by the browser or password sign-in; a pasted cookie is left alone (it is your browser's session).

  • The HTTP endpoint listens on 127.0.0.1 only, requires a bearer token, and rejects browser (cross-origin) requests.

  • The PDF preview runs only its own scripts (strict content security policy); scripts inside PDFs are not run, and links open through VS Code's usual confirmation.

  • Git tokens are passed to git through its environment, never written to .git/config or shown in process lists.

  • projects.json, data/ and *.vsix are git-ignored. Never commit tokens.


Development

npm install
npm run build          # dist/extension.js, dist/mcp-server.js and the PDF viewer files in media/pdfjs
npm run typecheck
npm test               # unit tests
npm run package:server # build/release: overleaf-mcp.js, overleaf-live-mcp.tgz, overleaf-mcp.mcpb
npm run package:release  # the same plus overleaf-mcp.vsix
npm run screenshots    # retake the README screenshots (needs the local Overleaf below)

Integration tests run against a local Overleaf Community Edition in Docker (nothing touches overleaf.com):

docker compose -f test/overleaf-ce/docker-compose.yml up -d    # first start takes a minute
npm run test:integration    # protocol and SyncTeX, live editing (both doc formats), MCP end to end, browser sign-in, Git mode, local sync
npm run test:extension      # inside a real VS Code instance: panel, live files, PDF preview, SyncTeX, auto-recompile, MCP endpoint, sync
npm run test:vsix           # the same, against the packaged .vsix as installed

If port 8090 is taken, start the server with OVERLEAF_TEST_PORT=8095 and run the tests with OVERLEAF_TEST_URL=http://localhost:8095.

Press F5 in VS Code to launch an Extension Development Host.


Troubleshooting

  • "Not signed in … or the session has expired" — sign in again from the panel, or ask your assistant to use sign_in (sessions expire after a few days without use).

  • Browser sign-in doesn't open — set overleafMcp.browserPath to Chrome, Edge, Brave or Chromium, or use Paste a session cookie.

  • The PDF preview stays empty — check Output → Overleaf MCP; Show Compile Log shows what LaTeX said. A compile that times out on Overleaf usually finishes in draft mode.

  • "Too recently compiled" — Overleaf refuses compiles less than a second or two apart; the extension and the compile tool wait and retry.

  • Long compiles time out in Codex — raise tool_timeout_sec for [mcp_servers.overleaf] in ~/.codex/config.toml (the default is 60 seconds).

  • Port 39847 in use — change overleafMcp.mcp.httpServer.port; stdio clients are unaffected.

  • "Overleaf asked for a captcha" — password sign-in is blocked on overleaf.com; use the browser sign-in.

  • Rate limited — Overleaf limits logins (10 per 2 minutes), project downloads (10 per minute per project) and compiles; the tools back off and retry.


Citation

If you use this software in your research, please cite:

@software{overleaf_mcp_2025,
  author = {GhoshSrinjoy},
  title = {Overleaf MCP Server},
  year = {2025},
  url = {https://github.com/GhoshSrinjoy/Overleaf-mcp}
}

Next Steps

🧾 Comments and review threads as MCP tools. 📦 Publish to the VS Code Marketplace and to npm (npx -y overleaf-live-mcp). 🧠 Optional semantic (embedding) search on top of BM25. 🗂️ Project-wide find-and-replace with preview.


MIT License

Available Tools

21 tools
compileCompile with OverleafA

Compiles the project on Overleaf's servers and reports LaTeX errors and warnings with file:line, so they can be fixed with edit_file. Optionally saves the PDF locally.

NameRequiredDescriptionDefault
draftNoFaster draft mode (no images)
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
rootFileNoCompile this file instead of the main document
savePdfToNoAbsolute local path to save output.pdf to
maxWarningsNoDefault 15
stopOnFirstErrorNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=true; the description adds meaningful behavior beyond that: compilation happens remotely on Overleaf's servers, diagnostics come back with file:line, and there is an optional local PDF side effect. It does not mention cost, latency, or whether an existing output.pdf gets overwritten, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence that front-loads the action and its result, then appends the optional side effect. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description carries the return-value burden and does so adequately: it promises errors and warnings tagged with file:line. It omits the shape of a successful result (e.g. confirmation or artifact path), but nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already explains draft mode, project resolution, rootFile, savePdfTo and maxWarnings. The description only alludes to savePdfTo ('optionally saves the PDF locally') and adds no format or default detail, so it sits at the baseline for a well-documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (compiles) and resource (the project, on Overleaf's servers) plus the value it returns (LaTeX errors and warnings with file:line). It also names a sibling, edit_file, so an agent can place it in a workflow rather than guessing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so they can be fixed with edit_file' establishes the compile-check-fix cycle and implicitly tells the agent when to call it. It stops short of explicit when-not-to-use guidance or naming alternatives for viewing output (e.g. download_file), so it is clear context without full routing rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_folderCreate a folderB
Idempotent

Creates a folder (and any missing parents) in a project.

NameRequiredDescriptionDefault
pathYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply idempotentHint=true and openWorldHint=true, so the bar is lower. The description adds useful behavior beyond them: it creates any missing parent folders. However, it does not disclose authorization needs, error behavior, or what happens when the folder already exists beyond the idempotency annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It efficiently conveys the main action and the recursive-parent behavior. It is appropriately concise, though not richly structured or expansive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with no output schema, the description covers the basic action and project context. Annotations cover idempotency and open-world behavior. However, the required 'path' parameter remains undocumented, and authentication/permission expectations are absent, leaving notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: the optional 'project' parameter has a schema description, but the required 'path' parameter has none. The description does not compensate by explaining the format or meaning of 'path' (e.g., relative path, nesting rules), so an agent still lacks key parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Creates a folder ... in a project.' It also clarifies that missing parent folders are created recursively. It does not explicitly differentiate itself from sibling tools like create_project, which is the only gap keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as create_project, upload_file, or move_file. Usage is only implied by the verb 'Creates', with no exclusions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_projectCreate an Overleaf projectA

Creates a new Overleaf project, either blank (with an empty main.tex) or from Overleaf's example template.

NameRequiredDescriptionDefault
nameYes
templateNoDefault blank

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint=true, so safety/behavior is largely on the description. It usefully discloses what content the new project starts with (empty main.tex or example template), but says nothing about auth requirements, whether the new project becomes active/selected, or side effects on existing state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The core action leads and the two modes follow immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should ideally indicate what comes back (project id/URL) so an agent can chain into write_file or compile. It also omits auth prerequisites, leaving meaningful gaps for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: 'template' is documented (though tersely as 'Default blank') while 'name' is undocumented beyond min/max length. The description clarifies the meaning of the two template values, partially compensating, but leaves name constraints (uniqueness, 150-char limit) unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Creates) and resource (Overleaf project), and distinguishes the two creation modes (blank with empty main.tex vs. example template). This separates it cleanly from siblings like list_projects or upload_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two output variants but gives no when-to-use guidance, no prerequisites (e.g., must be signed in), and no routing to alternatives. An agent gets no help deciding when create_project is the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_fileDelete a file or folderA
Destructive

Deletes a file or folder (with its contents) from a project. Overleaf keeps it in project history.

NameRequiredDescriptionDefault
pathYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=true, so the bar is lower. The description still adds real value: deletion is recursive for folders ('with its contents') and Overleaf retains the item in project history, which tells the agent the action is recoverable. It omits permission requirements and behavior when the path does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the destructive scope (contents included) front-loaded and the recoverability caveat immediately after. Nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive tool with no output schema and annotations already flagging destructiveness, the description covers scope, recursion, and recoverability adequately. Missing only auth/permission notes and failure behavior for nonexistent paths.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: 'project' is documented but 'path' has no description. The description partially compensates by indicating the path may point to either a file or a folder, but it says nothing about path format (project-relative vs absolute) or the pinned-project fallback logic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (deletes) and resource (file or folder, with its contents) scoped to a project, which is unambiguous against siblings like move_file, edit_file, or create_folder. It does not explicitly name or contrast with any sibling, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is offered; the agent must infer that this is the tool for removal. There is no mention of alternatives (e.g., move_file to relocate rather than delete) or prerequisites before destroying content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_fileDownload a project fileC

Saves a project file (any type) to a path on this computer.

NameRequiredDescriptionDefault
pathYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
localPathYesAbsolute destination path on this computer

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and openWorldHint=true, so the fact that this writes to the local filesystem is already covered. The description adds 'any type' scope, but says nothing about overwriting an existing local file, creating parent directories, auth requirements, or size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource and destination front-loaded and no filler. It is appropriately sized, though the brevity comes at the cost of missing behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write-to-local-disk tool with no output schema, the description should cover overwrite semantics, directory handling, and what is returned on success; none of that is present, and one required parameter is undocumented in both description and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: `project` and `localPath` are documented in the schema, but the required `path` parameter has no description anywhere. The description's phrase 'to a path on this computer' merely paraphrases localPath and leaves the remote `path` meaning unresolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: saving a project file of any type to a local path. This clearly separates it from upload_file (opposite direction) and read_file (returns content without saving), though it does not name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of when a user should prefer read_file (read inline) over download_file (save to disk). The agent must infer the distinction from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_fileEdit a fileA

Applies exact search-and-replace edits to a file, live: collaborators see the change instantly and concurrent typing is merged, not overwritten. All edits apply together or not at all. With suggest=true the edits become tracked changes the author can accept or reject in Overleaf's review panel.

NameRequiredDescriptionDefault
pathYes
editsYesApplied in order, each to the result of the previous one
dryRunNoShow the diff without changing anything
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
suggestNoRecord as tracked changes (suggestions) instead of direct edits

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint and destructiveHint=false, yet the description adds substantial behavioral context: live multi-collaborator visibility, merge-not-overwrite concurrency semantics, atomic all-or-nothing application, and the tracked-change/review flow under suggest=true. These are meaningful traits an agent could not infer from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences that lead with the core action and then layer behavior and the suggest mode. Front-loaded and largely waste-free, though the first sentence is dense with clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and only partial annotation coverage, so the description carries the behavioral burden well — atomicity, live merge, and suggestion semantics are all present. It omits auth/pinning expectations and the meaning of dryRun, but for a well-schema'd mutation tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already documents oldText/newText/replaceAll/dryRun/project. The description adds meaning for suggest (tracked changes vs. direct edits) but says nothing about dryRun, replaceAll, or the pinned-project omission rule. Baseline 3 is appropriate when the schema carries most parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and mechanism: 'Applies exact search-and-replace edits to a file.' This clearly separates it from whole-file writers like write_file by the search-and-replace mechanic, though it never names that sibling explicitly, so the differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no comparison to alternatives such as write_file or the suggest-mode review flow vs. direct edits. 'With suggest=true...' describes a mode's effect but not the condition under which an agent should choose it over a direct edit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_outlineDocument outlineA
Read-only

Outline of a LaTeX project (parts, chapters, sections, …) following \input/\include from the main document, with file:line for each heading.

NameRequiredDescriptionDefault
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
rootFileNoStart from this file instead of the project's main document

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read-only and open-world behavior, but the description adds useful traits beyond them: it follows \input/\include from the main document and reports file:line for each heading. This reveals traversal behavior and output shape. It does not mention permissions or limits, but the added behavioral detail exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It packs the resource, traversal rule, and output format into one tight line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does explain the return content (outline of parts/chapters/sections with file:line). It is nearly complete for a read-only outline tool, though it could say more about the returned structure or failure behavior if no main document is found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents project and rootFile. The description adds no parameter-level meaning, such as how rootFile interacts with \input traversal. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (document outline) and its scope: parts, chapters, sections, resolved through \input/\include from the main document. It gives enough detail to distinguish it from get_section and list_files, though it is not phrased as a clean verb+resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use, when-not-to-use, or alternative selection guidance is provided. An agent can infer that this retrieves the project outline, but the description never mentions get_section or other sibling tools that could also inspect document structure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sectionRead one sectionA
Read-only

Returns the LaTeX of one section (up to the next heading of the same or higher level), found by title anywhere in the document.

NameRequiredDescriptionDefault
fileNoLook only in this file
titleYesSection title, matched case-insensitively (exact first, then unique partial match)
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe-read profile (readOnlyHint), so the description's real contribution is defining the boundary of what is returned — everything up to the next same-or-higher-level heading — plus the document-wide lookup scope. It omits error behavior when no section matches, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the return value and packs the boundary and lookup semantics without filler. Nothing to remove.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with no output schema, the description explains what is returned and how the target is located, and the schema covers the parameters. Missing only not-found/error behavior and multi-file ambiguity handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (file, title, project) are documented in the schema, including the case-insensitive exact-then-partial match rule. The description adds nothing about parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Returns the LaTeX of one section') and defines the exact extent of that resource ('up to the next heading of the same or higher level'), which distinguishes it from read_file and get_outline. It stops short of naming any sibling tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool fetches a single section by title, and notes the title is searched 'anywhere in the document', but never says when to prefer this over read_file, get_outline, or search, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grepGrep across projectsA
Read-only

Exact text or regex search (ripgrep) across one or many projects, with file:line results and optional context. Uses local snapshots that refresh automatically when Overleaf reports changes. For topic-style questions use "search" instead.

NameRequiredDescriptionDefault
queryYesText to find, or a regex when regex is true
regexNo
excludeNo
includeNoGlob patterns of files to search, e.g. ["*.tex"] or ["chapters/**"]
refreshNoRe-download the projects before searching
projectsNoProjects to cover: a list of names/ids, or "all". Defaults to the pinned projects, or the 25 most recently updated if none are pinned.
wholeWordNo
maxResultsNoDefault 100
contextLinesNoLines of context around each match (default 1)
caseSensitiveNoDefault: smart case (case-insensitive unless the query has capitals)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: it runs on local snapshots that refresh automatically when Overleaf reports changes, which tells the agent about data freshness and offline behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose then behavior then routing. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description covers result format (file:line), snapshot freshness, and sibling routing. Minor gaps remain (no explicit note on projects-argument defaulting beyond the schema), but it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 70%, so the schema documents most parameters (include, projects, refresh, maxResults, contextLines, caseSensitive). The description only echoes that search can be exact/regex and that context is optional, adding little syntax or default detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (regex/text search via ripgrep across projects) with concrete output shape (file:line results) and names the sibling it is not ("search"). An agent can distinguish it from among the 21 sibling tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"For topic-style questions use 'search' instead" explicitly names the alternative and the condition that selects it, which is strong routing guidance. It stops short of a full when/when-not treatment (e.g., no guidance on scope selection or refresh timing), so it is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

historyProject historyA
Read-only

Recent changes recorded in Overleaf's project history: versions, authors, times and touched files. Use history_diff to see what changed between versions.

NameRequiredDescriptionDefault
pathNoOnly changes touching this file
limitNoDefault 20
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the shape of what comes back (versions, authors, times, touched files), which matters because there is no output schema. It does not disclose ordering, pagination, or truncation behavior for the version list, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the resource scope front-loaded and the sibling routing placed last. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields, and the pointer to history_diff covers the main adjacent decision. Minor gaps remain around ordering and whether the list is paginated, but nothing essential for calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so path, limit and project are all documented in the schema itself. The description adds nothing about parameter meaning, filtering semantics, or the pinned-project behavior beyond what the schema states — baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and its contents ('recent changes recorded in Overleaf's project history: versions, authors, times and touched files'), which is far more than a restatement of the name 'history'. It also explicitly separates itself from the history_diff sibling. The verb is implicit (retrieve/list) rather than stated, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool and the condition that selects it: 'Use history_diff to see what changed between versions.' That tells the agent when to reach for the sibling, though it never states positively when history itself is the right call (implied by 'recent changes').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

history_diffDiff between versionsA
Read-only

Unified diff of one file between two history versions (from the history tool's vFrom→vTo numbers).

NameRequiredDescriptionDefault
pathYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
toVersionYes
fromVersionYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the return format (unified diff) and that output is scoped to a single file, which is useful given there is no output schema, but it says nothing about size limits on large diffs, pagination, or how missing versions are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the most important scoping information (one file, unified format, between two versions) comes first and the version-number source is parenthetically appended.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema and low schema coverage, the description covers the critical question of where version numbers come from but omits path conventions, error behavior for versions that don't exist, and any indication of diff output size. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only `project` is documented), so the description must compensate. It clarifies the meaning and source of `fromVersion`/`toVersion` beyond the bare integer schema, but leaves `path` (format, project-relative vs absolute) and the omitted-project pinning behavior to the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation (unified diff) on a specific resource (one file between two history versions), which is unambiguous. It implicitly separates itself from the sibling `history` tool by noting that the version numbers come from that tool, but it does not explicitly frame the sibling relationship beyond that hint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical gives real usage context: the fromVersion/toVersion values must be obtained from the `history` tool's vFrom→vTo numbers, establishing a prerequisite workflow. It stops short of stating when-not to use it or naming an explicit alternative for viewing differences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesList project filesA
Read-only

Shows the file tree of a project, marking the main document. Docs are editable text; "binary/uploaded" files are images, PDFs and other uploads.

NameRequiredDescriptionDefault
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful interpretation: docs are editable text while 'binary/uploaded' entries are images/PDFs/uploads, which helps an agent interpret the output labels. It does not address ordering, size limits, or the exact form of the main-document marker.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, front-loading the core action before the clarifying note on file types. Slightly terse given it leaves usage and return shape unstated, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only listing tool with no output schema, the description covers purpose and the meaning of the two content categories. Missing are any note on tree ordering/shape or how the main document is marked, which would matter for an agent parsing the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains that the project may be a name, id, or Overleaf URL and may be omitted when one project is pinned. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it 'shows the file tree of a project,' which is clearly distinct from list_projects (projects, not files) and read_file (contents, not structure). It also calls out that the main document is marked, adding scope detail. It stops short of naming any sibling to differentiate against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not guidance and no alternative tools named (list_projects, read_file, get_outline are all plausible neighbors). The purpose itself implies the usage context — inspecting project structure before reading or editing — so usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsList Overleaf projectsB
Read-only

Lists the projects in the Overleaf account (newest first, pinned first), with ids, last update, owner, access level and tags.

NameRequiredDescriptionDefault
tagNoOnly projects in this Overleaf tag/folder
limitNoDefault 50
queryNoOnly projects whose name contains this text
refreshNoBypass the 30-second project list cache
includeTrashedNo
includeArchivedNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description usefully adds result ordering and the shape of each entry, but says nothing about the 30-second cache behavior (only hinted at via the refresh parameter in the schema), pagination, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb and scope front-loaded; the parenthetical packs ordering and returned fields efficiently. No wasted words, though it trades exhaustiveness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the fields returned and the ordering, which is what an agent needs to consume results. The main gap is the two undescribed boolean filters and no mention of pagination or the cache.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, leaving includeTrashed and includeArchived undocumented in both schema and description. The description mentions 'tags' only as a returned field, adding no meaning to the tag, query, limit, or refresh parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Lists) plus resource (projects in the Overleaf account) with the ordering semantics (newest first, pinned first) and the fields returned (ids, last update, owner, access level, tags). Nothing in the sibling list (list_files, search, etc.) overlaps, so the agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what is returned but never says when to reach for this tool versus list_files or search, nor any prerequisite (e.g. requires sign_in) or exclusion. Usage is only inferable from the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_fileMove or renameB

Moves and/or renames a file or folder inside a project, creating target folders as needed.

NameRequiredDescriptionDefault
toYes
fromYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=false and openWorldHint=true, so the safety profile is partly covered. The description adds a genuine side effect not in the annotations ('creating target folders as needed'), which is useful. However, it says nothing about what happens if the destination already exists (overwrite vs. error), which is the key behavioral risk for a move operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the operation and its side effect are stated in one pass. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation tool with sparse annotations and no output schema, the description covers the core action and target-folder creation but omits destination-collision behavior and the interaction between 'from'/'to' and the optional 'project' scope. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% — only 'project' is documented. The words 'moves and/or renames' hint that 'to' may be a destination path or a new name, but the description gives no format, path-root, or collision semantics for 'from' and 'to'. It does not compensate for the undocumented required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair and resource ('moves and/or renames a file or folder inside a project'), which is distinct from siblings like delete_file, write_file, and create_folder. It is clear what the tool does, but it does not explicitly name a sibling alternative or a boundary case to fully separate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative-tool guidance. The agent must infer from the verb alone that this is the tool for relocating or renaming existing content rather than editing, copying, or deleting it. No prerequisites (e.g., project pinning) are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pin_projectsPin projects for AI workA
Idempotent

Pins (or unpins) projects. Pinned projects are the default scope for grep/search, and a single pinned project lets other tools omit "project". Pins are shared with the VS Code panel.

NameRequiredDescriptionDefault
unpinNoRemove the pins instead of adding them
projectsYesProject names or ids

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint=false and idempotentHint=true, so the description adds real value by disclosing the cross-surface side effect that pins are shared with the VS Code panel, and by clarifying the dual pin/unpin behavior. It does not discuss permissions or what happens to pre-existing pins beyond the schema's wording.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste: the action, the consequence for other tools, and the external side effect, in that order. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no output schema and partial annotations, the description covers the action, the scope effect, and cross-tool sharing. It is nearly complete, with only the additive/replacing behavior of repeated pin calls left implicit in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the 'unpin' flag and the 'projects' array are already documented structurally. The description adds no naming format or id-vs-name nuance beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Pins (or unpins) projects') and immediately clarifies the semantic consequence of that state for other tools. It is clearly distinct from siblings like list_projects or status, though it does not name a sibling to contrast against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the effect of pinning ('default scope for grep/search', single pin lets tools omit 'project'), which implies when an agent should call it, but never states explicit when-to-use or when-not-to-use guidance against alternatives such as passing an explicit project argument instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileRead a project fileA
Read-only

Reads a file live from Overleaf (always the latest content, including collaborators' unsaved typing). Optionally a line range. Images (png/jpg/gif/webp) are returned as images.

NameRequiredDescriptionDefault
pathYesFile path inside the project, e.g. "main.tex" or "sections/intro.tex"
endLineNo
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
startLineNo
lineNumbersNoPrefix lines with their numbers (do not copy these into edits)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), and the description still adds real behavioral context: content is live and may include unsaved collaborator edits, and the return type varies with file extension (images vs text). It omits what happens on a missing path, whether line ranges are 1-indexed/inclusive, and the cost of live reads, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the live-content guarantee, then the optional range, then the media-type caveat. Every clause carries information an agent needs and nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description rightly explains the return shape (text vs image) and the line-range option, which is the main ambiguity for a 5-param read tool. Missing only error behavior for invalid or binary paths and the interaction between lineNumbers and a range, which keeps it short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%: path, project, and lineNumbers are documented in-schema, while startLine/endLine have only numeric bounds. The description partially compensates by framing them as a combined 'line range', but does not say they are inclusive, 1-indexed, or whether endLine can be omitted while startLine is set. It adds little beyond the schema for the documented params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Reads a file live from Overleaf') with the defining scope called out: it returns the latest live content including collaborators' unsaved typing, which separates it from a saved-state read like download_file. It also states the two output shapes (text with optional line range, images returned as images), so an agent can tell it apart from grep/search without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'live ... latest content' tells the agent to prefer this over a saved copy, and 'Images ... returned as images' hints at when it beats a text-only path. But no sibling is named and no when-not condition is given (e.g. use grep to find content across files, download_file for export).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_inSign in to OverleafA

Signs in to Overleaf so the other tools work. Without a cookie it opens the Overleaf login page in a browser window on this computer (Google, ORCID, institutional SSO and passwords all work) and waits for the person to log in. If the person gives you their overleaf_session2 cookie, pass it instead. Only needed once; the session is shared by every Overleaf tool on this computer.

NameRequiredDescriptionDefault
cookieNoSession cookie value (or a whole Cookie header) the person supplied
serverNoSelf-hosted Overleaf URL; default https://www.overleaf.com

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint and destructiveHint, so the description carries the behavioral load and does so well: it discloses the interactive browser-window flow, that it waits for a human, the supported login methods, and that the resulting session persists and is shared across all Overleaf tools on the machine. These are non-obvious traits an agent must anticipate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and the prerequisite relationship, then the two usage branches. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param, zero-required auth tool with no output schema, the description covers the interaction model, the cookie alternative, one-time use, and session scope. An agent has everything needed to call it correctly and to instruct the user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds genuine meaning beyond the schema: it tells the agent when to supply cookie instead of triggering the browser flow, and notes the cookie may be a full Cookie header. It adds little for server beyond the schema's default note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (signs in to Overleaf) and immediately frames its role among siblings: 'so the other tools work.' An agent can tell this is the authentication prerequisite for the other Overleaf tools rather than a data operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('only needed once'), gives the alternative path when a cookie is available ('If the person gives you their overleaf_session2 cookie, pass it instead'), and describes the default flow when no cookie is given. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusOverleaf connection statusA
Read-only

Shows which Overleaf account is signed in, the server, pinned projects and the search engine in use. Call this first if other tools report sign-in problems.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by disclosing the diagnostic role and roughly what information the call returns (account, server, pinned projects, search engine) — useful given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The content summary comes first and the actionable troubleshooting instruction is front-loaded at the end where it is most likely to be acted on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only status tool with no output schema, the description adequately covers both what it returns and when to invoke it. It could be slightly richer on the exact shape of the returned status, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a parameterless tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Shows') and enumerates exactly what the tool surfaces: the signed-in account, the server, pinned projects, and the search engine. That enumeration makes it clearly distinct from sign_in and list_projects, though it does not name a sibling to contrast against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call this first if other tools report sign-in problems' gives an explicit triggering condition for using this diagnostic tool. It does not, however, mention the alternative (sign_in) or state when not to bother calling it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_fileUpload a local fileA
Destructive

Uploads a file from this computer (e.g. a generated figure or .bib) into a project, replacing any file with the same path.

NameRequiredDescriptionDefault
pathNoDestination path in the project (default: the file name in the root folder)
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
localPathYesAbsolute path of the file on this computer

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true, and the description reinforces this by naming exactly what gets destroyed: any file with the same path is replaced. That concrete overwrite disclosure is real added value beyond the annotation flag, though nothing is said about permissions or whether missing parent folders are created.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the core action and folds in examples and the overwrite behavior without any wasted clauses. Nothing could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers direction (local to project), destination behavior, and the destructive overwrite. Gaps remain around failure cases (nonexistent path, folder creation) and auth, but for a three-parameter tool with a fully documented schema it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (path, project, localPath) are already documented with defaults and pinning behavior. The description adds only the vague notion of a matching 'path' and a project target, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Uploads a file from this computer into a project') and clarifies the source is the local machine, which distinguishes it from write_file and download_file. It stops short of naming a sibling explicitly, so an agent must infer the contrast from the local-vs-project framing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples ('a generated figure or .bib') imply the intended scenario of pushing locally-produced artifacts into a project, but there is no explicit when-to-use vs write_file/download_file guidance and no stated prerequisites. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileCreate or overwrite a fileA
Destructive

Writes the full content of a text file, creating it (and missing folders) if needed. Existing docs are updated in place via a minimal live diff, so collaborators keep their cursors. Prefer edit_file for small changes.

NameRequiredDescriptionDefault
pathYes
contentYes
projectNoProject name, id or Overleaf URL. May be omitted when exactly one project is pinned.
suggestNoRecord changes to an existing doc as tracked changes
overwriteNoSet false to refuse replacing an existing file (default true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description adds genuine behavioral context beyond that: missing folders are auto-created, overwrites use a 'minimal live diff' preserving collaborator cursors, and the schema documents overwrite defaulting to true. It doesn't state permission/auth requirements or what happens if a co-editor changes the file during the write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and scope, then the routing hint. Every clause carries information the agent needs; no restatement of the title or boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers creation, overwrite behavior, and the edit_file routing decision, and annotations carry the safety hints. Remaining gaps are secondary: no return value discussion, no conflict/error behavior, no project-disambiguation guidance for the optional project param.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% (project, suggest, overwrite documented; path and content bare), so the baseline is a middling 3. The description implies 'full content' semantics for the content parameter and relates path to folder creation, but adds no format, encoding, path-resolution, or tracked-change detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Writes the full content of a text file') plus the creation scope ('creating it (and missing folders) if needed'). It names the sibling edit_file explicitly, so an agent can separate this from the small-edit tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Prefer edit_file for small changes' gives an explicit alternative with the condition that selects it, which is the key routing decision among the file tools. However it doesn't cover the other nearby alternatives such as upload_file, create_folder, or delete_file, so the coverage is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv2.1.1
    • First observedcompile
    • First observedcreate_folder
    • First observedcreate_project
    • First observeddelete_file
    • First observeddownload_file
    • First observededit_file
    • First observedget_outline
    • First observedget_section
    • First observedgrep
    • First observedhistory
    • First observedhistory_diff
    • First observedlist_files
    • First observedlist_projects
    • First observedmove_file
    • First observedpin_projects
    • First observedread_file
    • First observedsearch
    • First observedsign_in
    • First observedstatus
    • First observedupload_file
    • First observedwrite_file

TDQS

A3.6/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have clearly distinct purposes, including separate file, project, search, compile, and history operations. A few pairs such as grep/search and read_file/get_section require reading descriptions to distinguish, but their boundaries are explicitly clarified.

Naming Consistency4/5

The set predominantly uses consistent snake_case verb_noun names like list_projects, create_project, read_file, and edit_file. A few bare nouns or verbs such as status, search, compile, and history deviate slightly but remain readable and expected.

Tool Count4/5

At 21 tools, the server is somewhat heavy, but the breadth matches Overleaf's project/file/search/compile/history surface. Each tool covers a distinct operation, so the count is reasonable though on the larger side.

Completeness4/5

Core workflows are well covered: authentication, projects, files, editing, search, compilation, uploads/downloads, and history. Minor gaps exist at the project lifecycle level, such as no delete/rename project or restore history version, but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers