Skip to main content
MultiMind ships an Anthropic Model Context Protocol (MCP) server that exposes the compliance toolkit — PII scanning, redaction, grounding checks, policy gating, and audit logging — as tools any MCP client can call: Claude Desktop, Claude Code, Cursor, or your own agent. Not to be confused with multimind.mcp, MultiMind’s internal Model Composition Protocol for workflow orchestration. The MCP server lives in multimind.mcp_server.

Install and run

The server is named multimind-compliance and speaks MCP over stdio. The base multimind.mcp_server package imports without the mcp extra; only running the server requires it.

Client configuration

Claude Desktop (claude_desktop_config.json) or Claude Code (.mcp.json):
Claude Code one-liner:
Environment:

Tools

scan_text(text)

Detect PII in text. Returns finding types and character spans plus per-type counts — never the raw matched values.
Detected types: email, phone, ssn, credit_card (Luhn-validated), ip_address, iban, passport, dob, api_key (entropy-filtered).

redact_text(text, strategy="mask")

Redact detected PII. Strategies: mask ([EMAIL]), hash ([EMAIL:1f9a3c2b], a stable 8-char tag for correlation without exposure), remove (delete outright).

check_grounding(response, sources)

Score how well each sentence of a response is supported by the given source texts. Deterministic n-gram containment — offline, no LLM call. Catches fabricated sentences; being lexical, it cannot catch paraphrased contradictions.

audit_log(event, metadata?)

Append a caller-declared compliance event to the JSONL audit trail (MULTIMIND_AUDIT_LOG). The event text and any string metadata values are PII-masked before writing, so raw PII never lands in the log; detected types are recorded as counts.
Written line:

check_policy(text, block_on)

Pre-send gate: call before pushing content to an external service. Returns whether the text is free of the blocked PII types (case-insensitive type names).

Positioning

These are agent-invocable compliance tools: the agent decides when to scan, redact, or gate. For transparent interception of all traffic — every prompt and response, no cooperation required — put the compliance guard in the request path instead with multimind serve (see guard-proxy.md), or wrap a model in-process with multimind.compliance.guard (guard(model, block_on=("ssn",)) returns a ComplianceGuard).