Skip to main content
Glama

overleaf-mcp

An MCP server for Overleaf that lets AI assistants (Claude, Cursor, etc.) read, edit, and compile your LaTeX projects directly — no more copy-pasting between the editor and your terminal.

No paid plan required. Overleaf's official Git integration is locked behind a paid subscription. This project instead authenticates the same way your browser does — with a session cookie — and drives the same HTTP and realtime endpoints the Overleaf web app itself uses. It works on the free plan.

⚠️ Before you use this

  • This talks to undocumented, unofficial endpoints, including Overleaf's legacy Socket.IO realtime channel (used to resolve folder ids for uploads/deletes). It can break without notice if Overleaf changes its backend.

  • Your session cookie is as powerful as your password for the duration of the session. Treat it like a secret: it's read from an environment variable and never leaves your machine, but don't paste it anywhere else.

  • This is not affiliated with or endorsed by Overleaf/Writefull. Use it at your own risk and in line with Overleaf's Terms of Service.

Related MCP server: Unofficial Overleaf MCP Server

Install

git clone https://github.com/NiccoloSalvini/overleaf-mcp
cd overleaf-mcp
uv sync
  1. Log into overleaf.com in your browser.

  2. Open devtools → Application (Chrome) or Storage (Firefox) → Cookies → https://www.overleaf.com.

  3. Copy the value of overleaf_session2 (and GCLB if present).

  4. Build a Cookie: header string:

    overleaf_session2=<value>; GCLB=<value>

    Easiest way in Chrome: open the Network tab, reload the dashboard, click any request to overleaf.com, and copy the full Cookie request header from Headers → Request Headers.

The cookie expires (Overleaf sessions typically last a few weeks). When tools start failing with an authentication error, repeat these steps and update the environment variable.

Configure

Set the cookie as an environment variable:

export OVERLEAF_COOKIE="overleaf_session2=...; GCLB=..."

Claude Code

claude mcp add overleaf --env OVERLEAF_COOKIE="overleaf_session2=...; GCLB=..." -- uv --directory /path/to/overleaf-mcp run overleaf-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "overleaf": {
      "command": "uv",
      "args": ["--directory", "/path/to/overleaf-mcp", "run", "overleaf-mcp"],
      "env": {
        "OVERLEAF_COOKIE": "overleaf_session2=...; GCLB=..."
      }
    }
  }
}

Tools

Tool

Description

Status

overleaf_whoami

Check whether OVERLEAF_COOKIE is set and still valid

✅ verified live

overleaf_list_projects

List your projects (id, name, owner, last updated)

✅ verified live

overleaf_pull

Download a project and extract it into a local directory

✅ verified live

overleaf_compile

Trigger a compile, return status and error log

✅ verified live

overleaf_download_pdf

Compile and download the resulting PDF

✅ verified live

overleaf_push_file

Upload/overwrite a single file, creating remote folders as needed

✅ verified live

overleaf_push_dir

Diff a local directory against the project and push changed files

✅ verified live (calls push_file)

overleaf_delete_file

Delete a file from a project

✅ verified live

Every tool that takes a project argument accepts either the 24-character project id or the exact project name.

All eight tools were live-tested 2026-07-19 against a real account, including create/upload/verify/delete round trips on disposable test projects. overleaf_list_projects/overleaf_pull needed a fix (Overleaf renamed a meta tag). overleaf_push_file needed a bigger one: black-box guessing at the upload request shape (field names, folder_id vs parent_folder_id, with/without qqtotalfilesize) consistently got 422 invalid_filename, even with a correct folder id read out of Overleaf's own React state. The actual cause, found by reading Overleaf's own source (services/web/app/src/Features/Uploads/ProjectUploadController.mjs in overleaf/overleaf, AGPL): the filename comes from a multipart form field name, not from a qqfilename query string param the way the legacy Fine Uploader-era endpoint mapping (and every third-party client that copied it, including the original version of this one) assumed. folder_id and _csrf genuinely are query params — only the filename field was wrong. Fixed in client.py.

overleaf_push_file, overleaf_push_dir, and overleaf_delete_file first join Overleaf's realtime channel to resolve folder ids (the only way to get them without the paid Git API) — expect these to take a few seconds longer, and to be the first thing that breaks if Overleaf changes its backend.

How it works

  • List / pull: the Overleaf dashboard (GET /project) embeds the project list as JSON in a <meta name="ol-prefetchedProjectsBlob"> tag, and a CSRF token in <meta name="ol-csrfToken">. Projects download as a zip from GET /project/{id}/download/zip. Both are plain HTTP + HTML parsing.

  • Push / delete: uploading or deleting a file requires the internal folder id, which Overleaf only exposes over its realtime channel (a joinProject Socket.IO event, using Overleaf's legacy pre-1.0 Socket.IO protocol). This project joins that channel, reads the returned folder tree, and then calls the same REST upload/delete endpoints the editor uses.

  • Compile: POST /project/{id}/compile with a CSRF token, same as the in-browser editor's build button.

Endpoint mapping originally traced from moritzgloeckl/overleaf-sync (MIT licensed), reimplemented here with httpx and typed models.

Development

uv sync --group dev
uv run pytest
uv run ruff check .

License

MIT — see LICENSE.

Available Tools

8 tools
overleaf_compileA

Trigger a compile and return its status (and the error log on failure).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesOverleaf project id (24-char hex) or exact project name

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a status and includes an error log on failure, which is useful. However, it does not mention side effects, authentication requirements, or whether the compile is asynchronous, leaving some behavioral gaps.

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 that conveys the action and return behavior without any unnecessary words. It is highly concise and well-structured.

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?

Given the tool's simplicity, one parameter, and presence of an output schema, the description is largely complete. It covers what triggers and what is returned. Minor details like prerequisites or potential delays are omitted, but overall it is adequate.

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?

The input schema already fully describes the single 'project' parameter (24-char hex or exact name), so schema coverage is 100%. The description adds no additional parameter semantics, matching the baseline of 3.

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?

The description clearly states the tool's action: 'Trigger a compile' and its return behavior (status and error log). This distinguishes it from sibling tools like overleaf_pull or overleaf_download_pdf, which handle different operations.

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 description implies the tool's use case (compiling an Overleaf project) but does not provide explicit guidance on when to use it vs alternatives or mention any exclusions. The name and description make the purpose obvious, but explicit guidance is absent.

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

overleaf_delete_fileB

Delete a file from an Overleaf project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesOverleaf project id (24-char hex) or exact project name
remote_pathYesPath within the project to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It states the action 'Delete' but does not mention that deletion is likely permanent, whether it requires specific permissions, or any side effects. This lack of safety context is significant for a destructive 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?

The description is a single, clear sentence with no wasted words. It is appropriately concise and front-loaded, with the action verb 'Delete' leading.

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?

Although the schema is complete and an output schema exists, the description lacks essential contextual information for a destructive tool—such as permanence, safety warnings, or when to use it relative to other tools. The tool is simple, but the absence of behavioral or usage context makes it incomplete.

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% for both parameters ('project' and 'remote_path'), so the schema fully documents parameter semantics. The description adds no additional parameter information, matching the baseline of 3.

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?

The description 'Delete a file from an Overleaf project.' uses a specific verb 'Delete' and clearly identifies the resource (file) and context (Overleaf project). It distinguishes itself from sibling tools because none of the siblings (download, compile, list, push, etc.) perform deletion.

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 provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. It is a bare statement of functionality without usage context.

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

overleaf_download_pdfB

Compile an Overleaf project and download the resulting PDF to dest_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesOverleaf project id (24-char hex) or exact project name
dest_pathYesLocal file path to save the compiled PDF to

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions compilation and download but does not disclose potential side effects such as overwriting an existing dest_path, network/compilation failures, or permission requirements. This is a significant gap for a tool that writes to the filesystem.

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 concise sentence that is front-loaded with the action and resource. Every word earns its place, with no filler or repetition.

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?

The tool is simple (2 params) and has an output schema, so return values are covered. The description tells the agent what the tool does end-to-end. However, it lacks behavioral details (e.g., failure modes, overwrite behavior) that would make it fully complete given the absence of annotations, so it does not merit a 5.

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?

The input schema already provides 100% coverage with descriptions for both parameters. The description adds context about the overall operation but does not add meaning beyond the schema, so the baseline of 3 is appropriate.

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?

The description clearly states the action ('Compile ... and download') and the resource (the resulting PDF), with a specific destination. It distinguishes itself from siblings like overleaf_compile (which only compiles) and overleaf_pull (which pulls project files), making the purpose unambiguous.

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 like overleaf_compile (if compilation only is needed) or overleaf_pull (if source files are needed). It implies usage for obtaining a PDF but does not explicitly state scenarios or exclusions.

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

overleaf_list_projectsA

List your Overleaf projects (id, name, owner, last-updated timestamp).

ParametersJSON Schema
NameRequiredDescriptionDefault
include_trashedNoInclude trashed projects
include_archivedNoInclude archived projects

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. 'List' clearly implies a read-only operation with no side effects, but the description does not disclose default filtering behavior (e.g., trashed/archived excluded by default) or any other operational nuances. This is adequate for a simple list tool.

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 that directly states the tool's purpose and output fields. Every word earns its place, with no filler or redundant 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?

For a simple listing tool, the description covers the essentials: what it lists and the key output fields. The presence of an output schema further offloads return-value details. However, it could briefly mention default filtering behavior for clarity, but this is adequately handled by the parameter 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?

The input schema has 100% coverage with clear descriptions for both parameters (include_trashed, include_archived). The description adds no further parameter details, so it does not exceed the baseline set by 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?

The description clearly states the tool's function with a specific verb ('List') and resource ('your Overleaf projects'), and even enumerates the return fields (id, name, owner, last-updated timestamp). This clearly distinguishes it from sibling tools like overleaf_download_pdf or overleaf_delete_file.

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 description implies usage for retrieving an overview of projects, but it does not explicitly state when to prefer this tool over alternatives, nor does it mention any exclusions or prerequisites. It provides enough context for a straightforward listing operation, but lacks explicit guidance.

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

overleaf_pullA

Download an Overleaf project and extract it into dest_dir (overwrites existing files).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesOverleaf project id (24-char hex) or exact project name
dest_dirYesLocal directory to extract the project into

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It explicitly discloses a critical side effect: overwriting existing files in dest_dir. This is valuable and better than a generic 'download' statement, though it omits other details like permissions or error 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?

The entire description is one sentence that leads with the action, specifies the destination, and includes an important caveat. Every word earns its place, with zero redundancy or 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 focused tool with only two well-documented parameters and an output schema, the description covers the core operation and a key destructive consequence. It is concise but leaves out explicit alternative guidance, which is minor given the simplicity of the operation.

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?

The input schema already provides 100% coverage for both parameters, including clear descriptions for 'project' and 'dest_dir'. The description adds no additional parameter-level meaning beyond what the schema states, which aligns with the baseline score of 3 for full schema coverage.

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?

The description uses a specific verb ('Download') and resource ('Overleaf project') plus a destination ('dest_dir'), clearly distinguishing this from siblings like overleaf_download_pdf (PDF only) and overleaf_push_file/push_dir (uploads). It accurately conveys the pull/extract operation.

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 description implies usage when a full project download is needed, and the overwrite warning hints at caution, but it does not explicitly state when to prefer this over siblings or mention exclusions. Clear context exists, but no direct alternatives or when-not guidance is provided.

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

overleaf_push_dirA

Push every locally-changed file under local_dir into an Overleaf project.

Diffs local files against the current remote content (byte-for-byte) and uploads only what differs or is new locally. Does not delete remote files that were removed locally — use overleaf_delete_file for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, only report which files would change
projectYesOverleaf project id (24-char hex) or exact project name
local_dirYesLocal directory to sync into the project

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It transparently discloses core behaviors: byte-for-byte diffing, uploading only changed/new files, and the absence of deletion. It does not mention overwriting behavior or the dry_run flag's effect, but the most critical behavioral traits are covered.

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 compact and front-loaded: the first sentence states the primary action, and the second elaborates on behavior and the deletion caveat. Every sentence earns its place; there is no redundancy or 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 directory sync tool, the description covers what gets uploaded, how diffs work, and what it does not do. It does not describe return values or edge cases (e.g., project not found), but the output schema existence and the clarity of core usage keep it reasonably 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 100%, and the schema already documents all three parameters with clear descriptions. The tool description adds no additional parameter-level meaning beyond what the schema provides, so the baseline score of 3 applies.

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?

The description uses a specific verb ('Push') and resource ('Overleaf project') and clarifies scope as 'every locally-changed file under local_dir'. It also distinguishes itself from sibling overleaf_push_file by emphasizing it handles a directory of files, and from overleaf_delete_file by explicitly stating what it does not do.

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?

It provides an explicit when-not scenario: 'Does not delete remote files that were removed locally — use overleaf_delete_file for that.' This names the alternative tool for a specific situation. It also implies when to use it (syncing a directory of changed files), though it does not directly compare to overleaf_push_file, the name and scope make the distinction clear.

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

overleaf_push_fileA

Upload or overwrite a single file in an Overleaf project.

Creates any missing remote folders in remote_path. Joins the realtime channel to resolve folder ids, so this is slower than overleaf_pull.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesOverleaf project id (24-char hex) or exact project name
local_pathYesLocal file to upload
remote_pathNoPath within the Overleaf project, e.g. 'sections/intro.tex'. Defaults to the local file's name, placed at the project root.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses side effects (overwrite, creating missing folders), explains the realtime channel join, and notes performance trade-offs. It omits auth requirements or error behavior, but the provided details are valuable and not contradicting any structured data.

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 primary action, and no wasted words. Every clause adds functional or behavioral context. Ideally concise.

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?

Given an output schema exists, return values need no explanation. The tool's complexity—single file upload with folder creation and performance notes—is well covered. Some edge cases (e.g., invalid paths, overwrite confirmation) are not mentioned, but they are not critical for core selection and invocation.

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 baseline is 3. The description adds minimal parameter-specific detail beyond the schema—it mentions folder creation for remote_path but does not explain parameters in depth. The schema already documents default and example, so the description neither elevates nor detracts.

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?

The description clearly states the tool's function with a specific verb ('Upload or overwrite') and resource ('a single file in an Overleaf project'). It also distinguishes from siblings by emphasizing 'single file', which contrasts with overleaf_push_dir. The mention of creating missing folders adds scope specificity.

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 description implies usage for single-file uploads, but does not explicitly state when to use this tool versus alternatives like overleaf_push_dir. The performance comparison to overleaf_pull is a behavioral note rather than clear usage guidance. No exclusions or 'when not to use' are provided.

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

overleaf_whoamiA

Check whether OVERLEAF_COOKIE is set and still a valid, logged-in session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It states the check condition but does not describe what the tool returns on success/failure, whether it has side effects, or how it behaves if the cookie is invalid. This is a minimal behavioral disclosure.

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 concise sentence that directly states the tool's purpose with no redundant wording or extraneous details.

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?

The tool is simple, with no parameters, and an output schema exists to document return values, so the description need not explain them. The description fully captures the tool's purpose, though it lacks explicit use-case context that would make it fully complete.

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 accepts no parameters, and the input schema confirms an empty object. Per rubric, zero parameters receive a baseline score of 4; the description adds no parameter details but none are needed.

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?

The description clearly states the tool's function: checking whether the OVERLEAF_COOKIE environment variable is set and represents a valid logged-in session. This distinguishes it from sibling tools that perform file operations or compilation.

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 description implies the tool is for verifying authentication status, but it does not explicitly state when to use it relative to sibling tools or provide exclusions. The context of sibling tools suggests it is a pre-flight check, but that is not spelled out.

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

TDQS

A3.7/5.0
Disambiguation4/5

Most tools serve distinct purposes, but overleaf_compile and overleaf_download_pdf both involve compilation, and overleaf_push_file / overleaf_push_dir are closely related. Descriptions clarify the differences, so ambiguity is low.

Naming Consistency4/5

All tools share the overleaf_ prefix and use lowercase snake_case, but the pattern is not perfectly uniform: some are verb_object (delete_file, list_projects) while others are just verbs (compile, pull). This is mostly consistent and predictable.

Tool Count5/5

With 8 tools, the server is well-scoped for its purpose, covering essential Overleaf operations without unnecessary redundancy. The count is appropriate for a focused integration.

Completeness3/5

Core workflows like pulling, pushing, compiling, and downloading PDFs are covered, but there is no way to create or delete projects, and no direct file listing (only via pull). These gaps may require workarounds.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NiccoloSalvini/overleaf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server