MCP server for unlocking PDF passwords via unlockpdf.dev
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and error guidance. check_usage has no parameters (minimal schema), unlock_pdf has 4 parameters with descriptions but lacks enums, constraints, and output schema documentation. Descriptions are adequate (100-200 chars) but lack actionable error recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Error handling returns text responses without structured guidance for LLM recovery.
Check remaining free PDF unlocks for today and payment details. Call this before unlocking to know if payment is needed.
Remove password protection from a PDF file. Supports PDFs with open passwords and owner-restricted PDFs. Free tier: 10 unlocks/day. After that: $0.05 USDC via x402 on Base network.
No output schema documented for either tool. LLMs cannot plan downstream calls or extract structured data. check_usage returns text with usage stats; unlock_pdf returns success/error text. Both need explicit response schemas with typed fields.
unlock_pdf password parameter lacks constraint documentation. Description says 'Leave empty to attempt without password' but no enum or validation guidance. LLMs may pass invalid values. Should document: 'Optional. If omitted, attempts to unlock without password (works for owner-restricted PDFs).'
Error responses are unstructured text without recovery guidance. 402 Payment Required returns narrative text instead of structured error with next_action field. Pattern: 'Payment required, free tier exhausted.' should be 'error_code: PAYMENT_REQUIRED, next_action: call_check_usage_or_provide_payment_signature, amount_usdc: 0.05'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). check_usage is read-only; unlock_pdf is destructive (modifies filesystem). Annotations help LLMs reason about side effects and retry safety.
unlock_pdf output_path parameter lacks format/constraint documentation. Description says 'Defaults to same directory as input with _unlocked suffix' but no guidance on absolute vs relative paths, directory existence validation, or permission requirements. Should specify: 'Absolute path. Directory must exist and be writable. Defaults to <input_dir>/<basename>_unlocked.pdf'.