Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CloakLLM MCP ServerSanitize this text to remove PII: 'Contact John Doe at john.doe@email.com'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CloakLLM MCP Server
MCP server that wraps CloakLLM's Python SDK as tools for Claude Desktop and other MCP-compatible clients.
Tools
Tool | Description |
| Detect & cloak PII, return sanitized text + token map ID + entity_details. Pass |
| Restore original values using a token map ID |
| Detect PII without cloaking (pure analysis) |
Install
cd cloakllm-mcp
pip install -e .Claude Desktop Configuration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"cloakllm": {
"command": "python",
"args": ["/path/to/cloakllm-mcp/server.py"],
"env": {
"CLOAKLLM_LOG_DIR": "./cloakllm_audit",
"CLOAKLLM_LLM_DETECTION": "false"
}
}
}
}Or using uvx:
{
"mcpServers": {
"cloakllm": {
"command": "uvx",
"args": ["mcp", "run", "/path/to/cloakllm-mcp/server.py"]
}
}
}Usage Examples
Sanitize text before sending to an LLM
Tool call: sanitize
{
"text": "Email john@acme.com about the meeting with Sarah Johnson at 742 Evergreen Terrace",
"model": "claude-sonnet-4-20250514",
"token_map_id": "optional-id-for-multi-turn"
}Multi-turn: Pass the
token_map_idfrom a previoussanitizeresponse to reuse the same token map across conversation turns. The same PII will always map to the same token.
Response:
{
"sanitized": "Email [EMAIL_0] about the meeting with [PERSON_0] at 742 Evergreen Terrace",
"token_map_id": "a1b2c3d4-...",
"entity_count": 2,
"categories": {"EMAIL": 1, "PERSON": 1},
"entity_details": [
{"category": "EMAIL", "start": 6, "end": 19, "length": 13, "confidence": 0.95, "source": "regex", "token": "[EMAIL_0]"},
{"category": "PERSON", "start": 42, "end": 56, "length": 14, "confidence": 0.85, "source": "spacy", "token": "[PERSON_0]"}
]
}Restore original values
Tool call: desanitize
{
"text": "I've drafted an email to [EMAIL_0] regarding [PERSON_0]'s request.",
"token_map_id": "a1b2c3d4-..."
}Response:
{
"restored": "I've drafted an email to john@acme.com regarding Sarah Johnson's request."
}Analyze text for PII (no cloaking)
Tool call: analyze
{
"text": "Contact john@acme.com, SSN 123-45-6789"
}Response:
{
"entity_count": 2,
"entities": [
{"text": "john@acme.com", "category": "EMAIL", "start": 8, "end": 21, "confidence": 0.95, "source": "regex"},
{"text": "123-45-6789", "category": "SSN", "start": 27, "end": 38, "confidence": 0.95, "source": "regex"}
]
}Environment Variables
Variable | Default | Description |
|
| Audit log directory |
|
| Enable/disable audit logging |
|
| spaCy model for NER |
|
| Enable LLM-based detection |
|
| Ollama model for LLM detection |
|
| Ollama endpoint |
Testing
# Test with MCP inspector
python -m mcp dev server.py
# Or run directly
python server.pySee Also
CloakLLM Hub — project overview, architecture, and links
CloakLLM Python SDK — Python library with spaCy NER + OpenAI / LiteLLM middleware
CloakLLM JS SDK — JavaScript library with OpenAI + Vercel AI middleware
License
MIT
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.