Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Permanently redact SSNs, cards, emails, phones and custom terms from local PDFs, verified gone.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"redactpdf": {
"command": "npx",
"args": [
"-y",
"@reneturcios/redactpdf",
"mcp"
]
}
}
}在终端中运行这条命令
claude mcp add redactpdf -- npx -y @reneturcios/redactpdf mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"redactpdf": {
"command": "npx",
"args": [
"-y",
"@reneturcios/redactpdf",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"redactpdf": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@reneturcios/redactpdf",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 CloudCorpRecords 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.0)于3天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js, Docker。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Apify MCP Server
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store ⚡
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Sharing a PDF usually means trusting that whatever you blacked out on screen is actually gone. Often it is not: the text is still sitting in the file, ready to be copied out. redactpdf takes the opposite approach. It looks for sensitive text in a local PDF's text layer, writes a copy in which every matched character has been physically replaced, and then re-reads its own output to prove that nothing it was asked to remove can still be extracted. If the proof fails, you get an error instead of a file.
Four kinds of sensitive text are detected. Social Security numbers must satisfy the SSA's own validity rules (area 001-899 except 666, group 01-99, serial 0001-9999), so random digit groups in that shape are not flagged. Payment-card numbers are digit runs of 13 to 19 digits, allowing single spaces or dashes between digits, and must pass the Luhn check. Email addresses and North-American phone numbers — (ddd) ddd-dddd, ddd-ddd-dddd, ddd.ddd.dddd, or ddd ddd dddd, with an optional +1 prefix — round out the built-in categories. On top of those, terms lets you name literal strings of your own, matched case-insensitively and counted under their own key. Omit detect to run all four categories.
Detection runs per extracted string — the string operands of Tj and TJ show operators, in plain or FlateDecode content streams — so a match that is split across two string operands is not seen. That is a stated limitation of the text-layer model this tool uses, not a silent one.
check_pdf reports what would be removed without writing anything. redact_pdf writes the redacted copy — the input file is never modified — replacing each matched character with # while preserving string lengths, then verifies the result. Documents run to 10 pages free; past that, both tools ask for a licence. The licence check in this build is a format check — a token of 16 to 512 characters from [A-Za-z0-9_-] plus . separators counts as well-formed, supplied via the license argument or the BLACKOUT_LICENSE environment variable — and the over-limit error distinguishes a missing licence (LICENSE_REQUIRED) from a malformed one (LICENSE_INVALID). Encrypted PDFs, PDFs built on xref or object streams, and malformed files are reported as unsupported rather than passed over in silence.
Both tools answer with a one-line summary, a blank line, and a fenced JSON block carrying path, outputPath (null for check_pdf), pages, counts, extractableChars — for check_pdf, the characters that fall inside a detected match in the input; for a successful redact_pdf, 0 by construction — and licenseState.
npx @reneturcios/redactpdf check_pdf '{"path":"/abs/path/report.pdf"}'
npx @reneturcios/redactpdf redact_pdf '{"path":"/abs/path/report.pdf","terms":["falcon"]}' npx @reneturcios/redactpdf --version
redact_pdf writes -redacted.pdf (the input path with its .pdf suffix replaced) unless output_path says otherwise; the output may not be the input itself, and an existing output is only replaced when overwrite is true.
Exit codes: 0 on success, 1 on a runtime error (the tool's error text is printed), 2 on a usage error.
npx -y @reneturcios/redactpdf mcp
MCP client config:
{
"mcpServers": { "redactpdf": { "command": "npx", "args": ["-y", "@reneturcios/redactpdf", "mcp"] } } }
check_pdf — Report what would be redacted from a local PDF — per-category match counts — without writing anything.path (string, required) — absolute path to a PDF on this machinedetect (string array, optional) — any of ssn, card, email, phone; omit for allterms (string array, optional) — literal strings to match, case-insensitiveredact_pdf — Write a redacted copy of a local PDF with detected sensitive text permanently removed and verified gone. Never modifies the input.path (string, required) — absolute path to a PDF on this machineoutput_path (string, optional) — defaults to -redacted.pdf; must not be the inputdetect (string array, optional) — any of ssn, card, email, phone; omit for allterms (string array, optional) — literal strings to match, case-insensitiveoverwrite (boolean, optional, default false) — allow replacing an existing outputlicense (string, optional) — Pro licence token; falls back to BLACKOUT_LICENSEdocker run -i ghcr.io/cloudcorprecords/redactpdf
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/redactpdf check_pdf '{"path":"/w/report.pdf"}'
npm install
npm run build # tsc -> dist/ npm test # tsx --test test/*.test.ts (pure local, no network) npm run dev # run the CLI from source
MIT — Copyright (c) 2026 Rene Turcios