Skip to main content
Glama

MCP LaTeX Server

A Model Context Protocol (MCP) server for LaTeX file creation, editing, validation, and compilation. Built with FastMCP and Pydantic for type-safe, structured output.

Features

  • Create LaTeX documents from parameters or bundled templates (article, beamer, report)

  • Edit files with replace, insert, append, and prepend operations

  • Read and list .tex files within a secure base directory

  • Validate syntax — braces, environments, references, required declarations

  • Compile to PDF with pdflatex, xelatex, or lualatex

  • Resources — browse and retrieve bundled templates via latex:// URIs

Prerequisites

  • Python 3.11.9+

  • LaTeX distribution (for compilation):

    • Windows: MiKTeX or TeX Live

    • macOS: MacTeX (brew install --cask mactex)

    • Linux: sudo apt install texlive-full (Debian/Ubuntu) or sudo dnf install texlive-scheme-full (Fedora)

Installation

git clone https://github.com/RobertoDure/mcp-latex-server
cd mcp-latex-server
uv pip install -e .

Using pip

git clone <repository-url>
cd mcp-latex-server
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
pip install -e .

Quick setup (Windows)

python quick_setup.py

This checks Python version, installs dependencies, verifies the server imports correctly, and optionally configures Claude Desktop.

Configuration

The server uses a single environment variable:

Variable

Description

Default

LATEX_SERVER_BASE_PATH

Root directory for all file operations

. (current directory)

All file paths passed to tools are resolved relative to this base directory. Access outside it is denied.

MCP client configuration

Claude Desktop

Add to your claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "latex-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-latex-server",
        "run",
        "latex_server.py"
      ],
      "env": {
        "LATEX_SERVER_BASE_PATH": "/path/to/your/latex/files"
      }
    }
  }
}

VS Code (GitHub Copilot)

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "latex-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-latex-server",
        "run",
        "latex_server.py"
      ],
      "env": {
        "LATEX_SERVER_BASE_PATH": "${workspaceFolder}"
      }
    }
  }
}

Tools

create_latex_file

Create a new LaTeX document from parameters.

Parameter

Type

Default

Description

file_path

str

required

Path for the new .tex file

document_type

article|report|book|letter|beamer|minimal

article

Document class

title

str

""

Document title

author

str

""

Document author

date

str

\today

Document date

content

str

""

Body content

packages

list[str]

[]

Extra LaTeX packages

geometry

str

""

Geometry settings (e.g. margin=1in)

create_from_template

Create a document from a bundled template.

Parameter

Type

Default

Description

file_path

str

required

Path for the new .tex file

template

article|beamer|report

article

Template name

edit_latex_file

Edit an existing LaTeX file.

Parameter

Type

Default

Description

file_path

str

required

Path to the file

operation

replace|insert_before|insert_after|append|prepend

required

Edit operation

new_text

str

required

Text to insert or replace with

search_text

str|null

null

Text to find (required for replace/insert)

line_number

int|null

null

1-based line number (alternative to search_text)

read_latex_file

Read and return the contents of a .tex file.

Parameter

Type

Default

Description

file_path

str

required

Path to the file

list_latex_files

List all .tex files in a directory.

Parameter

Type

Default

Description

directory_path

str

.

Directory to search

recursive

bool

false

Search subdirectories

validate_latex

Check LaTeX syntax: required declarations, balanced braces, environment matching, undefined references.

Parameter

Type

Default

Description

file_path

str

required

Path to the file

get_latex_structure

Extract document structure: class, title, author, packages, and section hierarchy.

Parameter

Type

Default

Description

file_path

str

required

Path to the file

compile_latex

Compile a .tex file to PDF (runs the engine twice for references/TOC).

Parameter

Type

Default

Description

file_path

str

required

Path to the file

engine

pdflatex|xelatex|lualatex

pdflatex

LaTeX engine

Resources

URI

Description

latex://templates

List available bundled templates

latex://template/{name}

Get the content of a specific template

Testing

Test with the MCP Inspector:

uv run mcp dev latex_server.py

Or run the included test suite:

python test_server.py

Troubleshooting

Server won't start — Verify Python 3.10+ (python --version) and that mcp is installed (pip list | grep mcp).

Compilation fails — Ensure a LaTeX distribution is on your PATH (pdflatex --version). Install MiKTeX or TeX Live if missing.

"Access denied" errors — The requested file path resolves outside LATEX_SERVER_BASE_PATH. Use relative paths or adjust the env variable.

Claude can't connect — Double-check file paths in your MCP config, restart Claude Desktop, and verify with uv run mcp dev latex_server.py.

License

MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RobertoDure/mcp-latex-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server