Built and run by one person.

Markdown to PDF API - formatted PDFs from Markdown

TigZig API & MCP Hub
REST / HTTP APIMCP Server (AI agents)Document toolOpen - no auth

Open, no-auth HTTP API and MCP server that turns Markdown into a cleanly formatted PDF - POST Markdown text or a .md file, get the PDF back. Built on FastAPI + ReportLab; the same open-source engine also powers richly styled analytical reports with charts (that pipeline is open source, not a public endpoint). Built for AI agents first, humans second: every page here has a Copy-as-Markdown button so you can hand it straight to your agent.

Markdownin
PDFout
REST + MCPaccess
Opensource, no auth
AI agents: this API is open (no auth). It serves no OpenAPI spec (the interactive docs are disabled); the full endpoint contract - paths, request bodies, responses - is listed below on this page. The RFC 9727 catalog at api.tigzig.com/.well-known/api-catalog is a site-level directory of all TigZig APIs - go there only if you want a different API, not for more detail on this one.
Quick start
MCP server for AI agents
https://mdtopdf.tigzig.com/mcp
Streamable HTTP. Add as a custom connector in Claude.ai, ChatGPT, Cursor, n8n.
REST API base URL
https://mdtopdf.tigzig.com/v1

What it is

One engine that turns Markdown into a professionally formatted PDF - the same ReportLab engine that renders reports across TigZig. Two public endpoints, both no-auth:

  • POST /v1/convert/text - send Markdown text as JSON, get the PDF back directly. The canonical endpoint (and what the MCP tool wraps).
  • POST /v1/convert - upload a .md file (multipart), get the PDF back directly.

Clean document layout: headings, lists, tables, code, blockquotes, horizontal rules. Precise, paginated output - not a quick markdown-to-HTML-to-PDF route. There is also a free web tool if you just want to paste and download.

MCP server (for AI agents)

Mount it in an AI agent and let it produce PDFs as a tool call. No auth. One endpoint:

  • https://mdtopdf.tigzig.com/mcp - Streamable HTTP, the recommended transport (MCP spec 2025-03-26). Tool: convert_markdown_to_pdf.

Add to Claude.ai: Settings -> Connectors -> Add custom connector -> paste the Streamable HTTP URL. Same URL works for Cursor, n8n, any MCP client. The agent writes a report in Markdown, calls the tool, gets back a PDF URL.

Styled reports with charts (open source)

The same ReportLab engine also produces richer analytical reports - side-by-side tables, embedded charts, custom styling, saved as a hosted PDF + HTML. That is what powers the TigZig Technical Analysis app.

That report pipeline is not offered as a public endpoint here - it is a backend for our own apps and needs a specific multi-step calling convention. But it is fully open source: if you want to build formatted, charted reports for yourself, clone the repo and take the code. The ReportLab building blocks (paragraphs, tables, side-by-side frames, image embedding, an allowlist HTML sanitizer) are all there to assemble into your own report format.

Repo: shared-reportlab-md-to-pdf. For a full worked example - compute indicators, render charts, get AI commentary, build a report - see the Technical Analysis repo.

Build your own (open source)

The source is open - the repo runs the whole converter - run it as your own service, or reuse the components for your own report format.

github.com/amararun/shared-reportlab-md-to-pdf

Built on FastAPI, ReportLab.

CORS is configured for xlwings (addin.xlwings.org), so you can POST Markdown to it straight from Python-in-Excel and get a PDF back.

Self-hosting a public MCP server is your responsibility for security. A public endpoint needs edge rate limiting, abuse detection and secret hygiene. Full checklist: tigzig.com/security

Guides

This page is the reference - what the endpoints are and how to call them. The guides below are the long-form versions, with worked examples and the edges you only meet in real use:

Each is a plain page with a Markdown twin, so you can hand a URL straight to an agent. Come back to this page when you want parameter-level detail.

Rate limits

Published so a well-behaved client can plan around them. These are per-IP limits:

  • Per IP: 30 requests / minute.

You get a 429 with Retry-After (seconds) and a body naming the budget you crossed.

Avoiding 429s: Rendering is per-document, so there is no batching trick here - just space out requests and honor Retry-After.

Every successful response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix epoch seconds), read straight from the running limiter, and Retry-After is set on 429. The current numbers are also published as machine-readable JSON at https://mdtopdf.tigzig.com/v1/, derived from live config. Read those at runtime rather than hard-coding the figures above - limits change, and these channels change with them.

API Endpoints (REST / HTTP)

Base URLhttps://mdtopdf.tigzig.comPrepend this to every path listed below (e.g. /series becomes https://mdtopdf.tigzig.com/series). The curl example on each card shows the full URL.

The public endpoints of this API. Interactive Swagger and the OpenAPI spec are disabled on this backend (a hardening choice), so this table is the contract.

POST /v1/convert

Convert Markdown

Convert uploaded markdown file to PDF.

curl -X POST "https://mdtopdf.tigzig.com/v1/convert" -F "file=@<path-to-file>"
POST /v1/convert/text

Convert Markdown Text Endpoint

Convert markdown text directly to PDF.

curl -X POST "https://mdtopdf.tigzig.com/v1/convert/text" -H 'Content-Type: application/json' -d '{"content":"# Title\n\nHello world","filename":"out.pdf"}'