An MCP server that redacts PDF documents by removing personally identifiable information (PII) using pattern matching, NER, and optionally AI-powered redaction
Single tool 'redact_pdf' has a basic schema and description but lacks critical production-grade quality. Description is only 26 chars ('Redacts PDF with AI retry'), below the 50-200 char LLM-optimized baseline. Input parameters lack descriptions entirely, 'pdf_base64' and 'retry_with_ai' have no guidance on format, constraints, or usage. Output schema is present but not documented in the tool definition itself. No error handling guidance, no recovery paths, no validation rules. Tool name lacks clarity on what 'redact' means (PII removal? Sensitive data masking?). No mention of prerequisites (OpenAI API key for AI retry), dependencies, or when to use AI vs. regex-based redaction. The implementation shows dummy responses ('Redacted dummy content') suggesting incomplete development.
Redacts PDF with AI retry
Tool description is only 26 characters ('Redacts PDF with AI retry'), far below the 50-200 char LLM-optimized baseline. Too terse for LLM selection logic.
Input parameters 'pdf_base64' and 'retry_with_ai' have no descriptions. LLMs cannot infer parameter meaning from names alone, 'pdf_base64' needs format guidance (max size, encoding details), and 'retry_with_ai' needs context on when/why to enable it.
No error handling or recovery guidance. Tool can fail (invalid PDF, OpenAI API errors, timeout) but provides no actionable error messages or next steps for the LLM.
Tool name 'redact_pdf' is ambiguous. Does it redact PII, sensitive data, or arbitrary text? No verb clarity. Consider 'redact_pii_from_pdf' or 'mask_sensitive_data_in_pdf'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | <=2025-11-25 | v2 |
Implementation shows dummy response ('Redacted dummy content') and no actual redaction logic in main.py. Tool is non-functional, only tool/list and tool/execute stubs exist. Actual redaction logic in tools/redact_pdf.py and tools/retry_with_ai.py is never invoked.