Blackout

ai.thrainPublished by thrain.aiv1.3.0Updated Oct 24, 2026

Permanent local PDF redaction: text is removed and verified gone, not covered. No uploads.

VerifiedSTDIODesktop onlyFiles & StorageSecurity & Monitoring

Overview

AI-generated overview

A local MCP server that permanently redacts PDFs by removing text and verifying it is gone, without uploading files.

What you can do
Redact a PDF by detecting Social Security numbers, emails, phone numbers and card numbers, or by custom terms and hand-drawn boxes, and export a flattened copy where the text is actually removed rather than covered. Check a PDF to confirm no extractable text remains after redaction. Both tools re-extract text from the file they wrote and fail rather than return a document that still has a text layer.
When to use it
Use it when an assistant needs to produce a genuinely redacted PDF, for example before sharing a filing or form containing personal data, and a drawn black rectangle would not be enough because the underlying text stays selectable.
Requirements
Runs as a local process via the npm package @thrain/blackout-mcp over stdio. No accounts, API keys, environment variables or headers are declared, and the server makes no network calls.
Before you install
Redaction rewrites the PDF: the exported file is rasterized and its original text layer is discarded, so the output is no longer searchable or copyable and the source file should be kept. The tools write new files to disk.

Installation

In SourceWeft

  1. Open Blackout in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[Blackout]

Blackout

True PDF redaction, entirely in your browser.
blackout.thrain.ai


Blackout finds Social Security numbers, emails, phone numbers and card numbers in a PDF, lets you search custom terms or draw boxes by hand, and exports a flattened PDF where the redacted text is actually gone — not hidden under a rectangle.

It runs in three places, all on the same engine: the browser app, a CLI, and an MCP server.

bash
npx @thrain/blackout redact filing.pdf --detect ssn,email --out clean.pdf

How it works

  1. Nothing leaves your device. Rendering (pdf.js), detection, and export (pdf-lib) all run client-side. Load the page, go offline, it still works.
  2. Redaction is real. Export rasterizes each page and burns the boxes into the pixels, then rebuilds the PDF from those images. The original text layer is discarded — copy-paste and text extraction recover nothing.

Develop

bash
npm installnpm installnpm run dev         # local dev servernpm run build       # type-check + production build to dist/npm run build:agent # type-check + bundle the CLI and MCP server to packages/
npm run smoke              # headless browser end-to-end testnpm run smoke:cli          # CLI end-to-end testnpm run smoke:mcp          # MCP server end-to-end testnpm run smoke:agent-dist   # the same two, against the built bundles
node scripts/make-test-pdf.mjs out.pdf 12           # fixture with fake PIInode scripts/test-worker.mjs                        # license worker testsnode scripts/visual-check.mjs [test.pdf] [outdir]   # screenshot spot-check

The browser smoke script needs a Chrome/Chromium binary; set CHROME_BIN if yours isn't in the default Playwright cache location. Every smoke test makes the same central assertion — that the exported PDF contains zero extractable text — because that assertion is the entire product, and it has to hold on every path that ships, not just the one that is easy to check.

Architecture

  • Engine (src/pdf/) — detection, mark ordering, and the rasterise-and-burn export. Platform-agnostic: its only contact with the outside world is src/pdf/platform.ts, which supplies a canvas. src/platform/browser.ts backs it with a DOM canvas, src/platform/node.ts with Skia. There is exactly one redaction implementation, so the browser and the CLI cannot drift.
  • Site — static React app, deployed to GitHub Pages by .github/workflows/deploy.yml on every push to main.
  • CLI and MCP server (src/agent/) — thin non-interactive wrappers over the engine, bundled into packages/blackout and packages/blackout-mcp.
  • License worker (worker/) — a Cloudflare Worker that verifies Stripe checkout sessions and mints signed license tokens; the app verifies them with an embedded public key. Deployed by .github/workflows/deploy-worker.yml.

For agents

An agent asked to redact a PDF will otherwise write a script that draws a black rectangle over text that stays selectable underneath. Two form factors exist so that "redact this PDF" can resolve to a tool that does it correctly:

Both verify their own output before returning: they re-extract text from the file they just wrote and fail rather than hand back a document that still has a text layer. Neither makes a network call, including the licence check — so nothing leaves the machine at all.

License

Apache-2.0 © Thrain LLC. The "Blackout" name and logo are trademarks of Thrain LLC (see NOTICE) — fork freely, but ship your fork under your own name.

Source: README.md at commit 1324a22

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.3.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts