overleaf-mcp
Allows AI assistants to read, edit, and compile LaTeX projects on Overleaf, providing tools to list projects, pull/download, push/upload files, compile, download PDF, and delete files using Overleaf's web endpoints and session cookie authentication.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@overleaf-mcpList my projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 syncGet your session cookie
Log into overleaf.com in your browser.
Open devtools → Application (Chrome) or Storage (Firefox) → Cookies →
https://www.overleaf.com.Copy the value of
overleaf_session2(andGCLBif present).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
Cookierequest 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-mcpClaude 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 |
| Check whether | ✅ verified live |
| List your projects (id, name, owner, last updated) | ✅ verified live |
| Download a project and extract it into a local directory | ✅ verified live |
| Trigger a compile, return status and error log | ✅ verified live |
| Compile and download the resulting PDF | ✅ verified live |
| Upload/overwrite a single file, creating remote folders as needed | ✅ verified live |
| Diff a local directory against the project and push changed files | ✅ verified live (calls push_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 fromGET /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
joinProjectSocket.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}/compilewith 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 toolsoverleaf_compileA
Trigger a compile and return its status (and the error log on failure).
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Overleaf project id (24-char hex) or exact project name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Overleaf project id (24-char hex) or exact project name | |
| remote_path | Yes | Path within the project to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Overleaf project id (24-char hex) or exact project name | |
| dest_path | Yes | Local file path to save the compiled PDF to |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| include_trashed | No | Include trashed projects | |
| include_archived | No | Include archived projects |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Overleaf project id (24-char hex) or exact project name | |
| dest_dir | Yes | Local directory to extract the project into |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, only report which files would change | |
| project | Yes | Overleaf project id (24-char hex) or exact project name | |
| local_dir | Yes | Local directory to sync into the project |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Overleaf project id (24-char hex) or exact project name | |
| local_path | Yes | Local file to upload | |
| remote_path | No | Path within the Overleaf project, e.g. 'sections/intro.tex'. Defaults to the local file's name, placed at the project root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Edit your Overleaf LaTeX projects from Claude and ChatGPT; every change is a real Git commit.
Persistent AI LaTeX workspace: edit and compile multi-file projects, export publication-ready PDFs.
Overleaf alternative online LaTeX editor. AI agents edit, comment, and chat. Keep or revert edits.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables Claude and AI agents to read and edit Overleaf documents in real time, with support for project listing, document manipulation, LaTeX compilation, and live collaboration.9814MIT
- FlicenseBqualityCmaintenanceEnables AI agents to interact with Overleaf projects directly, including creating projects, managing files, and editing documents in real-time using Overleaf's native Operational Transformation protocol.10
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to read, edit, and compile LaTeX documents in Overleaf projects with tracked changes via the Model Context Protocol.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to read, write, and compile LaTeX projects locally, view PDF pages as images, and manage project files, with live updates reflected in a web-based editor.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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