Vexa
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
作者提供的说明(英文原文)
Auto-detects and obfuscates PII (IPs, emails, API keys, names) so Claude never sees real client data
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 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": "your-value",
"REDACT_DATA_DIR": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add redact --env REDACT_AUDIT_LOG=your-value --env REDACT_DATA_DIR=your-value -- npx -y @mattzam/redact-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"redact": {
"command": "npx",
"args": [
"-y",
"@mattzam/redact-mcp"
],
"env": {
"REDACT_AUDIT_LOG": "your-value",
"REDACT_DATA_DIR": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"redact": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mattzam/redact-mcp"
],
"env": {
"REDACT_AUDIT_LOG": "your-value",
"REDACT_DATA_DIR": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
REDACT_AUDIT_LOG envREDACT_DATA_DIR env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 r3352 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(2.0.4)于8个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Vexa, emailmd, MCP WhatsApp Cloud
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.
MCP server for WhatsApp Cloud API (Meta) — messages, media, and templates via Graph API
按原文从作者的仓库复制。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只显示了开头部分;其余内容请在仓库中阅读