Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Auto-detects and obfuscates PII (IPs, emails, API keys, names) so Claude never sees real client data
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
REDACT_AUDIT_LOG, REDACT_DATA_DIRต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"redact": {
"command": "npx",
"args": [
"-y",
"@mattzam/redact-mcp"
],
"env": {
"REDACT_AUDIT_LOG": "ใส่ค่าของคุณ",
"REDACT_DATA_DIR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add redact --env REDACT_AUDIT_LOG='ใส่ค่าของคุณ' --env REDACT_DATA_DIR='ใส่ค่าของคุณ' -- npx -y @mattzam/redact-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"redact": {
"command": "npx",
"args": [
"-y",
"@mattzam/redact-mcp"
],
"env": {
"REDACT_AUDIT_LOG": "ใส่ค่าของคุณ",
"REDACT_DATA_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"redact": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mattzam/redact-mcp"
],
"env": {
"REDACT_AUDIT_LOG": "ใส่ค่าของคุณ",
"REDACT_DATA_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
REDACT_AUDIT_LOG envREDACT_DATA_DIR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub r3352 ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (2.0.4) เข้า registry 8 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, MCP Server Autocad Lisp Helper
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
High-precision static analysis and debug server for AutoCAD AutoLISP (.lsp) files.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
An MCP server (and Claude Code plugin) that automatically detects and obfuscates sensitive data before Claude ever sees it. Uses regex pattern matching and AI-powered Named Entity Recognition (NER) to catch IPs, hostnames, emails, API keys, person names, organization names, locations, private keys, connection strings, and more.
Built for penetration testers who need Claude's analysis capabilities without exposing client data to a third party.
Raw data with real PII ──► Regex + NER detection ──► Claude sees only fake values
│ Final report for client ◄── Real values restored ◄── /redact:export
The server maintains a bidirectional mapping table. Every sensitive value gets a consistent, deterministic fake replacement that persists across the entire session:
| Real Value | Obfuscated As | Detection |
|---|---|---|
10.50.1.100 | 198.51.100.1 | regex |
api.clientcorp.com | target-1.example.com | regex |
john.smith@clientcorp.com | user-1@example.com | regex |
AKIA3EXAMPLE... | [REDACTED_AWS_KEY_1] | regex |
James Wilson | Person_A Person_B | NER |
Microsoft | Org_A | NER |
Seattle | City_A | NER |
postgres://admin:pw@host/db | [REDACTED_CONN_STRING_1] | regex |
-----BEGIN RSA PRIVATE KEY... | [REDACTED_PRIVATE_KEY_1] | regex |
Same real value always maps to the same fake value. obfuscate(text) -> deobfuscate(result) === text is guaranteed.
claude mcp add @mattzam/redact-mcp -- npx @mattzam/redact-mcp
That's it. Claude Code will launch the server via npx on each session. The NER model (~110MB) downloads automatically on first use and is cached for subsequent runs.
To enable audit logging:
claude mcp add @mattzam/redact-mcp -e REDACT_AUDIT_LOG=true -- npx @mattzam/redact-mcp
git clone https://github.com/r3352/redact-mcp.git redact
cd redact/server npm install npm run build cd ../..
claude --plugin-dir ./redact
The plugin mode adds hooks (automatic leak detection on raw tool output) and skills (/redact:status, /redact:add, /redact:export) on top of the MCP server.
Add to your Claude Code MCP config (~/.claude/mcp.json or project .mcp.json):
{
"mcpServers": { "redact-server": { "command": "npx", "args": ["redact-mcp"], "env": { "REDACT_DATA_DIR": "/path/to/data/directory", "REDACT_AUDIT_LOG": "true" } } } }
| Variable | Default | Description |
|---|---|---|
REDACT_DATA_DIR | ./data | Directory for mapping state and audit logs |
REDACT_AUDIT_LOG | false | Set to true to enable JSONL audit logging |
Zero configuration required. Detected automatically:
| Category | Types |
|---|---|
| Network | IPv4 (private + public), IPv6, hostnames with valid TLDs, MAC addresses |
| Identity | Emails, person names (JSON context), phone numbers (US + international), SSNs |
| Secrets | AWS access keys, JWTs, Bearer tokens, API keys (context-aware), generic secrets (password=, secret=), private keys (PEM format), connection strings (postgres/mysql/redis/mongodb/amqp/mssql URIs) |
| Financial | Credit card numbers (Luhn-validated) |
| Physical | Street addresses (123 Main Street, 456 Oak Ave, etc.) |
When @huggingface/transformers is installed (included by default), the server loads Xenova/bert-base-NER (~110MB ONNX model, downloaded on first use) to detect:
| Entity Type | Example | Obfuscated As |
|---|---|---|
| Person names | James Wilson | Person_A Person_B |
| Organizations | Microsoft, Acme Corp | Org_A, Org_B |
| Locations | Seattle, New York | City_A, City_B |
NER catches entities that regex misses — names and organizations outside of JSON context, arbitrary location names, etc. Regex results always take priority when both detect the same span (regex is more precise for structured patterns).
Graceful fallback: If the model fails to load or the package is missing, the server continues in regex-only mode with no errors.
These values are never obfuscated:
localhost, 127.0.0.1, ::1, 0.0.0.0192.0.2.x (TEST-NET-1), 198.51.100.x (TEST-NET-2), 203.0.113.x (TEST-NET-3), 2001:db8:: (IPv6 docs)example.com, example.org, example.netgithub.com, npmjs.com, nodejs.org, googleapis.com, etc.burpcollaborator.net, oastify.comconsole.log, process.env, package.json, webpack.config, jest.config, tailwind.config, and 30+ other common false positivesFF:FF:FF:FF:FF:FF, 00:00:00:00:00:00The server registers 8 tools via MCP:
| Tool | Description |
|---|---|
redact_obfuscate | Auto-detect and replace all PII in text (regex + NER) |
redact_deobfuscate | Reverse all replacements back to real values |
redact_proxy_request | HTTP proxy — deobfuscates request, makes real call, obfuscates response |
redact_read_file | Read a file and return obfuscated content |
redact_add_mapping | Manually add a real-to-fake mapping |
redact_remove_mapping | Remove a mapping (fix false positives) |
redact_show_mappings | Show all current mappings grouped by type |
redact_audit_log | View recent audit log entries (requires REDACT_AUDIT_LOG=true) |
redact_proxy_request — The Key ToolFor pentest workflows, this is the critical tool. Claude calls it instead of curl/fetch:
Claude never sees the real response data. All deobfuscation and obfuscation steps are audit-logged.
redact_audit_log — Compliance Audit TrailWhen REDACT_AUDIT_LOG=true, every obfuscation and deobfuscation operation is logged to ${REDACT_DATA_DIR}/audit.jsonl. Each entry records:
obfuscate, deobfuscate, proxy_request, file_read)regex or ner)This provides a complete audit trail: what went in, what was modified, and what came out.
View entries via the redact_audit_log tool or read audit.jsonl directly:
# Last 5 entries, pretty-printed
tail -5 data/audit.jsonl | python3 -m json.tool
Security note: The audit log contains real sensitive data by design (that's its purpose — proving what was redacted). Protect it accordingly.
| Command | Description |
|---|---|
/redact:status | Show current redaction mappings grouped by type |
/redact:add | Manually add a mapping (e.g., /redact:add clientcorp.com target.example.com) |
/redact:export [output] | Deobfuscate a file for client delivery (defaults to ~/Desktop/) |
The plugin uses two hooks (automatic, no user interaction):
Bash/Read/Grep/WebFetch and the output contains known sensitive values (leak detection)Xenova/bert-base-NER runs in parallel (async), catches person/org/location entitiesexample.com for domains, 555 prefix for phones, locally-administered range for MACs${REDACT_DATA_DIR}/mappings.json with debounced writes (500ms)10.50.1.100 before 10.50.1.10)deobfuscate(obfuscate(text)) === text for all inputs. The bidirectional mapping table ensures lossless restoration.
redact/
├── .claude-plugin/plugin.json # Plugin manifest ├── .mcp.json # MCP server config (stdio transport) ├── hooks/ │ ├── hooks.json # Hook definitions │ └── scripts/ │ ├── session-start.sh # Injects redaction context on session start │ └── post-tool-scan.py # Leak detection on raw tool output ├── skills/ │ ├── status/SKILL.md # /redact:status │ ├── add/SKILL.md # /redact:add │ └── export/SKILL.md # /redact:export └── server/ ├── package.json # v2.0.0, deps: @modelcontextprotocol/sdk, @huggingface/transformers ├── tsconfig.json # ES2022, Node16 modules, strict └── src/ ├── index.ts # MCP server — 8 tools, server instructions ├── mapping-engine.ts # Bidirectional mapping, async obfuscate/deobfuscate, audit integration ├── pattern-detector.ts # 19 regex patterns + async NER merge ├── fake-generator.ts # Deterministic counter-based fake value generation ├── ner-detector.ts # Lazy-loaded HuggingFace NER with graceful fallback ├── audit-logger.ts # JSONL append logger, serialized write queue └── persistence.ts # JSON state file with debounced writes
Claude Code ──stdio──► MCP Server (index.ts)
│ CallToolRequest │ ┌───────┴───────┐ │ MappingEngine │ └───────┬───────┘ │ ┌─────────────┼─────────────┐ │ │ │ detectPatterns NER detect AuditLogger (regex, sync) (async) (JSONL, async) │ │ │ └─────────────┼─────────────┘ │ merge + dedupe │ apply mappings (longest-first) │ return to Claude
cd server
npm install
npm run build
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | node dist/index.js
node -e ' const { MappingEngine } = await import("./dist/mapping-engine.js"); const engine = new MappingEngine("/tmp/redact-dev"); await engine.init(); console.log(await engine.obfuscate("Email john@acme.com from 10.0.0.1")); '
@huggingface/transformers + Xenova/bert-base-NER. Catches person names, orgตัดมาแค่ช่วงต้น อ่านต่อใน repo