Skip to main content
Glama
GerardoBarrera

PDFMakerAPI MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PDFMAKERAPI_BASE_URLNoPoint the tool at a different API (e.g. http://localhost:3001 for local dev).https://api.pdfmakerapi.com

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_documentA

Create a professional, shareable PDF document — invoices, receipts, certificates, reports, resumes, letters, and more. Returns a link that opens the document in the PDFMakerAPI editor, where the user can preview it, edit any field, and download the PDF.

Design a THOROUGH, realistic document (don't leave it sparse) that exactly follows this model, then pass it as document.

DOCUMENT MODEL (PDFMakerAPI) Document:

  • id: string (short slug)

  • name: string

  • description: string (one short sentence)

  • pageSize: "letter" | "a4" | "legal" | "letter-landscape" | "a4-landscape" | "square" (default "a4")

  • pageBackgroundColor: hex string (default "#ffffff")

  • margin: "none" | "sm" | "md" | "lg" — page margin; default "lg"

  • gap: "none" | "sm" | "md" | "lg" — vertical spacing between top-level sections; default "lg"

  • variables: Variable[] — every {{placeholder}} you use MUST be declared here

  • children: Node[] — the document body, top to bottom

Variable: { id, name (snake_case, used as {{name}}), label (human), type: "text"|"date"|"number"|"currency", defaultValue?: string }

Node (every node has: id, name, width: "full"|"1/2"|"1/3"|"1/4"|"2/3"|"3/4"|"auto", order: number, align?: "left"|"center"|"right", style?: NodeStyle):

  • container: { type:"container", layout:{ direction:"row"|"column", gap:"none"|"sm"|"md"|"lg", justify?:"start"|"center"|"end"|"between", alignItems?:"start"|"center"|"end"|"stretch" }, children: Node[] }

  • text: { type:"text", content: string (supports \n and {{vars}}), fontSize?:"xs"|"sm"|"base"|"lg"|"xl", fontWeight?:"normal"|"medium"|"semibold"|"bold" }

  • table: { type:"table", columns: { id, name (data key), label (header), width?: "40%", align?: "left"|"center"|"right" }[], rowVariable: string }

  • spacer: { type:"spacer", height: "sm"|"md"|"lg"|"xl" }

  • divider: { type:"divider", lineStyle?: "solid"|"dashed"|"dotted" }

NodeStyle: { backgroundColor?: hex, backgroundMode?: "none"|"solid"|"gradient", gradientTo?: hex, textColor?: hex, padding?: "none"|"sm"|"md"|"lg"|"xl", borderRadius?: "none"|"sm"|"md"|"lg", fullBleed?: boolean }

VARIABLES — how data is inserted

  • In text content, insert a value with double braces and the exact snake_case name, e.g. {{invoice_number}} — no spaces inside the braces. Every {{name}} used MUST be declared in variables[].

  • Give every variable a realistic defaultValue so the result looks complete.

  • TABLES do NOT use {{}}. A table renders one row per item in its rowVariable array, pulling item[column.name] for each cell — so each column "name" must match the row object's key. The rowVariable variable's defaultValue must be a JSON-encoded string of the row array, e.g. JSON.stringify([{ description: "Brand design", qty: "1", amount: "$2,400.00" }]).

RULES

  • Use containers (direction:"row") to place items side by side.

  • For label/value pairs (dates, totals, "Bill To", reference numbers), nest a direction:"row" container with two text children — a BOLD label (fontWeight:"bold") and the value as a {{variable}} — each with a width (e.g. label "1/3", value "2/3") so they align in columns. Stack such rows in a column container.

  • Use a table node for any repeating rows (line items, attendees) and set rowVariable.

  • Spacing between sections comes from the document "gap" (default "lg") — do NOT insert spacer nodes between top-level sections.

  • Table column alignment: left-align text columns, right-align money/number columns, center short codes/status; a header's alignment matches its column.

  • Every id must be unique. Keep it clean and professional.

After the tool returns a url, share it with the user and tell them they can open it to preview, edit any field, and download the PDF.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GerardoBarrera/pdfmakerapi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server