makespdf

Compliant PDFs (PDF/A-2A + PDF/UA-1) from markdown or a compact DSL - fast, no headless browser.

Community: Submitted by a user or imported; check the owner before granting accessDegradedAPI key requiredGlobalFreeRead-only

What it can do

    What data it sees

    Do you need an account

    An API key from the service settings is required

    Compliant PDFs (PDF/A-2A + PDF/UA-1) from markdown or a compact DSL - fast, no headless browser.

    Server tool list (10)

    Raw names from tools/list. Only developers need these.

    validate_dslValidate a PDF template DSL script for structure, tag/style correctness, and accessibility issues. Runs catalog validation plus alt-text checks. Cheap — no rendering. Mirrors POST /api/v1/preview/validate.
    validate_markdownValidate a markdown document for PDF/UA-1 accessibility issues (heading hierarchy, missing alt text). Cheap — no rendering. Mirrors POST /api/v1/md/validate.
    render_dsl_previewRender a DSL template + data to a preview PDF. Free (no credits), always watermarked 'PREVIEW — NOT FOR USE'. Returns JSON metadata plus the PDF bytes as an embedded base64 resource. Mirrors POST /api/v1/preview.
    render_templateRender any readable template (curated library row or caller-owned) to a real PDF. **BILLED — consumes credits at the rate of 1 credit per 10 pages.** Returns JSON metadata (pageCount, creditsDeducted, creditsRemaining, artifactId) plus the PDF bytes as an embedded base64 resource. On the free plan the PDF is watermarked; paid plans render clean. Mirrors POST /api/v1/render with the { templateId, data } body shape. Use `render_dsl_preview` first to confirm the layout — that's free and watermarked. Only call this once you're confident the template is right.
    save_templateSave a user-owned DSL template for later reuse via /api/v1/render. Validates the DSL with the catalog before persisting. Free (no credits). Pass `sampleData` (any JSON value) so the template's binding shape is preserved — the modify-template flow on /ai/chat round-trips this back into the Render data panel when the user returns. Optional `description` is a one-sentence summary surfaced on /templates. Returns { templateId, name, createdAt }.
    list_templatesList templates visible to the caller — both curated library templates (no owner) and the caller's own saved templates. Metadata only (no DSL bodies). Paginated. Use `owner: 'mine'` to restrict to your own; `owner: 'library'` for the curated catalog only; default `'all'` returns both. Optional `category`, `tags` (comma-separated, ANDed), and `q` (free-text over name + description) filters apply across both. Mirrors GET /api/v1/templates.
    get_templateFetch a single template (library or caller-owned) by ID, including its full DSL source and sampleData. Mirrors GET /api/v1/templates/:id.
    update_templateUpdate a saved template's DSL, name, description, and/or sampleData. Revalidates the DSL when provided. For `description` and `sampleData`: pass `null` to clear; omit to leave unchanged. Mirrors PUT /api/v1/templates/:id.
    delete_templateDelete a caller-owned template by ID. Library rows cannot be deleted. Mirrors DELETE /api/v1/templates/:id.
    render_markdownRender GitHub-flavored markdown to a real PDF (PDF/A-2A + PDF/UA-1 dual-compliant, tagged). **BILLED - consumes credits at the rate of 1 credit per 10 pages.** Returns JSON metadata (pageCount, creditsDeducted, creditsRemaining, artifactId) plus the PDF bytes as an embedded base64 resource. On the free plan the PDF is watermarked; paid plans render clean. Mirrors POST /api/v1/md. Run `validate_markdown` first - it is free and catches heading-hierarchy and alt-text problems before you pay to render them. There is no free markdown preview: markdown needs no layout iteration, so this is the only markdown render tool.
    makespdf: connect to Claude, ChatGPT, Cursor · Connectors.fun