Skip to main content
Glama
dambuchs

redact-pdf-mcp

Redact PDF MCP server

An MCP server that permanently redacts PII from PDFs. Give an agent a PDF, get back a PDF with the sensitive text removed from the file — not covered with a black rectangle that anyone can select, copy, or delete.

Most "redaction" MCP servers scrub PII out of prompt text. This one takes a real document and returns a real redacted document.

npm npm downloads No AI training EU & Swiss hosted MCP registry License: MIT

claude mcp add redact-pdf -- npx -y redact-pdf-mcp

Then ask: "Redact the personal data in ~/Documents/contract.pdf".


Your data

You are sending the document the agent is meant to protect, so this comes first.

  • Never used to train AI models — not ours, not Microsoft's, not anyone's. The Azure AI services used for OCR and PII detection run with content logging disabled, so document content is not retained or used for model improvement.

  • Processed in the EU and Switzerland on Microsoft Azure.

  • Encrypted with TLS 1.2+ in transit and AES-256 at rest.

  • The original is deleted after processing under the default ephemeral retention. The redacted output is kept for your account's retention window (14 days by default, configurable) and can be purged at any time with DELETE /v1/jobs/{job_id}.

  • Certified infrastructure. Azure holds SOC 2 Type II, ISO 27001, ISO 27017 and ISO 27018 certifications and is HIPAA-eligible under Microsoft's BAA. Redact PDF AI itself is not independently audited for these frameworks; it is built so legal, medical and finance teams can use it inside their own compliance posture.

  • The MCP server sends no telemetry of its own — see what the server does locally.

Details: redact-pdf.ai/security · privacy policy

Related MCP server: @actalumen/mcp-server

Why not let the agent redact it itself?

An agent can find names in text. It cannot make a PDF safe on its own:

  • A black box is not a redaction. Drawing a rectangle over text leaves the text layer underneath; anyone can select, copy or extract it. This server rasterizes each page and drops the text layer and metadata, so there is nothing left to recover.

  • Scans have no text to search. Contracts, IDs and statements are often images. OCR runs first, in 100+ languages, then PII detection runs over what it read.

  • Detection is a model, not a regex. Names, addresses and organizations do not follow a pattern. The detector is purpose-built for PII, and your always-redact and never-redact lists cover the rest.

Examples

Prompts that work as-is once the server is installed:

  • "Redact the personal data in ~/Documents/lease.pdf before I send it to the agency."

  • "Redact names, emails and IBANs in every PDF in ~/Downloads/statements, keep our company name visible." — the agent passes pii_excluded_terms for the company name and fans out with redact_pdf.

  • "Here is a screenshot of a customer ticket. Remove the phone number and address, then give me a PDF I can attach." — images go in directly, no conversion.

  • "Try the redact-pdf demo on ~/Documents/contract.pdf so I can see what it does." — keyless, first page only.

Try it with no API key

The server ships a keyless tool, try_demo. Give it a file and it redacts the first page for real — no key, no account — and tells the agent what it found:

You: Use the redact-pdf server's try_demo tool on ~/Documents/contract.pdf.

Claude: Redacted the first page of contract.pdf (4 pages). Personal data removed on that page: Person, Email. Here is the redacted page (link valid 14 days). To redact all 4 pages, a free account gets the first document (up to 5 pages) done in full, no card.

Call it with no file and it runs a built-in synthetic sample instead, which is the zero-configuration connectivity check. Same thing from a terminal, no install:

curl https://www.redact-pdf.ai/v1/demo
curl -F file=@contract.pdf https://www.redact-pdf.ai/v1/demo/redact

What it does

  • Permanent, irreversible redaction. The underlying text is deleted, not masked. It cannot be recovered by copy-paste, text extraction, or "remove object" in a PDF editor.

  • PDFs and images. Pass a PDF, JPEG or PNG. Photos and screenshots do not need converting first; the output is a redacted PDF either way.

  • Scanned documents. OCR handles image-only PDFs and photos of documents.

  • 100+ languages for entity detection.

  • Eight entity types: Person, Email, PhoneNumber, Address, Organization, Date, IBAN, CreditCard — plus your own always-redact and never-redact term lists.

  • EU/Swiss processing, never used for AI training — see Your data.

  • Human review when it matters. retention: "studio" keeps the detected masks so a person can check and adjust them before export.

Install

Claude Code

claude mcp add redact-pdf --env REDACT_PDF_API_KEY=your_key -- npx -y redact-pdf-mcp

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "redact-pdf": {
      "command": "npx",
      "args": ["-y", "redact-pdf-mcp"],
      "env": { "REDACT_PDF_API_KEY": "your_key" }
    }
  }
}

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "redact-pdf": {
      "command": "npx",
      "args": ["-y", "redact-pdf-mcp"],
      "env": { "REDACT_PDF_API_KEY": "your_key" }
    }
  }
}

VS Code

code --add-mcp '{"name":"redact-pdf","command":"npx","args":["-y","redact-pdf-mcp"],"env":{"REDACT_PDF_API_KEY":"your_key"}}'

Get an API key at redact-pdf.ai/sign-up. A free account gets its first document (up to 5 pages) redacted in full, no card. Without a key, try_demo still works; everything else will tell the agent to ask you for one.

Tools

Tool

What it does

redact_pdf_and_wait

Start here. Upload, redact, wait, return the finished PDF. One call.

redact_pdf

Start a job and return immediately, for redacting several documents in parallel.

get_job_status

Poll a job: uploadedanalyzingredactingredacted | error.

download_redacted

Fetch the redacted output for one document.

try_demo

Keyless. With a file: redact its first page for real. Without: run the built-in sample.

get_account_status

Check the API key is valid and see the account, before a big batch.

Redaction rules, on either redact tool:

Argument

Effect

pii_categories

Restrict to specific entity types. Omit for account defaults.

pii_included_terms

Always redact these, even if not detected as PII (codenames, case numbers).

pii_excluded_terms

Never redact these, even if detected (your own company name).

retention

ephemeral (default) deletes the original after processing. studio keeps masks for human review.

Remote server

The package also ships a streamable-HTTP server for hosted use, where the API key travels per request instead of in the environment:

npx redact-pdf-mcp-http     # listens on :8080/mcp
POST /mcp
X-API-Key: your_key          (or: Authorization: Bearer your_key)

It is stateless — no sessions, no stored keys, nothing kept between requests — so each request gets its own short-lived server instance and one caller's key can never leak into another's tool call.

The handshake, tools/list, and try_demo work without a key, so a client can connect and verify the server before anyone signs up; every other tool returns 401 with a WWW-Authenticate challenge.

Documents are supplied as file_base64 (the remote server has no access to your filesystem).

Fetching a document by URL is off by default on the remote server. The address check is real — URLs resolving to loopback, private, or link-local addresses are refused, and every redirect hop is re-checked — but the socket resolves the hostname a second time after that check, so a DNS-rebinding attacker with a short TTL can still have the server validate one address and connect to another. Closing that requires pinning the connection to the validated address, which is not implemented yet, so an internet-reachable server does not offer the surface at all.

Set REDACT_PDF_ENABLE_URL_INPUT=1 to accept file_url, and only where you have your own egress controls (a network policy or allowlisting proxy) in front of the server. REDACT_PDF_ALLOW_PRIVATE_URLS=1 additionally permits private addresses, for a self-hosted instance fetching from internal storage.

stdio mode is unaffected: it runs on your own machine, where fetching a URL carries no privilege you do not already have.

Variable

Default

Purpose

REDACT_PDF_API_KEY

API key (stdio mode only; remote takes it per request).

REDACT_PDF_BASE_URL

https://www.redact-pdf.ai

Point at a different API host.

PORT

8080

HTTP server port.

REDACT_PDF_MCP_PATH

/mcp

HTTP endpoint path.

REDACT_PDF_ENABLE_URL_INPUT

unset

Accept file_url on the remote server. Off by default — see the DNS-rebinding note above.

REDACT_PDF_ALLOW_PRIVATE_URLS

unset

Self-hosted only: permit file_url to reach private addresses. Never set this on a publicly reachable server.

What the server does locally

  • No telemetry. The server makes exactly the API calls its tools describe, and nothing else. No analytics, no error reporting, no phone-home.

  • Stateless. No database, no cache, no disk writes except the redacted PDF you asked for, at the path you asked for.

  • Your originals stay yours. In stdio mode the input file is read and never modified. Under the default ephemeral retention the API deletes the original after processing.

  • Idempotent by default. The idempotency key is derived from the file bytes and the redaction settings, so an agent that retries the same call gets the same job back instead of redacting — and billing — twice. That cache lasts 24 hours; pass an explicit idempotency_key when you genuinely want a second, separate redaction of the same file.

  • Never overwrites. In stdio mode the redacted PDF is written atomically and the tool refuses to clobber an existing file.

Privacy Policy

The full policy is at redact-pdf.ai/privacy. It covers the website, the app and the API this server calls. In short:

  • What is collected. The documents you send, their processing metadata (status, page count, selected PII categories) and the redaction masks; your account identifier and email if you use an API key; billing data if you pay. This MCP server itself collects nothing and sends no telemetry.

  • How it is used. To run the redaction you asked for, and to operate, secure and bill your account. Documents are processed for OCR and PII detection only and are never used to train AI models.

  • Where it is stored. Microsoft Azure in the EU and Switzerland, encrypted in transit (TLS 1.2+) and at rest (AES-256).

  • Who it is shared with. Documents go only to Microsoft Azure (storage, OCR and PII detection). Account and billing data go to Clerk and Stripe. Internal operational alerts, which can include a file name, go to the team's Slack. The policy lists every subprocessor.

  • How long it is kept. Under the default ephemeral retention the original is deleted after processing; the redacted output follows your account's retention window (14 days by default) and can be deleted at any time. Files sent to the keyless try_demo are deleted after the first page is redacted; that page is kept 14 days.

  • Contact. info@redact-pdf.ai for privacy requests and questions.

Limits

  • 50 MB per PDF, 10 MB per image, 100 files per job.

  • PDF, JPEG and PNG in; always a PDF out. Convert other formats (DOCX, TIFF, HEIC) to PDF first.

  • On the remote server, base64 inflates a document by about a third, so prefer file_url for anything large.

  • Passing an empty pii_categories list is rejected: to the API an empty list means "redact nothing", which would return an untouched file reported as redacted. Omit the argument to use your account defaults.

  • Billed per page against your plan quota and credit packs, after the free first document. A quota_exceeded error means top up — the tools tell the agent not to retry it.

Development

npm install
npm run build
npm test                 # offline unit + tool tests
npm run test:integration # hits the live keyless demo endpoint; no key needed

Support questions about redaction quality, billing, or your account go to info@redact-pdf.ai — GitHub issues here are for the MCP server itself.

MIT licensed.

Available Tools

6 tools
download_redactedDownload a redacted PDFA
Destructive

Download the finished redacted PDF for one document, using the document id from redact_pdf or get_job_status.

Only works once that document reports status "redacted". Under the default "ephemeral" retention the original is already gone; the redacted output is kept for the account's retention window (14 days by default) and then deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe document id, from the documents list of redact_pdf or get_job_status.
output_pathNoWhere to write the redacted PDF on this machine. Defaults to the input path with a "-redacted" suffix, next to the original. Output is always a PDF, so an image input produces a .pdf file. The original file is never modified.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by explaining retention behavior: the original is already gone under ephemeral retention, the redacted output is kept for 14 days by default and then deleted, and the original file is never modified. It also discloses that output is always PDF even for image inputs. This gives the agent important behavioral context beyond readOnlyHint and destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the action and object. Every sentence earns its place: purpose, precondition, retention, output format, and non-modification of the original. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two well-documented parameters and no output schema, the description covers everything needed to call it correctly: source of the id, required status, retention window, output_path default, output format, and safety about the original file. No critical gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents document_id and output_path. The description adds no new parameter-level semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Download the finished redacted PDF for one document.' It also tells the agent where the document id comes from (redact_pdf or get_job_status), which clearly distinguishes this from sibling tools that create or check redaction jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the precondition: 'Only works once that document reports status "redacted".' It also points to redact_pdf or get_job_status as the source for the document id. It does not explicitly name alternatives or tell the agent what to do when the status is not redacted, but the usage context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_statusCheck API key and accountA
Read-only

Check that the configured API key is valid and see which account it belongs to. Call this before a large batch to fail fast on a bad or missing key, rather than after uploading.

Redaction is billed per page against the account's plan quota and credit packs. If a redaction call fails with "out of pages", that is a quota problem the user must resolve — do not retry it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that this is a safe read operation. The description adds non-obvious context about account plan quota and credit packs, and explains that 'out of pages' failures are permanent quota problems rather than transient errors. This is useful behavioral context beyond the annotations, though it does not describe the exact return payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concisely written and front-loads the core purpose before the recommended usage timing. The second paragraph about redaction billing and quota errors is somewhat tangential to what this tool itself does, but it is still relevant context and does not make the description bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, zero parameters, and no output schema, the description covers the essential what, when, and error-handling context. It does not enumerate the specific fields returned in the account status response, but the stated purpose ('see which account it belongs to') provides enough for an agent to invoke the tool correctly for its intended use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics for the description to clarify. According to the baseline for zero-parameter tools, a score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('check') and resource ('API key and account'), and clearly conveys the tool's diagnostic purpose. It is easily distinguishable from the sibling redaction and job-status tools because it is explicitly framed as a pre-batch validation step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: call this before a large batch to fail fast on a bad or missing key rather than after uploading. It also provides an exclusion for retrying 'out of pages' errors, which is a clear error-handling instruction that helps the agent decide when not to retry a related call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_statusCheck redaction job statusA
Read-only

Check a redaction job's progress. Statuses: "uploaded" (queued) -> "analyzing" (detecting PII) -> "redacting" -> "redacted" (done, ready to download) or "error".

Only "redacted" and "error" are final; anything else means the work is still in flight, so wait a few seconds before checking again rather than polling in a tight loop. Each document reports its own status and page_count, and a failed document explains why in error_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job_id returned by redact_pdf.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by explaining the full status progression, which statuses are terminal, and the recommended polling behavior. It also discloses that each document reports its own status, page_count, and error_message, giving the agent a realistic model of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed only by high-value behavioral details: statuses, final states, polling advice, and per-document reporting. Every sentence contributes useful information without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter status-check tool with no output schema, the description is remarkably complete. It explains the status model, terminal states, polling cadence, and the per-document outcome fields, so an agent has enough context to call the tool and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes job_id as 'The job_id returned by redact_pdf,' so coverage is complete. The description does not need to add parameter-level detail and does not repeat it; this is an acceptable baseline when the schema carries the meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Check a redaction job's progress.' It clearly identifies the tool's function and distinguishes it from sibling tools like redact_pdf, redact_pdf_and_wait, and download_redacted, which perform different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to check whether a job is still in flight and what statuses mean. It also provides polling guidance, telling the agent to wait seconds between checks rather than tight-looping. It does not explicitly name alternatives, but the sibling list and the status lifecycle make the intended use unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redact_pdfStart a redaction job (does not wait)A

Start a redaction job and return immediately without waiting. Permanent, irreversible redaction: the sensitive text is deleted from the file, not hidden behind a black rectangle, so it cannot be recovered by copy-paste, "remove object", or text extraction. Handles scanned documents via OCR and detects PII in 100+ languages. Documents are processed on Microsoft Azure in the EU and Switzerland, encrypted in transit and at rest, never used to train AI models, and the original is deleted after processing.

Accepts PDF, JPEG and PNG. Pass a photo or screenshot directly; do NOT convert it to a PDF first, that is handled for you and the output comes back as a redacted PDF either way.

Prefer redact_pdf_and_wait unless you specifically need to fire off several documents in parallel, or the document is large enough that you would rather poll on your own schedule. Returns a job_id plus one document id per file; follow with get_job_status, then download_redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument.
retentionNo"ephemeral" (default) deletes the original after processing and keeps the output only briefly. "studio" keeps the original and the detected masks so a human can review and adjust them at redact-pdf.ai before exporting — use it for high-stakes documents where a person should sign off.
pii_categoriesNoWhich entity types to redact. OMIT this to use the account defaults, which is usually what the user wants — do not pass an empty list, which would mean "redact nothing" and return an unredacted file. Valid values: Person, Email, PhoneNumber, Address, Organization, Date, IBAN, CreditCard.
idempotency_keyNoOptional. By default a key is derived from the file bytes and settings, so repeating an identical call returns the SAME job instead of redacting (and billing) twice. Pass a distinct value here only when you deliberately want a second, separate redaction of the same document.
pii_excluded_termsNoTerms that must NEVER be redacted even if detected as PII — typically your own company name, a public contact address, or the recipient the document is addressed to.
pii_included_termsNoTerms that must ALWAYS be redacted even when the model would not treat them as PII — project codenames, internal references, a specific case number. Matched whole-word and case-insensitive. Wins over excluded terms on conflict.

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is highly transparent on its own: it states redaction is permanent, irreversible, text is deleted rather than hidden, the original is deleted after processing, and processing occurs on Azure. However, the annotations declare destructiveHint=false, which directly contradicts the description's claims that the tool permanently deletes content and the original file. This is an annotation contradiction and makes the structured safety signal actively misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but front-loaded with the key behavior and contains genuinely useful operational information. Some details about encryption and AI training are contextually relevant but not strictly necessary for invoking the tool, so it is not maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the asynchronous nature, accepted file formats, return value (job_id plus document IDs), and the correct follow-up calls (get_job_status, then download_redacted). Since there is no output schema, this return-value guidance is essential and is fully covered. The input schema already documents all parameters in depth, so nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already provides detailed, meaningful descriptions for every parameter including idempotency behavior, exclusions, and retention. The tool description adds overall workflow context but not much parameter-level meaning beyond what the schema already states, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Start a redaction job and return immediately without waiting.' It clearly distinguishes this tool from redact_pdf_and_wait and describes what the operation does, including the permanent deletion behavior. The scope and behavior are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to prefer redact_pdf_and_wait unless you need parallel jobs or want to poll on your own schedule, naming the alternative and the conditions for choosing this tool. It also gives concrete input guidance: pass images directly, do not convert them to PDF first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redact_pdf_and_waitRedact a PDF (upload, wait, return the redacted file)A
Destructive

Redact a PDF, photo or screenshot and wait for the finished file. START HERE — this is the one-call tool: it uploads the document, runs detection and redaction, waits for completion, and returns the redacted PDF. Permanent, irreversible redaction: the sensitive text is deleted from the file, not hidden behind a black rectangle, so it cannot be recovered by copy-paste, "remove object", or text extraction. Handles scanned documents via OCR and detects PII in 100+ languages. Documents are processed on Microsoft Azure in the EU and Switzerland, encrypted in transit and at rest, never used to train AI models, and the original is deleted after processing.

Accepts PDF, JPEG and PNG. Pass a photo or screenshot directly; do NOT convert it to a PDF first, that is handled for you and the output comes back as a redacted PDF either way.

Use it whenever someone wants PII, personal data, names, emails, phone numbers, addresses, bank details or card numbers removed from a document before sharing, filing, publishing or sending it to a third party — including GDPR/HIPAA/FOIA workflows. Scanned pages, phone photos of documents and screenshots all work.

Typical redaction takes 10-60 seconds; this tool blocks until then. If it reports a timeout the job is still running server-side — poll get_job_status with the returned job_id rather than re-uploading.

Requires an API key. If none is configured, call try_demo with the user's file first — it redacts the first page with no key — then ask the user for a key. A free account gets its first document (up to 5 pages) redacted in full with no card, so the key costs nothing to obtain.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument.
retentionNo"ephemeral" (default) deletes the original after processing and keeps the output only briefly. "studio" keeps the original and the detected masks so a human can review and adjust them at redact-pdf.ai before exporting — use it for high-stakes documents where a person should sign off.
output_pathNoWhere to write the redacted PDF on this machine. Defaults to the input path with a "-redacted" suffix, next to the original. Output is always a PDF, so an image input produces a .pdf file. The original file is never modified.
pii_categoriesNoWhich entity types to redact. OMIT this to use the account defaults, which is usually what the user wants — do not pass an empty list, which would mean "redact nothing" and return an unredacted file. Valid values: Person, Email, PhoneNumber, Address, Organization, Date, IBAN, CreditCard.
idempotency_keyNoOptional. By default a key is derived from the file bytes and settings, so repeating an identical call returns the SAME job instead of redacting (and billing) twice. Pass a distinct value here only when you deliberately want a second, separate redaction of the same document.
timeout_secondsNoHow long to wait for completion, in seconds (default 300, max 900). On timeout the job keeps running server-side and can be resumed with get_job_status.
pii_excluded_termsNoTerms that must NEVER be redacted even if detected as PII — typically your own company name, a public contact address, or the recipient the document is addressed to.
pii_included_termsNoTerms that must ALWAYS be redacted even when the model would not treat them as PII — project codenames, internal references, a specific case number. Matched whole-word and case-insensitive. Wins over excluded terms on conflict.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds substantial behavioral context: permanent irreversible redaction (not a black rectangle), OCR for scanned docs, 100+ languages, Azure EU/Switzerland processing, encryption, original deletion, and blocking behavior with 10-60s typical wait. It also discloses timeout behavior and that the job continues server-side. The only minor gap is that it doesn't explicitly state the output format beyond 'redacted PDF', but the schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every section earns its place: the opening sentence front-loads the core purpose, the irreversibility warning is critical for a destructive tool, the image-input note prevents a common mistake, and the API-key fallback routing is essential. It is somewhat dense and could be tightened, but it is well-structured with clear paragraphs and no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive, blocking tool with 8 parameters and no output schema, the description covers all the critical context an agent needs: what it does, when to use it, what happens on timeout, how to handle missing API keys, privacy/security posture, and parameter semantics. The absence of an output schema is compensated by the description's clear statement that it returns the redacted PDF and a job_id on timeout.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the default retention behavior, warns against passing an empty pii_categories list, explains the idempotency key's billing implication, and clarifies that output is always PDF even for image inputs. This goes beyond what the schema descriptions provide, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Redact a PDF, photo or screenshot and wait for the finished file') and immediately distinguishes itself as the one-call tool that uploads, detects, redacts, waits, and returns the finished file. It clearly differentiates from siblings like redact_pdf, download_redacted, and get_job_status by framing itself as the START HERE entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Use it whenever someone wants PII... removed'), explicitly says to pass images directly rather than converting to PDF, and names the alternative try_demo for the no-API-key case. It also tells the agent to poll get_job_status on timeout rather than re-uploading, which is a clear routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

try_demoTry redaction with no API key (first page of a real file, or a sample)A

Try redaction with no API key. Two modes:

  1. With a file: redacts the FIRST PAGE of the user's own PDF, photo or screenshot (5 MB max) and returns which categories of personal data were found on it, plus a link to the redacted page that stays valid for 14 days. Nothing is stored beyond that page and the original is deleted after processing. Use this to show a user real output on their own document before they sign up. Only the first page is redacted; for the whole document use redact_pdf_and_wait with a key.

  2. Without a file: runs the built-in synthetic-PII sample to confirm connectivity. Never touches user data.

Both cost nothing. When the user wants the rest of the document, tell them a free account gets its first document (up to 5 pages) redacted in full with no card, then ask for the key.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_urlNoPublic http(s) URL of the file to redact. PDF, JPEG and PNG are all accepted — no need to convert an image first. The server downloads it, redacts it, and does not keep it.
filenameNoFilename for the document, including its extension (e.g. "contract.pdf", "receipt.png"). Determines how the file is interpreted.
file_pathNoAbsolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument.
file_base64NoThe document encoded as base64. PDF, JPEG and PNG are all accepted. Use file_url instead when you have one — base64 is much larger to pass around.
pii_categoriesNoWhich entity types to redact. OMIT this to use the account defaults, which is usually what the user wants — do not pass an empty list, which would mean "redact nothing" and return an unredacted file. Valid values: Person, Email, PhoneNumber, Address, Organization, Date, IBAN, CreditCard.
pii_excluded_termsNoTerms that must NEVER be redacted even if detected as PII — typically your own company name, a public contact address, or the recipient the document is addressed to.
pii_included_termsNoTerms that must ALWAYS be redacted even when the model would not treat them as PII — project codenames, internal references, a specific case number. Matched whole-word and case-insensitive. Wins over excluded terms on conflict.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description adds valuable behavioral context: only the first page is redacted, the original is deleted after processing, nothing is stored beyond that page, the link stays valid for 14 days, and the no-file mode never touches user data. It also clarifies that both modes cost nothing. This goes beyond the annotations, though it doesn't detail every edge case (e.g., what happens on failure).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with numbered modes, clear bullets, and front-loaded purpose. Every sentence earns its place: it covers the two modes, the key limitations (first page only, 5 MB max, 14-day link), the deletion behavior, and the follow-up action for the agent. It is appropriately sized for a tool with 7 parameters and two distinct usage modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (two modes, 7 optional parameters, no output schema), the description is remarkably complete. It tells the agent what the tool does, when to use it, what the limitations are, what happens to the data, and what to tell the user afterward. The absence of an output schema is compensated by the description's explanation of what is returned (categories found, link to redacted page).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds meaningful context beyond the schema: it explains the two modes (file vs no-file), clarifies that pii_categories should usually be omitted to use account defaults, and warns against passing an empty list. It also gives practical guidance on file_url vs file_base64 and file_path. This is more than the baseline 3, though the schema still carries most of the parameter-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Try redaction with no API key' and explains two distinct modes (with a file, without a file). It names the specific resource (first page of a PDF/photo/screenshot or built-in sample) and differentiates itself from the sibling tool redact_pdf_and_wait by explicitly noting that only the first page is redacted here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use this to show a user real output on their own document before they sign up, and use redact_pdf_and_wait with a key for the whole document. It also explains the no-file mode for confirming connectivity and tells the agent what to do when the user wants the rest of the document (tell them about the free account and ask for the key).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.1
    • Changeddownload_redacted1 field changed
      • changedInput schema / properties / output_path / description
        Previous value: -"Where to write the redacted PDF on this machine. Defaults to the input path with a \"-redacted\" suffix, next to the original. The original file is never modified."New value: +"Where to write the redacted PDF on this machine. Defaults to the input path with a \"-redacted\" suffix, next to the original. Output is always a PDF, so an image input produces a .pdf file. The original file is never modified."
    • Changedredact_pdf1 field changed
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the PDF (or JPEG/PNG) on this machine. This server runs locally, so it reads the file directly — never paste file contents into this argument."New value: +"Absolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument."
    • Changedredact_pdf_and_wait2 fields changed
      • changedInput schema / properties / file_path / description
        Previous value: -"Absolute path to the PDF (or JPEG/PNG) on this machine. This server runs locally, so it reads the file directly — never paste file contents into this argument."New value: +"Absolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument."
      • changedInput schema / properties / output_path / description
        Previous value: -"Where to write the redacted PDF on this machine. Defaults to the input path with a \"-redacted\" suffix, next to the original. The original file is never modified."New value: +"Where to write the redacted PDF on this machine. Defaults to the input path with a \"-redacted\" suffix, next to the original. Output is always a PDF, so an image input produces a .pdf file. The original file is never modified."
    • Changedtry_demo8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / file_base64
        Added value: +{
        +  "description": "The document encoded as base64. PDF, JPEG and PNG are all accepted. Use file_url instead when you have one — base64 is much larger to pass around.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_path
        Added value: +{
        +  "description": "Absolute path to the file on this machine. PDF, JPEG and PNG are all accepted — pass an image directly rather than converting it first. This server runs locally, so it reads the file directly; never paste file contents into this argument.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / file_url
        Added value: +{
        +  "description": "Public http(s) URL of the file to redact. PDF, JPEG and PNG are all accepted — no need to convert an image first. The server downloads it, redacts it, and does not keep it.",
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Filename for the document, including its extension (e.g. \"contract.pdf\", \"receipt.png\"). Determines how the file is interpreted.",
        +  "type": "string"
        +}
      • addedInput schema / properties / pii_categories
        Added value: +{
        +  "description": "Which entity types to redact. OMIT this to use the account defaults, which is usually what the user wants — do not pass an empty list, which would mean \"redact nothing\" and return an unredacted file. Valid values: Person, Email, PhoneNumber, Address, Organization, Date, IBAN, CreditCard.",
        +  "items": {
        +    "enum": [
        +      "Person",
        +      "Email",
        +      "PhoneNumber",
        +      "Address",
        +      "Organization",
        +      "Date",
        +      "IBAN",
        +      "CreditCard"
        +    ],
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / pii_excluded_terms
        Added value: +{
        +  "description": "Terms that must NEVER be redacted even if detected as PII — typically your own company name, a public contact address, or the recipient the document is addressed to.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / pii_included_terms
        Added value: +{
        +  "description": "Terms that must ALWAYS be redacted even when the model would not treat them as PII — project codenames, internal references, a specific case number. Matched whole-word and case-insensitive. Wins over excluded terms on conflict.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 6 tool updatesv1.0.0
    • First observeddownload_redacted
    • First observedget_account_status
    • First observedget_job_status
    • First observedredact_pdf
    • First observedredact_pdf_and_wait
    • First observedtry_demo

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation4/5

Most tools have clearly distinct purposes: account status, demo, sync redaction, async redaction, status polling, and download. The only real overlap is between redact_pdf_and_wait and redact_pdf, but the descriptions strongly differentiate them by blocking vs. asynchronous behavior.

Naming Consistency4/5

Tool names generally follow a verb_noun snake_case pattern (get_account_status, get_job_status, download_redacted). The exceptions are redact_pdf_and_wait, which uses a phrase suffix, and try_demo, which is vaguer than the rest, but the overall convention is consistent.

Tool Count5/5

Six tools is well-scoped for the service: authentication status, demo, synchronous redaction, asynchronous redaction, job status, and result download. Each tool earns its place and there is no obvious redundancy or bloat.

Completeness5/5

The tool set covers the full workflow: check credentials, try without a key, submit redaction synchronously or asynchronously, poll progress, and download the finished file. There are no dead ends for the core use case, and both fast and batched workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents and users to process documents through natural language, supporting PDF operations like text extraction, redaction, splitting, form filling, annotations, and content search.
    42 npm
    62
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Redacts PII from LLM traces and tool payloads before they leave review, enabling PII scanning, payload redaction, sensitive field classification, privacy receipts, and trace audit exports.
    -