Mask PII in outbound MCP tool-call arguments, unmask the results. Indian identifiers included.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Stop Indian PII from ever reaching an LLM.
Aadhaar, PAN, GSTIN, UPI, IFSC, ABHA, Indian names and addresses β detected and replaced with reversible, typed placeholders before a prompt leaves your process, restored in the response. 28 entity types, checksum-validated where a public checksum exists, MIT-licensed, runs entirely on your own infrastructure.
India's DPDP Act sets a compliance deadline of 13 May 2027, with penalties of up to βΉ250 crore for a breach where the required safeguards weren't in place. Every prompt sent to an LLM provider is a potential data-sharing event β and general-purpose PII tools weren't built to recognize Aadhaar, PAN, GSTIN, UPI VPAs, IFSC codes, ABHA health IDs, or Indian names and addresses reliably. Presidio already owns generic PII and is more mature everywhere else; MaskFlow exists specifically to close that gap, with accuracy that's measured and published, not asserted. See MaskFlow vs. alternatives.
For a one-line wrapper around your actual LLM call, or session-scoped masking across a multi-turn
agent (same value β same token for as long as the session is open), see
packages/maskflow-sdk/README.md.
Span. Start/end offsets, entity type, confidence, which recognizer
produced it, whether a checksum validated it, and a human-readable explanation trail. Run
maskflow explain "<text>" (from maskflow-cli) to see that trail for any input, span by span
β including near-misses that fell just below threshold and what config change would catch them.<AADHAAR_1>, <EMAIL_1>, ... β the
same value gets the same token within a session, and if the input text already contains
something that looks like a placeholder, a nonce suffix (<AADHAAR_1_a4f9>) is used instead so
a real placeholder is never ambiguous with attacker-controlled input.maskflow-pack-intl and maskflow-pack-india are just two
"maskflow.recognizers" entry-point plugins sharing one memoised analysis context β write and
register your own the same way. See docs/custom-recognizers.md.Regex/checksum-based recognizers can also scrub your application's own logging calls β not just
text passed through mask() β closing the gap where a raw value gets logged before it's ever
masked:
Opt-in only; importing maskflow_core never touches global logging state on its own. It doesn't
cover NER-only entity types (bare names/addresses) or exc_info tracebacks β see
docs/logging.md for the exact boundary.
Going forward, mask() keeps PII out of your prompts. But the DPDP audit asks a backward-looking
question first: what has this system already sent to a third-party LLM? maskflow scan answers
it. It reads your historical LLM traffic β a JSONL/CSV export, a recursive directory, an S3
archive, a Postgres table, or the Langfuse / Helicone / LangSmith API β streams it through the
same detection with bounded memory (parallel, resumable), and writes one self-contained HTML
report: a single headline number, breakdowns by entity type / provider / model / time, a
severity ranking with a plain-English "why this matters" per row, masked excerpts only (never
a raw value), and a DPDP Rule 6 mapping appendix. Also --format json|csv. Runs entirely locally
β the API sources only read from your own account, nothing is transmitted.
Also ships as a standalone binary (mac/linux/windows, no Python β pattern pass only) and a
GitHub Action that can fail a build over a PII-exposure threshold. A
runnable 60-record synthetic example is in
packages/maskflow-cli/examples/; full reference,
including the Rule 6 mapping, in docs/scan.md.
maskflow-gateway is a drop-in OpenAI/Anthropic-compatible proxy. Point your existing client's
base URL at it and PII is masked before every request reaches the provider and restored in the
response β streaming included (a <PERSON_NAME_1> split across SSE chunks is stitched back
together; fuzz-tested at every byte boundary). Tool-call arguments are walked as JSON; multi-turn
token identity is kept in Redis (AES-256-GCM at rest).
Full reference in packages/maskflow-gateway/README.md and
docs/gateway.md.
Already running a LiteLLM proxy? maskflow-litellm is a
custom guardrail β no separate service. It masks PII (Indian identifiers included) before a
request leaves the proxy and restores it in the response, streaming and tool calls included.
Full reference in packages/maskflow-litellm/README.md and
docs/litellm-guardrail.md.
maskflow-langchain is a drop-in for
langchain-experimental's Presidio
anonymizer β same .anonymize() / .deanonymize() / .deanonymizer_mapping β so an existing
chain migrates by changing one import. The deanonymizer is a streaming-aware Runnable (a
placeholder split across streamed chunks is stitched back), and there's an optional leak-guard
callback that fails a call closed if PII reaches the model.
Full reference in packages/maskflow-langchain/README.md
and docs/langchain.md.
maskflow-llamaindex gives a LlamaIndex RAG pipeline two components and an unmask helper.
MaskflowNodePostprocessor is a drop-in for llama_index.core.postprocessor.PIINodePostprocessor
(same __pii_node_info__ contract) that masks retrieved context before the synthesizer, with no
LLM call. MaskflowIngestionTransform masks node text at ingestion so raw PII never reaches the
vector store. unmask_response() / MaskflowQueryEngine restore the real values in the answer.
Full reference in packages/maskflow-llamaindex/README.md
and docs/llamaindex.md.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/maskflow-pii-proxy)<a href="https://allmcps.com/mcp/maskflow-pii-proxy"><img src="https://allmcps.com/api/badge/maskflow-pii-proxy?style=directory" alt="MaskFlow PII proxy on AllMCPs" /></a>