overleaf-multi-mcp
Enables Claude Code to manage Overleaf projects by auto-discovering them and reading/editing files across all projects, with a review-before-push local-workspace workflow.
README
overleaf-multi-mcp
A Model Context Protocol (MCP) server that spans every project on your Overleaf account. It auto-discovers your project list, then reads and edits files across any of them from Claude Code — with a review-before-push local-workspace flow.
Design rationale, trade-offs, and the ToS discussion live in
OVERLEAF_MCP_ARCHITECTURE.md. This README is
just setup + usage.
How it works (two auth paths)
| Concern | Mechanism | Where |
|---|---|---|
| Content I/O (read/commit/push/history) | olp_ git token over the sanctioned Git integration |
git.overleaf.com |
| Discovery (listing your projects) | overleaf_session2 session cookie → internal JSON |
overleaf.com/user/projects |
The token does all file work. The cookie is used only to list projects — never for content. See the architecture doc's §6 for the ToS caveat around the cookie call.
Prerequisites
- Node.js ≥ 18 (uses global
fetch) - The
gitbinary onPATH
Install
cd /Users/longngo/IdeaProjects/overleaf-mcp
npm install
Configure auth
All state lives in ~/.config/overleaf-mcp/ (override with OVERLEAF_CONFIG_DIR).
1. Git token (required — content)
Overleaf → Account Settings → Git Integration → generate a token (olp_…).
The same token works for every project you own.
mkdir -p ~/.config/overleaf-mcp
printf '%s' 'olp_your_token_here' > ~/.config/overleaf-mcp/token.txt
chmod 600 ~/.config/overleaf-mcp/token.txt
(Or set OVERLEAF_TOKEN in the environment.)
2. Session cookie (optional — discovery only)
Only needed for sync_projects / list_projects. In a logged-in browser:
DevTools → Application → Cookies → https://www.overleaf.com → copy the
overleaf_session2 value.
printf '%s' 'overleaf_session2=s:...' > ~/.config/overleaf-mcp/session.txt
chmod 600 ~/.config/overleaf-mcp/session.txt
The file may hold either the full overleaf_session2=s:… string or just the value.
Cookies expire (~30 days) — when sync_projects reports an expiry, refresh this file.
(Or set OVERLEAF_SESSION.) Without a cookie the server still works for any project
you reference by ID or set up as a workspace; you just can't auto-list.
Register with Claude Code
Add to your .mcp.json (kept alongside the old single-project entry during
transition, per the architecture doc):
{
"mcpServers": {
"overleaf-multi": {
"command": "node",
"args": ["/Users/longngo/IdeaProjects/overleaf-mcp/src/server.js"],
"env": {
"OVERLEAF_WORKSPACE_ROOT": "/Users/longngo/IdeaProjects/Overleaf"
}
}
}
}
Then restart Claude Code. On start the server auto-syncs the project list if a cookie is present (non-fatal if not).
Environment variables
| Var | Default | Purpose |
|---|---|---|
OVERLEAF_TOKEN |
(reads token.txt) |
Git token for content I/O |
OVERLEAF_SESSION |
(reads session.txt) |
Session cookie for discovery |
OVERLEAF_WORKSPACE_ROOT |
process.cwd() |
Where setup_local puts folders |
OVERLEAF_DEFAULT_PROJECT |
— | Name/ID used when projectName is omitted |
OVERLEAF_CONFIG_DIR |
~/.config/overleaf-mcp |
State directory |
OVERLEAF_BASE_URL |
https://www.overleaf.com |
Dashboard host (self-hosted CE) |
OVERLEAF_GIT_BASE |
https://git.overleaf.com |
Git host (self-hosted CE) |
OVERLEAF_GIT_AUTHOR_NAME / _EMAIL |
Overleaf MCP / overleaf-mcp@localhost |
Commit identity |
Tools (17)
Discovery — sync_projects, find_project, session_status, list_projects
Workspace — setup_local, pull_local, diff_local, push_local,
list_version_history, rollback_to_version
Content (workspace-aware) — list_files, read_file, get_sections,
get_section_content, status_summary, write_file, write_section
The core flow: review before push
sync_projects→find_project "VCaiLuong"setup_local "VCaiLuong"→ clones to<workspace-root>/VCaiLuong/write_section main.tex "Abstract" "…"→ writes only, no pushdiff_local "VCaiLuong"(or your IDE Source Control) to reviewpush_local "VCaiLuong" "Rewrite abstract"→ commits + pushes
Projects without a workspace fall back to legacy behavior: write_file /
write_section clone to a temp dir and commit + push immediately (a commitMessage
is required in that mode).
Rollback
list_version_history "VCaiLuong" limit:10
rollback_to_version "VCaiLuong" commitSha:"def5678" paths:["main.tex"] mode:"restore"
# → uncommitted changes; review with diff_local, then push_local
restore = git checkout <sha> -- <paths>; revert = undo commits since <sha>.
Both leave changes uncommitted (nothing is force-pushed). Rollback refuses if the
workspace is dirty unless force:true.
Security notes
- The git token is never placed in argv, in a workspace's
.git/config, or in error output. Remotes are stored clean; credentials are supplied per-command via an inline credential helper reading the token from the child process env. - Keep
token.txtandsession.txtatchmod 600.
Layout
src/
├── server.js MCP entry: stdio transport, tool schemas, dispatch, content routing
├── config.js paths, auth, cache.json, workspaces.json, name/ID resolution
├── git.js child_process git wrappers with token masking
├── overleaf.js session-cookie discovery (the only network-JSON module)
└── latex.js \section{…} parsing + section splicing
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。