olcli

io.github.aloth由 GitHub 帳號 aloth 發布v0.16.1更新於 Nov 7, 2026

Overleaf projects from an MCP client: files, compile and PDF, diff, comments and tracked changes

概覽

AI 產生的概覽

讓助理操作 Overleaf 上的 LaTeX 專案:拉取與推送檔案、比對差異、編譯成 PDF,並管理留言與追蹤修訂。

可以做什麼
  • 列出、檢視、建立與重新命名 Overleaf 專案,包括依樣式批次重新命名
  • 拉取、推送與同步專案檔案,上傳、下載、重新命名、移動或刪除檔案,並將專案下載為 zip
  • 將本機檔案與線上專案比對差異,在 Overleaf 上編譯並下載 PDF 或 bbl、log 等編譯產物
  • 列出、新增、回覆、解決、重新開啟與刪除審閱留言串
  • 列出追蹤修訂並接受或拒絕
適用情境
適合在本機編輯器或透過助理撰寫 LaTeX、而論文放在 Overleaf 且共同作者仍在瀏覽器中編輯的情況。也適合需要同步、產生 PDF、推送前比對差異,或不必離開對話就能回覆審閱意見的論文與學位論文流程。
執行需求
以 stdio 在本機執行,通常透過 npx 啟動,需要 Node.js 20.18.1 或更新版本。需要 Overleaf 帳號與工作階段 cookie:可由 olcli auth 指令儲存,或以環境變數 OVERLEAF_SESSION 提供。自架執行個體需設定 OVERLEAF_BASE_URL,可選用 OVERLEAF_COOKIE_NAME。需要能連線至 Overleaf 的網路,並支援代理變數。
安裝前請注意
工作階段 cookie 等同完整帳號憑證,CLI 會以明文儲存,應將 OVERLEAF_SESSION 視為機密。會變更專案的工具(推送、刪除、重新命名、留言、接受或拒絕追蹤修訂、建立專案)會寫入共用的 Overleaf 資料,設計上會先要求確認,但不支援確認的用戶端可能不會。同步時本機刪除的檔案也會在 Overleaf 上被刪除。追蹤修訂僅適用於付費專案。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 olcli,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

olcli: Overleaf CLI

Work on Overleaf projects from your terminal while your coauthors keep using the Overleaf web editor. Pull, push, sync, diff and compile LaTeX projects; read and answer review comments; use Overleaf as a git remote; give AI agents an MCP server that asks you before it writes.

[CI] [npm version] [npm downloads] [License: MIT]

[DOI] [Glama MCP server] [AgentSkills]

  • Coauthors change nothing. They keep editing, commenting and compiling in the browser; you work in Vim, VS Code, Emacs or an agent and sync with the same project.
  • Works on the free Overleaf plan. Pull, push, sync, diff, latexdiff, compile, PDF and output downloads, file operations, zip, comment listing and the git remote helper were checked on a free overleaf.com account. Tracked changes are the exception: Overleaf itself only offers them in premium projects.
  • Works on self-hosted Overleaf Community Edition with the same commands.
  • No git token, no paid plan. olcli signs in with your normal Overleaf session. Overleaf's own Git integration is a premium feature; olcli's git remote helper is not tied to it.
  • One package: command-line tool, git remote helper, MCP server and TypeScript library.

If olcli saves you time, please star the repository. To reference it in a paper, see Citation.

[olcli demo]

[olcli diff --latexdiff --pdf turns a local edit into a marked-up PDF]

Install

bash
brew install aloth/tap/olcli      # Homebrew (macOS, Linux)npm install -g @aloth/olcli       # npm (any platform, Node 20.18.1 or newer)

On Linux with Nix: nix run github:aloth/olcli -- --help. Without installing: npx @aloth/olcli list. For AI agents through AgentSkills: npx skills add aloth/olcli.

Quick start

bash
olcli auth --browser          # sign in through a browser windowolcli list                    # your projectsolcli pull "My Thesis"        # download into ./My_Thesiscd My_Thesisvim main.texolcli diff                    # what would change on Overleafolcli push                    # upload your editsolcli pdf                     # compile on Overleaf and download the PDF

olcli auth --browser opens the login page in Chrome, Edge, Chromium or Brave with a new temporary profile (never your own), waits until you have signed in, and keeps only the session cookie. It works with SSO, Google, ORCID and two-factor logins, and olcli never sees your password. It needs Node 22 or newer; set OLCLI_BROWSER when your browser is not found.

Sign in with a session cookie

No supported browser, or a server without a display? Paste the cookie instead:

bash
olcli auth --cookie           # prompts, input stays hiddenpbpaste | olcli auth --cookie -   # or read it from stdinolcli auth status             # instance, account, where the credential comes from

Get your session cookie: sign in to Overleaf in a browser, open the developer tools (F12), then Application (Chrome, Edge) or Storage (Firefox), Cookies, and copy the value of overleaf_session2 (overleaf.sid on most self-hosted instances). A value on the command line also works but lands in your shell history.

Self-hosted instances without reCAPTCHA also accept olcli auth --email [email protected], which prompts for the password. Scripts can set OVERLEAF_SESSION, or OVERLEAF_EMAIL and OVERLEAF_PASSWORD, and skip olcli auth entirely.

Self-hosted Overleaf

bash
olcli config set-url https://latex.example.orgolcli config set-cookie-name overleaf.sidolcli auth --browser

Or per command: olcli --base-url https://latex.example.org list. The MCP server and the git remote helper read OVERLEAF_BASE_URL and OVERLEAF_COOKIE_NAME.

Features

  • Pull, push, sync with nested folders, local deletions propagated on sync, and LaTeX build artifacts ignored (ignore rules)
  • Diff local files against the live project before you push, with --exit-code for CI (docs/DIFF.md)
  • Marked-up revisions: olcli diff --latexdiff --pdf builds the struck-through and underlined PDF advisors and journals ask for, compiled on Overleaf, no local TeX needed (needs latexdiff on PATH)
  • Compile and download the PDF, a single root document (-r appendix.tex), or compile outputs such as .bbl for arXiv
  • Files: upload, download, delete, rename and move by path; download the project as a zip
  • Review comments: list, add, reply, resolve, reopen and delete comment threads
  • Tracked changes: list suggested insertions and deletions, accept or reject them. Track changes is an Overleaf premium feature: it is only available in projects whose owner has a premium plan, and invited collaborators on any plan can then use it. In other projects there are no tracked changes to list
  • Projects: create, rename, and bulk-rename by pattern (dry run unless --apply)
  • Git remote: git clone overleaf::https://www.overleaf.com/project/<id> (docs/GIT-REMOTE.md)
  • MCP server for AI agents; every tool that writes asks you first (docs/MCP.md)
  • Forgiving project names: case-insensitive, unique prefixes, "Did you mean" suggestions
  • Scriptable: --json on listings, plain output when piped, NO_COLOR, exit codes that mean something

Use with Claude Code, Codex and Cursor

olcli ships an MCP server, olcli-mcp. Add it to .mcp.json (Claude Code), .cursor/mcp.json (Cursor) or your client's MCP settings:

json
{  "mcpServers": {    "overleaf": {      "command": "npx",      "args": ["-y", "--package", "@aloth/olcli", "olcli-mcp"]    }  }}

Codex uses TOML in ~/.codex/config.toml (or .codex/config.toml in a trusted project):

toml
[mcp_servers.overleaf]command = "npx"args = ["-y", "--package", "@aloth/olcli", "olcli-mcp"]

The server uses the session stored by olcli auth; set OVERLEAF_SESSION in env instead if you prefer. Every tool that changes a project (push a file, delete, rename, comment, accept or reject tracked changes, create a project) shows you what it will do and writes only after you confirm it in the client. The server tells the agent that project content, such as comments and document text, is data and not instructions. Details, the full tool list and clients without confirmation support: docs/MCP.md.

Commands

Inside a pulled directory (it contains .olcli.json), the project argument can be left out. olcli <command> --help shows every option with examples.

CommandDescription
olcli authSign in: --browser, --cookie, or --email
olcli auth statusInstance, account, credential source; exits 1 when not signed in
olcli logoutClear stored credentials
olcli listList projects (--json, -n)
olcli info [project]Project details and file list
olcli project create <name>Create a blank or example project (--template)
olcli project rename <new> [project]Rename the project itself
olcli project rename-bulkRename many projects by pattern (dry run unless --apply)
olcli pull [project] [dir]Download project files
olcli push [dir]Upload local changes (--dry-run, --all, --delete)
olcli sync [dir]Pull then push, propagating local deletions (--no-delete, --dry-run)
olcli diff [project] [dir]Content diff against the live project (--name-only, --exit-code, --latexdiff, --pdf)
olcli upload <file> [project]Upload one file (--to <path>)
olcli download <file> [project]Download one file (-o)
olcli delete <file> [project]Delete a file or folder (alias rm)
olcli rename <old> <new> [project]Rename or move a file or folder (alias mv)
olcli zip [project]Download the project as a zip archive
olcli compile [project]Compile on Overleaf (-r <root.tex>)
olcli pdf [project]Compile and download the PDF (-o, -r)
olcli output [type]Download compile outputs such as bbl or log (--list)
olcli comments list [project]List comments (--status, --context, --changes, --json)
olcli comments add <file> <message>Comment on selected text
olcli comments reply <id> <body>Reply to a thread
olcli comments resolve <id>Resolve a thread (reopen and delete too)
olcli changes accept <ids...>Accept tracked changes (premium projects)
olcli changes reject <ids...>Reject tracked changes; preview unless --yes
olcli config set-url <url>Set the instance URL (get-url, set-cookie-name, set-timeout)
olcli ignored [dir]Show the ignore patterns in effect

Global options: --base-url <url>, --cookie-name <name>, --timeout <ms>, --verbose (print every HTTP request), --no-color.

How sync works

  • pull downloads every file and skips local files changed since the last pull; --force overwrites them.
  • push uploads files changed since the last pull and keeps the folder structure. push --dry-run lists them; olcli diff shows what actually differs.
  • sync pulls, then pushes. Local edits win when they are newer, and a file you deleted locally is deleted on Overleaf (--no-delete to opt out; sync --dry-run --verbose to preview).
  • Before a push, olcli diff compares against the project as it is on Overleaf right now, so you see a coauthor's newer edit before you overwrite it.

Examples

bash
# Daily thesis workflowolcli pull "PhD Thesis" thesis && cd thesisolcli sync && olcli pdf -o draft.pdf
# Marked-up PDF of your local revision for your advisorolcli diff --latexdiff --pdf
# Fail a CI job when the paper on Overleaf drifted from the repositoryolcli diff --exit-code --name-only
# Review comments, with two lines of contextolcli comments list --status open --context 2
# arXiv submission prepolcli output bbl -o main.bblolcli zip -o arxiv-submission.zip
# Back up every projectfor proj in $(olcli list --json | jq -r '.[].name'); do  olcli zip "$proj" -o "backups/${proj}.zip"done

Proxy

olcli honors HTTPS_PROXY, HTTP_PROXY, ALL_PROXY and NO_PROXY (lower-case names take precedence) for every request. https:// instances are reached through a CONNECT tunnel, so the proxy never sees the session cookie. localhost and loopback addresses are always reached directly. --verbose names the proxy used for each request.

bash
HTTPS_PROXY=http://proxy.example.org:3128 olcli list

Configuration and credentials

Credentials are read in this order: OVERLEAF_SESSION, then .olauth in the current directory (written by olcli auth --save-local), then the global config. olcli auth status shows which one is used and where it lives. The session cookie is stored in plaintext; a password only when you pass --save-password. olcli logout clears the global config and .olauth.

Every environment variable, the timeout setting and the ignore rules (.olignore, .olignore.local) are described in docs/CONFIGURATION.md. olcli --help lists the variables too.

Library

ts
import { OverleafClient } from '@aloth/olcli';
const client = await OverleafClient.fromSessionCookie(cookie);const projects = await client.listProjects();const pdf = await client.downloadPdf(projects[0].id);

All exports: docs/LIBRARY.md.

Troubleshooting

  • "Session expired or invalid. Run: olcli auth": sessions expire; sign in again. olcli auth status tells you which credential was used.
  • Timeouts on large projects: olcli config set-timeout 60000, or --timeout 60000 once.
  • Compilation fails: the Overleaf web editor shows the full log; olcli output log downloads it.
  • Anything else: run the command with --verbose and include the output (without the cookie) in an issue.

Documentation

Contributing

Contributions are welcome. See CONTRIBUTING.md for local setup, which tests need a real Overleaf account, and what CI checks on a pull request.

Citation

If you use olcli in your research, please cite it. GitHub's "Cite this repository" button in the sidebar gives the reference in APA and BibTeX, from CITATION.cff. The DOI 10.5281/zenodo.23896243 always resolves to the latest version.

bibtex
@software{loth_olcli,    author = {Loth, Alexander},    title  = {{olcli}: Command-line interface for Overleaf},    doi    = {10.5281/zenodo.23896243},    url    = {https://github.com/aloth/olcli}}

License

MIT © Alexander Loth

來源:README.md,提交 8639a3a

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

3
  1. v0.16.1最新Nov 7, 2026
  2. v0.15.3Nov 3, 2026
  3. v0.15.2Oct 26, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分