{"_id":"@thrain/blackout-mcp","_rev":"10-3e0d0103630252630c9d81953991dff9","name":"@thrain/blackout-mcp","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"@thrain/blackout-mcp","version":"1.0.0","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"MIT","_id":"@thrain/blackout-mcp@1.0.0","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"bec3bb40044eece03c4159ee993538d25a5e098a","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.0.0.tgz","fileCount":4,"integrity":"sha512-xEmkgRFBAZmMDMISbrNiTx9/cVVycNhfSwqKtGKp+P5LbeOUygNGotDvFNgJ6a/0jkEZXCjwyZnaluXqD4VouQ==","signatures":[{"sig":"MEYCIQCUrwYethIIW1Y8ReG+gcCdue5PANXw5HWXAnB1WzqDRAIhAMhUENuJ3/N+jXuLmD7+Eo7zCOrEkYdXTSv25ZekSs0R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36187},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"84eb6cb6c631dccc34dd99bec9fed765afda09f0","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"deprecated":"Reports a misleading error when a Pro license token is invalid — upgrade to 1.2.0","repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.0.0_1785096665019_0.266783704648752","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@thrain/blackout-mcp","version":"1.0.1","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"MIT","_id":"@thrain/blackout-mcp@1.0.1","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"910acb26c5d447ce104d95c94adca04e0ff50a55","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.0.1.tgz","fileCount":4,"integrity":"sha512-p5M5RlZSm0e5PyCNq7T32ZrOm2WJnuztzNp+xJIcjbXLQYaypjHdEMOR4Gmk7pMg7XWMqrlsDGldPtLHQlHL6A==","signatures":[{"sig":"MEUCIADh7ZM1/YB0sxqoSL/x60ttBephVvtiGZTK+O4uoIARAiEA4V0KNVJyNVrjBB1X0BHgcHovCLI69sv/QnMlSAR1Fto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36222},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"84eb6cb6c631dccc34dd99bec9fed765afda09f0","mcpName":"ai.thrain/blackout","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"deprecated":"Reports a misleading error when a Pro license token is invalid — upgrade to 1.2.0","repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.0.1_1785097438174_0.1597254164545221","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@thrain/blackout-mcp","version":"1.1.0","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"MIT","_id":"@thrain/blackout-mcp@1.1.0","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"06511a5353e4fd1bf332b1fb8b3f811e0b46f699","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.1.0.tgz","fileCount":4,"integrity":"sha512-UvVAHEKnAcdxy0oIzBipGD4mvPeqMi5k/4oG51/CtrklpuLwgHGOMYB8llASPPw2CEallmSXU5bSOyVQw3Pq3A==","signatures":[{"sig":"MEQCIB30V4/FapmT4jPVTpTGOuNFv9eavIKlH9RBcLMx/D0QAiAa/P9BGEPEH18lOzPIT4ozSIKSa4K0mQ2fuNfmDmAOUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36933},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"0ede63fe428186c954f4c3935ab180a29a0b77eb","mcpName":"ai.thrain/blackout","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"deprecated":"Reports a misleading error when a Pro license token is invalid — upgrade to 1.2.0","repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.1.0_1785107660065_0.8486911631129568","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@thrain/blackout-mcp","version":"1.2.0","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"MIT","_id":"@thrain/blackout-mcp@1.2.0","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"313441cc839ff00f53b5cd9a9e0792068c1b2d3b","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.2.0.tgz","fileCount":4,"integrity":"sha512-ukYslvbu526qySt++XNKjh3ERQPtb8fbu9qV/UXYl2lIkAvlXcWv5Ra0JmXDFY5imBPYLvESQMoovor/r8Ud4g==","signatures":[{"sig":"MEUCIQCyODzA6Yy6YOnTkBi/rSornau0pZcdRVpUiWBObBq4qQIgNjTILe5fn0ex3stKbfNVIK3hn6iwcJxMU9JnsZOFM60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37995},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"fb865ba7fb1da0a6f045ea2dc552b330c9479139","mcpName":"ai.thrain/blackout","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"deprecated":"Injects non-JSON lines into the MCP stdout/JSON-RPC stream on PDFs that provoke pdf.js warnings — upgrade to 1.3.0","repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.2.0_1785559697506_0.7555967727287227","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@thrain/blackout-mcp","version":"1.3.0","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"MIT","_id":"@thrain/blackout-mcp@1.3.0","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"49a7f87c63f2b5329d31104fa3d9cbc87510e86e","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.3.0.tgz","fileCount":4,"integrity":"sha512-IKq2ZQL4PzPji2Ty2IV+XHcPVoQM9Y6mUt9OC5vH6oTP2l+tKsARDy/a0jOGPLDLcOQ7oF2ujVt3DweY3J4rnQ==","signatures":[{"sig":"MEQCIC8n5+Nn3hezuQhzUCh+hp1U3FIQsLvke+Ur+hgjpog+AiBGj9NIscINXggOOoAtOPXSPKxtZUCMAmrgZXZA5ZHtAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39097},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"d8f228f1698fe6eb87f6579e790a3c0eae922378","mcpName":"ai.thrain/blackout","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.3.0_1785638413957_0.7433564078728625","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@thrain/blackout-mcp","version":"1.3.1","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"Apache-2.0","_id":"@thrain/blackout-mcp@1.3.1","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"homepage":"https://blackout.thrain.ai","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"dist":{"shasum":"d68eaa64a5d9076237698c521327e199476645bc","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.3.1.tgz","fileCount":5,"integrity":"sha512-9mf7Pv9EiDjDkzAOJuIh/pI8hqXYCja9V7qkoWTiKxzY/CQ6dLFHd3/TgZECyziDMpQEpaZFfRHHosAajsGH5Q==","signatures":[{"sig":"MEYCIQDRErnnjRCpAoIERneG8rjEFrg81lt/TNSRTLJL68lOHAIhALPYdVigj4Uwfp5Ikw0/VN3D9pNpQcMWn54q8pT3lHBj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49623},"type":"module","engines":{"node":">=20.16.0"},"gitHead":"154888cb43b7806b77574012ee7bb69b882ea0d1","mcpName":"ai.thrain/blackout","_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"repository":{"url":"git+https://github.com/thrain-ai/blackout-pdf.git","type":"git","directory":"packages/blackout-mcp"},"_npmVersion":"11.16.0","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","@napi-rs/canvas":"^0.1.100","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blackout-mcp_1.3.1_1786163392329_0.6706807231803917","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@thrain/blackout-mcp","version":"1.4.0","mcpName":"ai.thrain/blackout","description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","license":"Apache-2.0","type":"module","publishConfig":{"access":"public"},"bin":{"blackout-mcp":"dist/mcp.mjs"},"engines":{"node":">=20.16.0"},"keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"homepage":"https://blackout.thrain.ai","repository":{"type":"git","url":"git+https://github.com/thrain-ai/blackout-pdf.git","directory":"packages/blackout-mcp"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","@napi-rs/canvas":"^0.1.100","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","zod":"^4.4.3"},"gitHead":"98274329d359174e163611fc35fe69041e0991d4","_id":"@thrain/blackout-mcp@1.4.0","bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-q7T9gJ6UqzUHnJT5mJbGOSQzK38JjCEqtrpa6p7bQCcZoC12I4gQrjj9Uvz+VWsJksnvJY5u3DD+YY39g+xjCQ==","shasum":"8cb5f56cc187fd1a557b8e89c14799c159aa1002","tarball":"https://registry.npmjs.org/@thrain/blackout-mcp/-/blackout-mcp-1.4.0.tgz","fileCount":5,"unpackedSize":53850,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCrb5BL+FhbJ6GqZWB1fDuX+1JIXL1XSJykB7f+KPthHAIgVW/PkXo8eXPgAWCcGv0aflXSNAFBj8m7pxUbOTufsGU="}]},"_npmUser":{"name":"btbrt","email":"baileyrthomp@gmail.com"},"directories":{},"maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/blackout-mcp_1.4.0_1786166719043_0.7741007276189427"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-26T20:11:04.807Z","modified":"2026-08-08T05:25:19.402Z","1.0.0":"2026-07-26T20:11:05.175Z","1.0.1":"2026-07-26T20:23:58.301Z","1.1.0":"2026-07-26T23:14:20.208Z","1.2.0":"2026-08-01T04:48:17.635Z","1.3.0":"2026-08-02T02:40:14.098Z","1.3.1":"2026-08-08T04:29:52.474Z","1.4.0":"2026-08-08T05:25:19.193Z"},"bugs":{"url":"https://github.com/thrain-ai/blackout-pdf/issues"},"author":{"name":"Thrain LLC","email":"support@thrain.ai"},"license":"Apache-2.0","homepage":"https://blackout.thrain.ai","keywords":["mcp","modelcontextprotocol","redact","redaction","pdf","pii","foia","privacy"],"repository":{"type":"git","url":"git+https://github.com/thrain-ai/blackout-pdf.git","directory":"packages/blackout-mcp"},"description":"MCP server for permanent PDF redaction. Exposes redact_pdf and check_pdf; rasterises and rebuilds each page so redacted text is gone, not covered. Never uploads the document.","maintainers":[{"name":"btbrt","email":"baileyrthomp@gmail.com"}],"readme":"# @thrain/blackout-mcp\n\nAn MCP server that permanently removes text from PDFs.\n\nAsk a model to \"redact the SSNs out of this PDF\" and it will usually write a\nPyMuPDF or pikepdf script that draws a black rectangle over the text. The\nrectangle is an overlay; the characters stay in the content stream underneath,\nrecoverable by any text extractor. The document looks redacted and is not. That\nis how redaction failures leak.\n\nThis server does it correctly: it rasterises each page, burns the bars into the\npixels, and rebuilds the file from the images, so the text layer is gone. It\nthen reads its own output back and verifies that zero characters remain\nextractable — and returns an error rather than a file if that check fails.\n\nIt runs entirely on the local machine. Nothing is uploaded, and there is no\nnetwork call anywhere in the path — which makes \"the document never leaves your\ndevice\" literally true, in a way no hosted redaction API can claim. For an agent\nhandling a file full of Social Security numbers, that is the whole argument.\n\n## Install\n\n```json\n{\n  \"mcpServers\": {\n    \"blackout\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@thrain/blackout-mcp\"]\n    }\n  }\n}\n```\n\nFor unlimited page counts, add your license:\n\n```json\n{\n  \"mcpServers\": {\n    \"blackout\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@thrain/blackout-mcp\"],\n      \"env\": { \"BLACKOUT_LICENSE\": \"<token>\" }\n    }\n  }\n}\n```\n\n### Where to find your token\n\nBuy Pro at [blackout.thrain.ai](https://blackout.thrain.ai) ($25, one-time). Once\nPro is active, the Pro screen has a **\"Use Blackout from the terminal or an AI\nagent\"** section — expand it to copy your token, or the ready-made\n`export BLACKOUT_LICENSE=…` line.\n\nThe same token works in the browser, the CLI, and here. It is verified offline\nagainst an embedded public key, so licensed runs still make no network calls.\nTreat it like a password.\n\n## Tools\n\n### `check_pdf`\n\nRead-only. Reports what would be redacted without writing anything.\n\n| Argument | Type | Notes |\n|---|---|---|\n| `path` | string | Absolute path to a PDF on this machine |\n| `detect` | string[] | `ssn`, `card`, `email`, `phone`. Omit for all |\n| `terms` | string[] | Literal strings to match, case-insensitive |\n\n### `redact_pdf`\n\nWrites a redacted copy. Never modifies the input.\n\n| Argument | Type | Notes |\n|---|---|---|\n| `path` | string | Absolute path to a PDF on this machine |\n| `output_path` | string | Defaults to `<input>-redacted.pdf`; must not be the input |\n| `detect` | string[] | `ssn`, `card`, `email`, `phone`. Omit for all |\n| `terms` | string[] | Literal strings to match, case-insensitive |\n| `overwrite` | boolean | Allow replacing an existing output. Default `false` |\n| `license` | string | Pro license token; falls back to `BLACKOUT_LICENSE` |\n\nBoth return a human-readable summary followed by a JSON block with per-category\ncounts, page count, `extractableChars` (`0` on every successful redaction), and\n`licenseState` — `\"none\"`, `\"invalid\"`, or `\"valid\"`.\n\nIf a token is supplied and fails verification, `redact_pdf` on an over-limit\ndocument reports `LICENSE_INVALID` rather than the generic page-limit error, so\nan agent can tell \"this needs a license\" apart from \"this license is wrong\" and\nsay something useful to the person who owns it.\n\n## Limits\n\nFree up to 10 pages per document. A Pro license ($25, one-time) removes the\nlimit and is the same license the browser app uses.\n\n## See also\n\n- [`@thrain/blackout`](../blackout) — the same engine as a CLI\n- <https://blackout.thrain.ai> — the browser app, with exemption codes and a\n  redaction log\n\n---\n\nThrain LLC · support@thrain.ai\n","readmeFilename":"README.md"}