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

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

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

TDQS

A4.6/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion between tools. The tool's purpose is clearly defined and distinct.

Naming Consistency5/5

A single tool has no naming inconsistencies. The name 'create_document' is descriptive and follows a common verb_noun pattern.

Tool Count4/5

The single tool is appropriate for a focused server that creates PDF documents. However, it might be considered slightly thin as it combines creation and editing via a returned URL.

Completeness3/5

The tool covers document creation comprehensively, but lacks supporting tools for managing documents (e.g., listing, updating, deleting). This leaves agents with no way to perform other lifecycle operations.

Maintenance

ActivityInactive
ResponsivenessNo issues