Atlas / MCP servers / moxno / moxno-privacyscrubber

moxno-privacyscrubberBLOCK

mcp/moxno/privacyscrubber-mcp

Zero-Trust PII & secrets redaction MCP server for Cursor & Claude. Lightweight, zero-dependency Presidio alternative for Node.js / TypeScript.

Verdict
BLOCK
Grade
D
Trust score
68 /100
Exposed tools
25 20r · 4w · 1d
Transport
stdio
License
NOASSERTION
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/@privacyscrubber/mcp-server) [](https://www.npmjs.com/package/@privacyscrubber/mcp-server) [](https://www.npmjs.com/package/@privacyscrubber/sdk) [](https://www.npmjs.com/package/@privacyscrubber/sdk) [](https://www.npmjs.com/package/@privacyscrubber/sdk) [](https://opensource.org/licenses/MIT) [](https://zenodo.org/records/22058770) [](https://osf.io/5byjf/) [](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=7335581) [](https://datatracker.ietf.org/doc/draft-sibiryakov-ztds-protocol/) [](https://ztds.ai/registry/#privacyscrubber-mcp) [](https://smithery.ai/servers/privacyscrubber/pii-masking-mcp) [](https://cursor.directory/plugins/privacyscrubber-mcp) [](https://glama.ai/mcp/servers/moxno/privacyscrubber-mcp) [![TensorBlock MCP Index](https://img.shields.io/badge/TensorBlock-Indexed%20MCP-F

Read from source at commit d288f8be9f44OBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add mcp-server --env PRIVACYSCRUBBER_KEY=${PRIVACYSCRUBBER_KEY} -- npx -y @privacyscrubber/[email protected]
03

Exposed tools (25)

20 read · 4 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
agentic_guard_instructionsreadZero-Trust Agentic Guard instructions for autonomous AI agents (Cursor, Windsurf, Claude Code).
audit_contextreadSTEP 0 (Pre-Flight): Non-destructive security inspection of raw prompts or document chunks before sending to LLMs. Evaluates PII, secrets, risk severity (CLEAN, LOW, MODERATE, CRITICAL), and triggered regulatory frameworks (GDPR, HIPAA, SOC 2, PCI DSS) with zero text mutation.
audit_directory_for_piireadScans a local directory for leaks of secrets, keys, and PII. Returns a summary report. Use this tool for Security Auditing.
check_statusreadReturns the current PrivacyScrubber MCP tier, session usage, available profiles, and PRO upgrade instructions. Call this to see your license status or get setup help.
create_agent_ruleswriteZero-Trust Agentic Guard: Scaffolds CISO-grade AI Agent Rules in workspace (.cursorrules, .windsurfrules, CLAUDE.md, .github/copilot-instructions.md, .clinerules). Guides autonomous agents to route all file reads, git diffs, and shell commands through PrivacyScrubber Guard tools.
create_default_configwriteCreates a default
export_audit_logreadZero-Trust Enterprise Compliance: Exports an immutable, tamper-evident audit log in SIEM standard formats (CEF / ArcSight, RFC 5424 Syslog, JSONL, or JSON) with zero plaintext PII leakage. Can write directly to a local log file or stream.
generate_compliance_reportreadGenerates an official Zero-Trust Compliance Audit Certificate (GDPR, HIPAA, EU AI Act, SOC 2) for the current MCP session. Returns cryptographic session hash, masked entities breakdown, and compliance certification.
guard_apply_patchwriteZero-Trust Agentic Guard: Reverses token placeholders ([API_KEY_1], [SECRET_1]) in AI-generated code or text, restores authentic values from local volatile RAM, and writes real content directly to target file on disk. Remote LLM never learns actual secrets.
guard_execwriteZero-Trust Agentic Guard: Safely executes a shell/terminal command locally in isolated process, sanitizes stdout and stderr in volatile RAM, tokenizes any API keys, credentials, database URIs, or PII before sending output to LLM. Maps original values in memory for safe local restoration.
guard_git_diffreadZero-Trust Agentic Guard: Inspects unstaged or staged git diffs locally, sanitizes any newly added or modified credentials, tokens, or PII in RAM, and returns safe diff for AI commit generation or code review.
guard_rag_chunkreadZero-Trust Agentic Guard: Sanitizes an array of document chunks or knowledge base records before sending to embedding models or vector databases (Chroma, Pinecone, Qdrant). Keeps authentic data in local RAM with zero network leakage.
guard_rag_restorereadZero-Trust Agentic Guard: Re-hydrates retrieved vector search results or chunks by restoring token placeholders with authentic data from the volatile RAM session before presenting to the user.
guard_read_filereadZero-Trust Agentic Guard: Reads a sensitive local file (.env, config, credentials, source code, database dumps), sanitizes all credentials and PII in volatile RAM, and returns safe tokenized content for AI agent context.
guard_session_inforeadZero-Trust Agentic Guard: Returns diagnostic metrics on active in-memory sessions, token counts, and memory footprint with zero plaintext leakage.
guard_session_resetdestructiveZero-Trust Agentic Guard: Explicitly purges the in-memory token map for a specific session_id or all sessions upon agent task completion.
guard_unmask_argsreadZero-Trust Agentic Guard: Detokenizes parameters, JSON objects, or arguments in local RAM before dispatching to local tools or APIs without sending cleartext secrets back to the LLM.
mark_false_positivereadMarks a previously detected token as a false positive. The original plaintext value will be excluded from all future sanitize_text calls in this session. Returns the restored original value and updated ignore list size.
redact_filereadAction/Redact: In-place redaction of a local file. Replaces PII and secrets with tokens and saves the file. By default, creates a .bak backup. Use dry_run=true to test without modifying.
reveal_textreadSTEP 3: Call this last. You MUST pass your final generated response through this tool to restore tokens (e.g., [EMAIL_1]) back with the original private data from the local volatile RAM-only session map before showing it to the user.
safe_redaction_workflowreadInstructions for using the redact_file tool safely with QA checks.
sanitize_filereadReads a local file, sanitizes its contents using the selected profile, and outputs the safe version for AI analysis. Securely keeps original identifiers in memory.
scrub_filereadAlias for
scrub_textreadAlias for
secure_ai_workflowreadZero-Trust Data Sanitization workflow instruction. Use this to automatically scrub PII before processing data.
04

Trust audit

BLOCKgrade D · trust 68/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
none-observed
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (15)

HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
test-mcp-deep.js:164
text: 'const db = "postgres://admin:[email protected]:5432/prod";',
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
test-mcp-deep.js:352
input: "Production connection mysql://db_admin:P@[email protected]:3306/prod_db and secret sk-proj-49a2fb31c9a10293",
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
test-mcp-custom-rules.js:10
const validKey = "eyJ0eXBlIjoicHJvIiwiZXhwaXJlcyI6MjA5OTA2MjE3NCwiaXNzdWVkQXQiOjE3ODM3MDIxNzQsIm5vbmNlIjoiMmI4MTllN2ZmM2ZmOTFmYiJ9.ZmhaKDGf9vG0nTH0nyOy3EInsuUmzjBOk9IOyiqzt6Y5s3UG+2yRExuKBoeXWymbpJt3N
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
test-mcp.js:41
const expiredKey = "eyJ0eXBlIjoidHJpYWwiLCJleHBpcmVzIjoxNzgzMjcwMTgzLCJpc3N1ZWRBdCI6MTc4MzcwMjE4Mywibm9uY2UiOiIzYzRkYzEwNmRkOGJiZjczIn0=.Wc1cPwvRpEQxG3BarmedBYm9sUsGdwznboh8Gx3a7qQZm2I+Dha8lk1CtzmaaBt
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
test-mcp.js:54
const validKey = "eyJ0eXBlIjoicHJvIiwiZXhwaXJlcyI6MjA5OTA2MjE3NCwiaXNzdWVkQXQiOjE3ODM3MDIxNzQsIm5vbmNlIjoiMmI4MTllN2ZmM2ZmOTFmYiJ9.ZmhaKDGf9vG0nTH0nyOy3EInsuUmzjBOk9IOyiqzt6Y5s3UG+2yRExuKBoeXWymbpJt3N
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
README.md:155
"Deploying database with user admin and pwd postgresql://user:[email protected]:5432/prod"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
guard_session_reset
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:196
res = requests.post("http://127.0.0.1:3100/sanitize", json={"text": prompt, "profile": "Dev"}).json()
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:200
res = requests.post("http://127.0.0.1:3100/restore", json={"text": ai_response, "tokenMap": token_map}).json()
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, mammoth, pdf-parse, xlsx
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
ps-pii-engine.cjs
ps-pii-engine.cjs
Why it matters. 1022489 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
ps-pii-engine.js
ps-pii-engine.js
Why it matters. 1025304 bytes not read
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:395
*   `command` (string, required): The shell command to execute (e.g. `cat .env`, `docker logs web`, `git diff`).
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:497
cat .env | npx ps-guard --profile dev
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.persistence · CWE-94, CWE-1427
README.md:574
# macOS / Linux — add to ~/.zshrc or ~/.bashrc
Why it matters. instructs the agent to persist itself in the user's environment

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha d288f8be9f44full audit observations/trust-audit/mcp-server/moxno__privacyscrubber-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11d288f8be9f44BLOCKD68first audit
06

Questions

What is the moxno-privacyscrubber MCP server?

Zero-Trust PII & secrets redaction MCP server for Cursor & Claude. Lightweight, zero-dependency Presidio alternative for Node.js / TypeScript.

What tools does moxno-privacyscrubber expose?

25 in total: 20 read-only, 4 that write, and 1 that can delete or overwrite (guard_session_reset). Every one is listed on this page with its risk.

Is moxno-privacyscrubber safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (68/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does moxno-privacyscrubber need?

It reads PRIVACYSCRUBBER_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does moxno-privacyscrubber run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @privacyscrubber/mcp-server at 2.3.7.

How current is this page?

The grade is for one exact copy of the source (d288f8be9f44), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement