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.

Maintenance

ActivityInactive
ResponsivenessNo issues