Skip to main content
Glama
README.md
# LaTeX PDF MCP Server

A Model Context Protocol (MCP) server that provides tools for converting LaTeX source code into PDF documents. This server enables AI assistants to generate high-quality PDF documents from LaTeX markup with professional formatting capabilities.

## Features

- **LaTeX to PDF Conversion**: Convert LaTeX source code directly to PDF format
- **Professional Document Generation**: Supports all standard LaTeX features for academic and professional documents
- **Local File Generation**: Creates PDF files in a specified directory for easy access
- **HTTP Server Integration**: Generates downloadable links for created PDFs
- **Error Handling**: Comprehensive error reporting for LaTeX compilation issues

## Prerequisites

Before using this MCP server, ensure you have:

1. **Node.js** (version 18 or higher)
2. **LaTeX Distribution**: A complete LaTeX installation such as:
   - **Windows**: [MiKTeX](https://miktex.org/) or [TeX Live](https://www.tug.org/texlive/)
   - **macOS**: [MacTeX](https://www.tug.org/mactex/)
   - **Linux**: TeX Live (install via package manager)
3. **latexmk**: Usually included with LaTeX distributions

## Installation

### From npm (Recommended)

```bash
npm install -g latexpdf-mcp
```

### From Source

1. Clone the repository:

```bash
git clone https://github.com/ihor-sokoliuk/latexpdf-mcp.git
cd latexpdf-mcp
```

2. Install dependencies:

```bash
pnpm install
```

3. Build the project:

```bash
pnpm run build
```

## Configuration

### Claude Desktop Configuration

Add the server to your Claude Desktop configuration file:

**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Linux**: `~/.config/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "latexpdf-mcp": {
      "command": "latexpdf-mcp",
      "env": {
        "LATEXPDF_OUTPUT_DIR": "/path/to/your/pdf/directory"
      }
    }
  }
}
```

### Output Directory

By default, PDFs are generated in: `C:\Users\Admin\Documents\GeneratedPDF`

You can customize the output directory by setting the `LATEXPDF_OUTPUT_DIR` environment variable in your MCP configuration.

**Example configurations:**

**Windows:**

```json
{
  "mcpServers": {
    "latexpdf-mcp": {
      "command": "latexpdf-mcp",
      "env": {
        "LATEXPDF_OUTPUT_DIR": "C:\\Users\\YourName\\Documents\\MyPDFs"
      }
    }
  }
}
```

**macOS/Linux:**

```json
{
  "mcpServers": {
    "latexpdf-mcp": {
      "command": "latexpdf-mcp",
      "env": {
        "LATEXPDF_OUTPUT_DIR": "/home/yourname/Documents/PDFs"
      }
    }
  }
}
```

## Usage

Once configured, you can use the server through your MCP-compatible client:

### Available Tools

#### `create_pdf`

Converts LaTeX source code into a PDF document.

**Parameters:**

- `file_name` (string, required): Name of the output PDF file (must end with .pdf)
- `latex_source` (string, required): LaTeX source code to convert

**Example:**

```latex
\documentclass{article}
\usepackage[utf8]{inputenc}
\title{Sample Document}
\author{Your Name}
\date{\today}

\begin{document}
\maketitle

\section{Introduction}
This is a sample LaTeX document generated via MCP.

\subsection{Features}
\begin{itemize}
    \item Professional formatting
    \item Mathematical expressions: $E = mc^2$
    \item Cross-references and citations
\end{itemize}

\end{document}
```

## PDF Access

After generating a PDF, you can access it via HTTP server:

1. Navigate to the output directory (default: `C:\Users\Admin\Documents\GeneratedPDF`, or your custom `LATEXPDF_OUTPUT_DIR`):

```bash
cd [YOUR_OUTPUT_DIRECTORY]
```

2. Start a local HTTP server:

```bash
python -m http.server
```

3. Access your PDFs at `http://localhost:8000/[filename].pdf`

The server automatically provides download links in this format when PDFs are generated.

## Development

### Project Structure

```
latexpdf-mcp/
├── index.ts              # Main server implementation
├── package.json          # Package configuration
├── tsconfig.json         # TypeScript configuration
├── pnpm-lock.yaml        # Dependency lock file
└── dist/                 # Compiled JavaScript output
```

### Building

```bash
pnpm run build
```

### Development Mode

```bash
pnpm run watch
```

## Troubleshooting

### Common Issues

1. **LaTeX not found**: Ensure LaTeX is properly installed and `latexmk` is in your PATH
2. **Permission errors**: Check write permissions for the output directory
3. **Compilation errors**: Review LaTeX syntax and required packages

### Error Messages

The server provides detailed error messages for:

- Missing LaTeX installation
- Compilation failures
- File system permissions
- Invalid input parameters

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## Links

- **Repository**: [https://github.com/ihor-sokoliuk/latexpdf-mcp](https://github.com/ihor-sokoliuk/latexpdf-mcp)
- **Issues**: [https://github.com/ihor-sokoliuk/latexpdf-mcp/issues](https://github.com/ihor-sokoliuk/latexpdf-mcp/issues)
- **Model Context Protocol**: [https://modelcontextprotocol.io](https://modelcontextprotocol.io)

## Author

**Ihor Sokoliuk** - [GitHub Profile](https://github.com/tobioffice)

---

_This MCP server enables seamless LaTeX to PDF conversion within AI-assisted workflows, perfect for generating academic papers, technical documentation, and professional reports._

TDQS

B3.4/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The single tool 'create_pdf' has a clear and distinct purpose, making it impossible for an agent to misselect among alternatives.

Naming Consistency5/5

The single tool name 'create_pdf' follows a clear verb_noun pattern (create + pdf), which is consistent and predictable. Since there is only one tool, there is no inconsistency to evaluate, and the naming convention is straightforward.

Tool Count2/5

A single tool is generally too few for a server's purpose, as it limits functionality and may indicate an incomplete or overly narrow scope. For a LaTeX PDF server, one tool feels thin and inadequate for covering potential operations like editing, compiling, or managing PDFs.

Completeness2/5

The tool surface is severely incomplete for a LaTeX PDF domain. While 'create_pdf' handles PDF generation, there are obvious gaps such as editing LaTeX source, compiling with options, managing templates, or viewing PDFs, which will likely cause agent failures in broader workflows.