Skip to main content
Glama
README.md
# Overleaf MCP

An MCP (Model Context Protocol) server that lets LLM agents (Claude Code, etc.) read and update Overleaf LaTeX papers via git.

## Architecture

- `overleaf_mcp.py` — FastAPI server exposing `read_paper` and `update_and_push_paper` tools over HTTP
- `main.py` — stdio bridge that translates JSON-RPC (MCP protocol) to HTTP calls; this is what MCP clients connect to

## Prerequisites

- Python 3.10+
- `pdflatex` (for LaTeX compilation)
- `git`

## Setup

1. **Clone your Overleaf project:**
   ```bash
   git clone https://git.overleaf.com/<your-project-id> ~/path/to/your-paper
   ```

2. **Configure the repository path:**
   ```bash
   cp .env.example .env
   # Edit .env and set REPO_DIR to the absolute path of your local clone
   ```

3. **Install dependencies:**
   ```bash
   pip install -e .
   ```

## Usage

### Step 1: Start the MCP server

```bash
python overleaf_mcp.py
```

The server starts on `http://localhost:8000` and exposes:
- `GET /mcp/tools` — list available tools
- `POST /mcp/execute` — execute a tool
- `GET /health` — health check

### Step 2: Connect an MCP client

The bridge (`main.py`) speaks JSON-RPC over stdio, the standard MCP transport. Point your MCP client to it.

**Claude Code (via `claude.json`):**
```json
{
  "mcpServers": {
    "overleaf": {
      "command": "python",
      "args": ["/path/to/overleaf_mcp/main.py"]
    }
  }
}
```

Or run the bridge directly for testing:
```bash
python main.py
```

## Tools

| Tool | Description | Parameters |
|------|-------------|------------|
| `read_paper` | Reads the current content of `main.tex` | None |
| `update_and_push_paper` | Writes new `main.tex`, compiles with `pdflatex`, commits, and pushes to Overleaf | `latex_content` (required), `commit_message` (optional) |
| `read_bibliography` | Reads a `.bib` file from the repo | `bib_file` (optional, default: `references.bib`) |
| `update_and_push_bibliography` | Writes new `.bib` content, compiles, commits, and pushes | `bib_content` (required), `bib_file` (optional), `commit_message` (optional) |

## Example

See `mcp_sample.json` for a sample request payload.