makespdf

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

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
93%
이름 품질
100%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~1,780토큰 (도구 정의)
~1.2 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.39%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 10개
검증됨버전이 기록되지 않음도구 10개