{"serverId":"mcp-registry/com.makespdf/makespdf","tools":[{"name":"delete_template","fixed":{"name":"delete_template","description":"Delete a caller-owned template by ID. Library rows cannot be deleted. Mirrors DELETE /api/v1/templates/:id.","inputSchema":{"type":"object","required":["templateId"],"properties":{"templateId":{"type":"string","description":"Template ID — slug for library rows (e.g. 'invoice-classic') or UUID for user rows."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"get_template","fixed":{"name":"get_template","description":"Fetch a single template (library or caller-owned) by ID, including its full DSL source and sampleData. Mirrors GET /api/v1/templates/:id.","inputSchema":{"type":"object","required":["templateId"],"properties":{"templateId":{"type":"string","description":"Template ID — slug for library rows (e.g. 'invoice-classic') or UUID for user rows."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":106,"tokensAfter":106},{"name":"list_templates","fixed":{"name":"list_templates","description":"List 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.","inputSchema":{"type":"object","properties":{"q":{"type":"string","maxLength":128},"tags":{"type":"string","maxLength":256},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1},"owner":{"enum":["mine","library","all"],"type":"string","default":"all"},"offset":{"type":"integer","default":0,"minimum":0},"category":{"type":"string","maxLength":64}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"render_dsl_preview","fixed":{"name":"render_dsl_preview","description":"Render 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.","inputSchema":{"type":"object","required":["dsl"],"properties":{"dsl":{"type":"string","description":"The builder DSL script."},"data":{"type":"object","description":"Optional binding data. Falls back to the script's sampleData when omitted."},"title":{"type":"string","maxLength":200,"description":"Optional document title (shown in PDF metadata)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":170,"tokensAfter":170},{"name":"save_template","fixed":{"name":"save_template","description":"Save 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 }.","inputSchema":{"type":"object","required":["dsl","name"],"properties":{"dsl":{"type":"string","description":"The builder DSL script (<=512KB)."},"name":{"type":"string","maxLength":200,"minLength":1,"description":"Human-readable template name."},"sampleData":{"description":"Optional JSON binding data to persist alongside the template. Round-tripped on get_template / modify-template flow.","type":"string"},"description":{"type":"string","maxLength":280,"description":"Optional one-sentence summary (max 280 chars). Surfaced on /templates list rows."}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: sampleData. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":285,"tokensAfter":290},{"name":"update_template","fixed":{"name":"update_template","description":"Update 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.","inputSchema":{"type":"object","required":["templateId"],"properties":{"dsl":{"type":"string","description":"Replacement builder DSL script (<=512KB)."},"name":{"type":"string","maxLength":200,"minLength":1},"sampleData":{"description":"Optional JSON binding data. `null` clears the stored value; omit to leave unchanged.","type":"string"},"templateId":{"type":"string","description":"Template ID — slug for library rows (e.g. 'invoice-classic') or UUID for user rows."},"description":{"type":["string","null"],"maxLength":280,"description":"Optional one-sentence summary (max 280 chars). Pass `null` (instead of a string) to clear the stored value; omit the key entirely to leave it unchanged."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: sampleData. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":264,"tokensAfter":268},{"name":"validate_dsl","fixed":{"name":"validate_dsl","description":"Validate 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.","inputSchema":{"type":"object","required":["dsl"],"properties":{"dsl":{"type":"string","description":"The builder DSL script to validate. Must define a template (see skills/pdf-template-author.md)."},"data":{"type":"object","description":"Optional binding data. Falls back to the script's sampleData when omitted."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"validate_markdown","fixed":{"name":"validate_markdown","description":"Validate a markdown document for PDF/UA-1 accessibility issues (heading hierarchy, missing alt text). Cheap — no rendering. Mirrors POST /api/v1/md/validate.","inputSchema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","description":"GitHub-flavored markdown source. Max 200KB of text; inline data: image payloads are excluded from that budget."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120}],"toolsChanged":8,"tokensSaved":0,"todo":[{"tool":"list_templates","params":["q","tags","limit","owner","offset","category"]},{"tool":"update_template","params":["name"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}