overleaf-multi-mcp

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.

Category
访问服务器

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 git binary on PATH

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

  1. sync_projects → find_project "VCaiLuong"
  2. setup_local "VCaiLuong" → clones to <workspace-root>/VCaiLuong/
  3. write_section main.tex "Abstract" "…" → writes only, no push
  4. diff_local "VCaiLuong" (or your IDE Source Control) to review
  5. push_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.txt and session.txt at chmod 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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选