Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pandoc Bridgeconvert this markdown to a Word document"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pandoc Bridge
A document format conversion service using Pandoc, supporting both REST (OpenAPI 3.1) and MCP (Model Context Protocol) interfaces.
Features
40+ Format Support: Convert between Markdown, HTML, LaTeX, DOCX, PDF, and many more formats
Dual Protocol: REST API with OpenAPI documentation and MCP server for AI assistants
Bearer Token Auth: Shared JWT authentication across both protocols
Streaming Support: Server-Sent Events for progress tracking
Rate Limiting: Built-in protection against abuse
Docker Ready: Production-ready containerization with multi-arch support
Documentation
API Reference - Detailed REST API documentation
MCP Integration - Model Context Protocol guide
Container Registry Guide - Docker deployment guide
OpenAPI Spec - Interactive Swagger UI (when running)
Quick Start
Using Docker Compose
Local Development
API Endpoints
Public Endpoints
Endpoint | Description |
| Service information |
| Health check with Pandoc version |
| List supported formats |
| Swagger UI documentation |
Protected Endpoints (Require Bearer Token)
Endpoint | Description |
| Convert text content |
| Convert uploaded file |
| Stream conversion with SSE |
MCP Endpoint
Endpoint | Description |
| MCP Streamable HTTP transport |
Usage Examples
Convert Text (REST)
Convert File (REST)
Using with Claude Desktop (MCP)
Add to your Claude Desktop configuration:
Or with authentication:
MCP Tools
Tool | Description |
| Convert text between formats |
| Convert base64-encoded files |
| Get supported formats |
| Get version information |
MCP Resources
Resource | Description |
| JSON list of supported formats |
| Format conversion compatibility matrix |
Authentication
Scopes
Scope | Description |
| Query formats (public) |
| Text conversion |
| File conversion |
| Full access |
Token Format
Configuration
Environment variables (see .env.example):
Variable | Default | Description |
|
| Server host |
|
| Server port |
|
| Logging level |
|
| Environment (development/production) |
| (required in prod) | JWT signing key (min 32 chars) |
|
| Token expiration time |
|
| Maximum file size |
|
| Conversion timeout in seconds |
⚠️ Security Note: Always set
JWT_SECRET_KEYin production. Generate one with:python -c "import secrets; print(secrets.token_urlsafe(32))"
Development
Run Tests
Lint Code
Type Check
Security Scan
CI/CD
The project uses GitHub Actions for continuous integration and deployment:
CI Pipeline (
pipeline.yml):Runs on Python 3.12 and 3.13
Linting with ruff
Type checking with mypy
Tests with pytest and coverage
Security scanning with bandit
Deploys documentation to GitHub Pages
Container Publishing (
publish-container.yml):Triggered on version tags (
v*.*.*)Multi-arch builds (amd64, arm64)
Publishes to GitHub Container Registry
Running Locally
Architecture
License
MIT License - see LICENSE for details.