overleaf-connect
Provides tools for managing Overleaf projects and files, including creating and duplicating projects, listing/reading/writing/editing .tex files, compiling projects, downloading the resulting PDF, and trashing projects.
Click on "Deploy 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-connectCompile my latest Overleaf project and download the PDF."
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-connect
An MCP server to have agents use Overleaf for free.
Once it's connected, an agent can:
create or duplicate projects
list, read, write, and edit
.texfilescompile a project and pull the PDF back locally
Installation
If you dont have uv installed, install it.
It needs your Overleaf session cookie to do anything, so grab that first:
Sign in at overleaf.com.
Open DevTools -> Network, reload the project list, click any
overleaf.comrequest, and copy the fullCookierequest header.
Copy over this for the OVERLEAF_SESSION environment variable in the MCP server.
Claude Code
claude mcp add overleaf -e OVERLEAF_SESSION="overleaf_session2=s%3A...; GCLB=..." -- uvx overleaf-connectClaude Desktop
Open Settings -> Developer -> Edit Config and add an overleaf entry under mcpServers (keep any servers you already have):
{
"mcpServers": {
"overleaf": {
"command": "uvx",
"args": ["overleaf-connect"],
"env": {
"OVERLEAF_SESSION": "overleaf_session2=s%3A...; GCLB=..."
}
}
}
}Afterwards, restart Claude Desktop to reload the MCP servers and get Overleaf connected.
Related MCP server: Unofficial Overleaf MCP Server
Authentication
Overleaf issues a fresh cookie on every request. After the first success the server saves the rotating value to:
Windows:
%LOCALAPPDATA%\overleaf-connect\session.jsonmacOS / Linux:
~/.overleaf-connect/session.json
The OVERLEAF_SESSION environment variable is treated as a seed - the server will automatically refresh the session whenever requests are done to Overleaf, and store it. You only need to change it in the future if the cookie has expired from not using it.
Optional environment variables
OVERLEAF_SESSION_FILE=... # where the rotating session cookie is cached
OVERLEAF_CACHE_DIR=... # compiled-PDF cache
OVERLEAF_OUTPUT_DIR=... # allowed download_pdf destination root
# (default: ~/Downloads/overleaf-connect, or
# ~/Documents/overleaf-connect, else ~/overleaf-connect)Tools
Tool | What it does |
| check if session cookie works |
| id, name, owner email, last updated |
| blank project |
| clone an existing project |
| paths in a project |
| text contents of a file ( |
| whole-file create/replace |
| exact old/new string replace in a file |
| Overleaf compile -> cached |
| compile and copy the PDF under |
| move a project to Overleaf trash |
Writes replace the whole file, so write_file refuses to write back a file that
was only read in part - read it again with full=true, or use edit_file.
Don't edit a file while someone is typing in it in the browser.
Available Tools
11 toolscompile_projectAIdempotent
Compile the project on Overleaf and save output.pdf locally.
Returns status, local pdf_path on success, and parsed LaTeX errors.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond those by stating that compilation saves a local artifact and returns status, pdf_path, and parsed LaTeX errors. No contradictions with annotations.
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 only two sentences with the primary action front-loaded and no filler. It states what happens, where the artifact lands, and what is returned, all efficiently.
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 single-parameter tool with full schema coverage, relevant annotations, and an output schema, the description is complete. It covers the action, target, local side effect, and return values without needing to re-explain structured schema details.
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 coverage is 100% and the single 'project' parameter is already documented as 'Project id (24-char hex) or exact name'. The description adds no additional parameter-specific semantics, 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 clearly states the specific action ('Compile'), the target resource ('the project on Overleaf'), and the concrete outcome ('save output.pdf locally'). This distinguishes it well from sibling tools like download_pdf, which presumably retrieves a PDF rather than compiling a project.
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 makes it clear the tool is for compiling a project and getting a local PDF, which is sufficient context for an agent. However, it does not explicitly contrast with download_pdf or mention when to avoid using this tool, so it stops short of full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectA
Create a new blank Overleaf project. Returns id and editor URL.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new blank project |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and non-idempotent; the description adds the concrete behavioral promise that a new project resource is created and that the response contains id and editor URL. No contradiction with the annotations, and no destructive behavior is hidden.
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 short sentences convey purpose, scope, and output with no filler. The main action is front-loaded and every word contributes.
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 one-parameter creation tool with an output schema available, the description covers the essential information: what is created, the required input, and the key return values. It could add a note about side effects or prerequisites, but the annotation set and simple shape make this largely 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 coverage is 100% because the single name parameter is described in the input schema. The tool description does not need to add much, and it does not; it simply refers to the project name, consistent with 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?
Description uses a specific verb ('Create') with a clear resource ('new blank Overleaf project') and explicitly notes the return values. It is immediately distinguishable from sibling tools like duplicate_project because of the 'blank' qualifier.
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 primary use case (creating a fresh project) but gives no explicit guidance about when to choose this over duplicate_project or whether any prerequisites apply. It does not state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_pdfADestructive
Compile the project and copy the PDF to dest.
If dest ends with .pdf it is the file path; otherwise dest is treated as a directory.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | Yes | Path relative to OVERLEAF_OUTPUT_DIR (default: a per-user Downloads/overleaf-connect folder), ending in .pdf or naming a directory for output.pdf | |
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal non-read-only and destructive behavior; the description adds useful context by revealing that compilation happens as part of the operation and explaining how dest is interpreted. This goes beyond the schema and annotations without contradicting them.
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 core action, and the second sentence resolves a key ambiguity about dest. Every sentence earns its place.
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 two simple parameters, complete schema descriptions, and available annotations, the description covers the main behavior and destination semantics. It does not explicitly mention overwrite behavior, but the destructiveHint annotation already alerts the agent to that risk.
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 parameters are already well documented. The description reinforces the dest path rule but does not add substantial semantic information beyond what the schema provides.
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 states a specific action ('Compile the project and copy the PDF to dest') and clearly identifies the resource and destination. The destination rule disambiguates file vs directory, which distinguishes it from sibling tools like compile_project or read_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 the tool is used when a compiled PDF needs to be delivered to a destination, but it does not explicitly explain when to prefer this over compile_project or other siblings. The context is understandable but no alternative comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_projectA
Duplicate an Overleaf project. Returns the new id and editor URL.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the copied project | |
| project | Yes | Source project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, not idempotent, and not destructive. The description adds the return information but does not disclose additional behavioral details such as whether all files are copied or whether the original remains untouched. However, destructiveHint=false helps cover the safety profile, so the description is adequate but not rich.
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 front-loads the action and includes the key outcome. There is no filler, redundancy, or unnecessary detail.
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 low complexity, full schema coverage, present annotations, and available output schema, the description covers the essential action and return values. It falls slightly short of complete because it does not provide usage guidance or explicit confirmation of behavior beyond the duplication itself.
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 both parameters are already documented with meaningful descriptions. The tool description adds no further parameter-level semantics beyond what the schema provides, so the baseline score 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 a specific action ('Duplicate') applied to a specific resource ('an Overleaf project') and names the result ('the new id and editor URL'). This distinguishes it from sibling tools like create_project by implying duplication of an existing project.
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 explicit guidance on when to use this tool versus alternatives such as create_project. The intended usage is inferable from the name and description, but there are no stated conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_fileADestructive
Replace an exact substring in a project file and upload the result.
Fails if old is missing, or if it appears more than once and replace_all is false. Prefer this over write_file for a paragraph or sentence change.
| Name | Required | Description | Default |
|---|---|---|---|
| new | Yes | Replacement text | |
| old | Yes | Exact text to find (must match once unless replace_all) | |
| path | Yes | Path inside the project, e.g. main.tex | |
| force | No | Overwrite even if the file changed since the last read | |
| project | Yes | Project id (24-char hex) or exact name | |
| replace_all | No | Replace every occurrence if old appears more than once |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive and non-idempotent behavior, so the bar is lower. The description adds useful behavioral detail by stating exact-match failure modes and the 'upload the result' side effect, though it does not elaborate on the force-overwrite implications beyond the schema.
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?
Three sentences cover the core operation, edge-case failures, and sibling-tool guidance with no filler. Information is front-loaded and every sentence earns its place.
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?
With a rich schema, an output schema, and annotations, the description covers the remaining decision-relevant context: when to use this tool and how it behaves when matches are missing or ambiguous. Nothing critical is missing for an agent to call it correctly.
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 coverage is 100%, so the schema already documents all six parameters. The description reinforces the meaning of old/new and replace_all but adds little beyond the schema, which is acceptable given the baseline.
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?
Describes a specific operation: replacing an exact substring in a project file and uploading the result. The wording is concrete and the explicit comparison with write_file distinguishes it from its closest sibling.
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?
Explicitly instructs agents to prefer edit_file over write_file for paragraph or sentence changes, giving a clear decision rule. It also spells out failure conditions and when replace_all is necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesARead-only
List file and folder paths in an Overleaf project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, so the description does not need to restate that. The description adds that the tool returns paths and includes both files and folders, but it does not disclose behavioral details such as open-world completeness limitations.
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 sentence with no filler. It front-loads the core action and object, making it immediately scannable while earning its place.
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 read-only tool with one required parameter, full schema coverage, and an output schema, the description is sufficient for correct invocation. It does not explicitly address the openWorldHint caveat, but the annotation already signals that.
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 coverage is 100%, with the single 'project' parameter fully documented as a project id or exact name. The description merely restates the project context and does not add parameter-level detail beyond 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 uses a specific verb ('List') and resource ('file and folder paths in an Overleaf project'), making its function immediately clear. It also distinguishes itself from siblings like list_projects (lists projects) and read_file (reads file content).
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 a clear context for use—listing paths within an Overleaf project—but provides no explicit guidance about when to use this tool versus alternatives or when not to use it. Sibling routing is left to inference 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_projectsARead-only
List Overleaf projects (id, name, owner email, last updated).
| Name | Required | Description | Default |
|---|---|---|---|
| include_trashed | No | Include trashed projects | |
| include_archived | No | Include archived projects |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already establish that this is a read-only, open-world operation. The description adds the specific return fields, which is useful, but it does not disclose behavior such as default filtering, pagination, or ordering. With annotations present, this is adequate but not enriched.
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 sentence with no filler, front-loads the core verb and resource, and provides just enough detail about the returned fields in a compact parenthetical.
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 read-only listing tool with an output schema, two optional parameters with defaults and full schema descriptions, and annotations covering safety, the description is largely complete. It could add explicit default-filter behavior, but the schema and annotations already cover most operational context.
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 include_trashed and include_archived parameters are fully documented in the input schema. The description adds no parameter-specific meaning, which is acceptable given the high schema coverage baseline.
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 the specific verb 'List' with a clear resource, 'Overleaf projects,' and enumerates the returned fields (id, name, owner email, last updated). This cleanly distinguishes it from sibling file-focused tools like list_files and from mutating project tools.
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 usage is implied: call this when you need a list of Overleaf projects. However, there is no explicit guidance about when not to use it or which alternative to choose, though the resource name and read-only verb make the intended context reasonably obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileARead-only
Read a text file from an Overleaf project.
Files over 100000 characters are truncated unless full=True, and the response sets truncated=true. write_file refuses to replace a file that was only read in part, because the unseen tail would be lost.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the whole file instead of the first 100000 characters. Needed before write_file can replace a large file; prefer edit_file for a targeted change. | |
| path | Yes | Path inside the project, e.g. main.tex | |
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is complemented by concrete behavioral detail: the 100000-character truncation threshold, the truncated flag in the response, and the interaction with write_file when a file was only partially read. This goes well beyond the annotation.
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, with only three purposeful sentences. Every sentence adds useful information: what the tool does, its truncation behavior, and a critical safety interaction with write_file.
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 definition is complete for a read operation: it identifies the resource, covers truncation and full-file reading, explains consequences of partial reads, and an output schema exists so return values need not be described in prose.
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 main description repeats the full parameter's truncation behavior rather than adding substantial new param semantics beyond the schema, though it does usefully tie full=True to the write_file safeguard.
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 opens with a specific verb and resource: 'Read a text file from an Overleaf project.' It clearly distinguishes this tool from siblings like list_files and write_file, and the truncation/write_file behavior reinforces its role as a read 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 explicitly explains when full=True is necessary and warns that write_file will refuse to replace a partially-read file. The schema adds 'prefer edit_file for a targeted change,' giving clear guidance on choosing between read_file and edit_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusARead-only
Check whether OVERLEAF_SESSION is set and still a valid Overleaf login.
| 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?
The annotations already declare readOnlyHint=true and openWorldHint=true, which cover the safety profile. The description adds meaningful context by specifying that the tool verifies both the presence of OVERLEAF_SESSION and its validity as an Overleaf login, going beyond what the annotations alone communicate.
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?
A single, direct sentence that immediately states the tool's purpose. No filler or redundant content, and the core check is front-loaded.
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 zero-parameter status tool with readOnlyHint=true, openWorldHint=true, and an output schema available, the description fully covers what the tool does. There are no missing preconditions or parameters to explain, so the agent has what it needs to invoke it correctly.
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 has zero parameters, so the schema requires no parameter documentation. The description correctly focuses on the operation itself; with no parameters, the baseline of 4 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 ('Check whether') and a clear resource ('OVERLEAF_SESSION' and 'valid Overleaf login'). It clearly differentiates this tool from the project/file/compile siblings since it is the only auth/status check.
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 intended use is implied as a preflight authentication check before interacting with Overleaf, but the description does not explicitly say when to use it versus alternatives or when it should be run. There is no exclusion or mention of prerequisites, leaving the agent to infer the usage context from the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_projectADestructive
Move an Overleaf project to trash. Recoverable from the Overleaf dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, so the description does not need to repeat that signal. It adds valuable context beyond annotations by disclosing that the action is recoverable from the Overleaf dashboard, which softens the destructive implication. It does not detail collaborator impact, but that is not essential given the annotation coverage.
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 short sentences with no filler; the core action is front-loaded. The recoverability clause earns its place by adding decision-relevant behavioral 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 one-parameter destructive action with a full input schema and annotations, this captures the essential behavior and the recovery path. The main omission is explicit guidance on prerequisites or when not to use this tool relative to siblings, but the output schema and annotations cover most remaining context.
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 coverage is 100%, and the parameter description already defines the accepted identifier format: 24-char hex or exact name. The tool description adds no parameter-specific meaning, so the baseline score of 3 is appropriate because the schema carries the semantic load.
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?
States a specific verb ('move to trash') and a specific resource ('Overleaf project'), so an agent immediately knows the action and target. The recoverability note adds useful semantic distinction from a permanent delete. It is clearly differentiated from sibling tools like list_projects, create_project, or duplicate_project.
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 this is the tool for removing/unwanted projects, but it does not explicitly say when to use it versus alternatives or mention prerequisites such as ownership or edit rights. No exclusions are given, so the agent must infer the intended usage context from the tool name and action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileADestructive
Create or replace a text file. Missing folders are created.
Refuses to overwrite a file that changed since the last read_file, or that was only read in part, unless force=True.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path inside the project, e.g. sections/intro.tex | |
| force | No | Overwrite even if the file changed since the last read | |
| content | Yes | Full new file contents (whole-file replace) | |
| project | Yes | Project id (24-char hex) or exact name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is a destructive tool (destructiveHint=true), and the description goes beyond annotations by explaining exactly when it refuses to overwrite and how force bypasses that protection. It also discloses folder auto-creation, which is meaningful behavioral context not present in annotations.
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 two sentences, front-loaded with the core action, and every sentence adds useful information. There is no filler or repetition of schema content.
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?
With an output schema present, fully documented parameters, and annotations describing the destructive nature, the description supplies the remaining critical context: overwrite safety, the force escape hatch, and folder creation. Nothing essential for calling the tool correctly is missing.
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 schema already documents all four parameters clearly. The tool description adds no parameter-level detail 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 states a specific action ('Create or replace a text file') with a clear resource, and the 'whole-file replace' semantics in the schema distinguish it from the sibling edit_file. Missing-folder creation is also noted, making the tool's scope 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 makes it clear this is the tool for creating or fully replacing a file, and the safety rule implies when force is needed. However, it does not explicitly tell the agent when to prefer edit_file for partial modifications, so usage guidance is implied rather than stated.
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.
11 tool updates
v0.1.0- First observed
compile_project - First observed
create_project - First observed
download_pdf - First observed
duplicate_project - First observed
edit_file - First observed
list_files - First observed
list_projects - First observed
read_file - First observed
status - First observed
trash_project - First observed
write_file
TDQS
Scored across 11 tools
Most tools are clearly distinct, but compile_project and download_pdf both trigger a compile and produce a PDF, differing mainly in the output destination. This overlap could cause occasional confusion.
The naming pattern is largely consistent with snake_case verb_noun (list_projects, create_project, read_file, download_pdf), except 'status' stands out as a noun-only command. Overall the convention is clear and predictable.
With 11 tools, the surface is well-scoped for an Overleaf integration covering projects, files, compilation, and PDF download. It is neither too sparse nor overloaded.
Core workflows are covered: project listing/creation/duplication/trash, file read/write/edit, and compile/download. Minor gaps exist such as project renaming, file deletion, or folder management, but these are not essential for typical use.
Maintenance
Related MCP Connectors
Edit your Overleaf LaTeX projects from Claude and ChatGPT; every change is a real Git commit.
A hosted LaTeX editor your assistant can actually use. Search 1,019 free templates, create and edit projects, and compile them to PDF on a real TeX Live farm, getting back the PDF or the compile log when a build fails. Thirteen tools behind OAuth 2.1, with nothing to install and nothing to run locally.
Overleaf alternative online LaTeX editor. AI agents edit, comment, and chat. Keep or revert edits.
Persistent AI LaTeX workspace: edit and compile multi-file projects, export publication-ready PDFs.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.61 npm21MIT
- 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-
- AlicenseAqualityCmaintenanceEnables AI assistants to read, edit, and compile LaTeX projects on Overleaf using session cookie authentication, bypassing the need for a paid plan.8MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to read, edit, and compile Overleaf LaTeX projects via the Overleaf web API using a browser session cookie.-