makespdf
Compliant PDFs (PDF/A-2A + PDF/UA-1) from markdown or a compact DSL - fast, no headless browser.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"makespdf": {
"url": "https://makespdf.com/api/v1/mcp"
}
}
}リモートエンドポイント
https://makespdf.com/api/v1/mcpstreamable-httpできること
ツール一覧
ツール(10)
🟡validate_dsl(dsl, data)
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.
入力スキーマ
{
"type": "object",
"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."
}
},
"required": [
"dsl"
]
}🟡validate_markdown(markdown)
Validate a markdown document for PDF/UA-1 accessibility issues (heading hierarchy, missing alt text). Cheap — no rendering. Mirrors POST /api/v1/md/validate.
入力スキーマ
{
"type": "object",
"properties": {
"markdown": {
"type": "string",
"description": "GitHub-flavored markdown source.",
"maxLength": 200000
}
},
"required": [
"markdown"
]
}🟡render_dsl_preview(dsl, data, title)
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.
入力スキーマ
{
"type": "object",
"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",
"description": "Optional document title (shown in PDF metadata).",
"maxLength": 200
}
},
"required": [
"dsl"
]
}🟡render_template(templateId, data, title)
Render 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.
入力スキーマ
{
"type": "object",
"properties": {
"templateId": {
"type": "string",
"description": "Template ID — slug for library rows (e.g. 'invoice-classic') or UUID for user rows."
},
"data": {
"type": "object",
"description": "Binding data substituted into {{var}} expressions. Falls back to the template's sampleData when omitted."
},
"title": {
"type": "string",
"description": "Optional document title (shown in PDF metadata).",
"maxLength": 200
}
},
"required": [
"templateId"
]
}🟡save_template(dsl, name, description, sampleData)
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 }.
入力スキーマ
{
"type": "object",
"properties": {
"dsl": {
"type": "string",
"description": "The builder DSL script (<=512KB)."
},
"name": {
"type": "string",
"description": "Human-readable template name.",
"minLength": 1,
"maxLength": 200
},
"description": {
"type": "string",
"description": "Optional one-sentence summary (max 280 chars). Surfaced on /templates list rows.",
"maxLength": 280
},
"sampleData": {
"description": "Optional JSON binding data to persist alongside the template. Round-tripped on get_template / modify-template flow."
}
},
"required": [
"dsl",
"name"
]
}🟢list_templates(owner, category, tags, q, limit, ...)
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.
入力スキーマ
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"enum": [
"mine",
"library",
"all"
],
"default": "all"
},
"category": {
"type": "string",
"maxLength": 64
},
"tags": {
"type": "string",
"maxLength": 256
},
"q": {
"type": "string",
"maxLength": 128
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
}
}🟢get_template(templateId)
Fetch a single template (library or caller-owned) by ID, including its full DSL source and sampleData. Mirrors GET /api/v1/templates/:id.
入力スキーマ
{
"type": "object",
"properties": {
"templateId": {
"type": "string",
"description": "Template ID — slug for library rows (e.g. 'invoice-classic') or UUID for user rows."
}
},
"required": [
"templateId"
]
}🟡update_template(templateId, dsl, name, description, sampleData)
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.
入力スキーマ
{
"type": "object",
"properties": {
"templateId": {
"type": "string"
},
"dsl": {
"type": "string"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"type": "string",
"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.",
"maxLength": 280
},
"sampleData": {
"description": "Optional JSON binding data. `null` clears the stored value; omit to leave unchanged."
}
},
"required": [
"templateId"
]
}🔴delete_template(templateId)
Delete a caller-owned template by ID. Library rows cannot be deleted. Mirrors DELETE /api/v1/templates/:id.
入力スキーマ
{
"type": "object",
"properties": {
"templateId": {
"type": "string"
}
},
"required": [
"templateId"
]
}🟡render_markdown(markdown, options)
Render 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.
入力スキーマ
{
"type": "object",
"properties": {
"markdown": {
"type": "string",
"description": "GitHub-flavored markdown source.",
"maxLength": 200000
},
"options": {
"type": "object",
"description": "Optional render settings. Anything omitted falls back to YAML frontmatter in the markdown, then to the runtime default.",
"properties": {
"pageSize": {
"type": "string",
"enum": [
"A3",
"A4",
"A5",
"Letter",
"Legal"
]
},
"fontFamily": {
"type": "string",
"enum": [
"Inter",
"NotoSans"
]
},
"fontSize": {
"type": "number",
"minimum": 6,
"maximum": 24
},
"margins": {
"type": "array",
"description": "Page margins in points, [top, right, bottom, left].",
"items": {
"type": "number"
}
},
"theme": {
"type": "string",
"enum": [
"default",
"github"
]
},
"splitMode": {
"type": "string",
"enum": [
"default",
"balanced"
]
},
"title": {
"type": "string",
"description": "Optional document title (shown in PDF metadata).",
"maxLength": 200
},
"author": {
"type": "string",
"maxLength": 200,
"description": "PDF /Author metadata."
},
"subject": {
"type": "string",
"maxLength": 200,
"description": "PDF /Subject metadata."
},
"keywords": {
"type": "array",
"description": "PDF /Keywords metadata.",
"items": {
"type": "string"
}
}
}
}
},
"required": [
"markdown"
]
}コミュニティ
エビデンス