cloak-business-mcp-server
v2.6.1
Published
MCP Server for cloak.business - AI-powered PII anonymization. Supports both HTTP and stdio transports.
Maintainers
Readme
cloak.business MCP Server
Zero-setup MCP integration for AI tools. Connect to cloak.business's PII anonymization directly from Cursor, Claude Desktop, or any MCP-compatible client.
Supports 48 languages, regional entity groups, presets, and custom recognizers.
Quick Start
Option 1: Streamable HTTP (Cursor, Web Clients)
No Node.js required - just add the URL to your configuration.
{
"mcpServers": {
"cloak-business": {
"url": "https://cloak.business/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Option 2: stdio Transport (Claude Desktop)
See CLAUDE_DESKTOP.md for full setup guide.
{
"mcpServers": {
"cloak-business": {
"command": "npx",
"args": ["-y", "cloak-business-mcp-server"],
"env": {
"cloak_business_API_KEY": "your-api-key-here"
}
}
}
}Getting Your API Key
- Sign up at cloak.business
- Go to Dashboard > API Keys
- Create a new API key
- Copy and use in your MCP configuration
Available Tools
All tool names are prefixed with cloak_business_ for namespace clarity.
cloak_business_analyze_text
Analyze text for PII without modifying it.
Parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| text | string | Required. The text to analyze |
| output | string | "full" | "summary" | "counts" (default: "full") |
| language | string | Language code - 48 supported (default: "en") |
| entities | string[] | Specific entity types to detect |
| entity_groups | string[] | Entity groups: UNIVERSAL, FINANCIAL, DACH, etc. |
| score_threshold | number | Confidence threshold 0.0-1.0 (default: 0.5) |
| preset | string | "default" | "personal" | "private" |
| ad_hoc_recognizers | object[] | Custom regex-based recognizers |
Example:
{
"text": "Contact John Doe at [email protected], SSN 123-45-6789",
"language": "en",
"entity_groups": ["UNIVERSAL", "NORTH_AMERICA"],
"score_threshold": 0.7,
"output": "counts"
}Response:
{
"entity_counts": { "PERSON": 1, "EMAIL_ADDRESS": 1, "US_SSN": 1 },
"entities_found": 3,
"tokens_charged": 8,
"score_threshold": 0.7
}cloak_business_anonymize_text
Cloakize text by replacing PII with placeholders or reversible tokens.
Parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| text | string | Required. The text to anonymize |
| mode | string | "redact" (permanent) | "tokenize" (reversible) |
| output | string | "full" | "metadata" | "minimal" |
| language | string | Language code - 48 supported (default: "en") |
| entities | string[] | Specific entity types to detect |
| entity_groups | string[] | Entity groups to detect |
| score_threshold | number | Confidence threshold 0.0-1.0 |
| preset | string | "default" | "personal" | "private" |
| persistence | string | "session" (24h) | "persistent" (30d) |
| sessionName | string | Optional name for the session |
| operators | object | Custom operators per entity type |
Operators Example:
{
"text": "John Doe, email: [email protected], card: 4111-1111-1111-1111",
"mode": "redact",
"operators": {
"PERSON": { "type": "replace", "new_value": "[REDACTED NAME]" },
"EMAIL_ADDRESS": { "type": "hash", "hash_type": "SHA256" },
"CREDIT_CARD": { "type": "mask", "chars_to_mask": 12, "from_end": false }
}
}Response:
{
"anonymized_text": "[REDACTED NAME], email: a1b2c3d4e5f6..., card: ************1111",
"entities_found": 3,
"tokens_charged": 12
}cloak_business_detokenize_text
Restore original PII values from tokenized text.
Parameters:
text(required): The tokenized textsessionId(required): Session ID from anonymizationpartial: Allow partial restoration (default:false)
cloak_business_analyze_image
Analyze an image for PII using OCR. Returns detected entities with bounding box positions.
Parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| image | string | Required. Base64-encoded image data |
| image_format | string | Required. "png" | "jpeg" | "bmp" | "tiff" |
| language | string | OCR language hint, 2-letter ISO code (default: "en") |
| entities | string[] | Specific entity types to detect |
| score_threshold | number | Confidence threshold 0.0-1.0 (default: 0.5) |
Example:
{
"image": "<base64-encoded-png>",
"image_format": "png",
"language": "en"
}Response:
{
"entities": [
{ "entity_type": "PERSON", "score": 0.85, "left": 24, "top": 31, "width": 159, "height": 35 },
{ "entity_type": "EMAIL_ADDRESS", "score": 1.0, "left": 25, "top": 81, "width": 284, "height": 35 }
],
"entities_found": 2,
"tokens_charged": 3,
"processing_time_ms": 260
}cloak_business_redact_image
Redact PII from an image using OCR. Returns a base64-encoded redacted image.
Parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| image | string | Required. Base64-encoded image data |
| image_format | string | Required. "png" | "jpeg" | "bmp" | "tiff" |
| language | string | OCR language hint, 2-letter ISO code (default: "en") |
| entities | string[] | Specific entity types to redact |
| score_threshold | number | Confidence threshold 0.0-1.0 (default: 0.5) |
| fill_color | string | "black" | "white" | "red" | "green" | "blue" | "gray" (default: "black") |
Response:
{
"redacted_image": "<base64-encoded-png>",
"redacted_image_format": "png",
"image_size_bytes": 4313,
"tokens_charged": 3,
"processing_time_ms": 279
}cloak_business_batch_analyze
Analyze multiple texts for PII in a single request. Supports 1-100 texts with parallel processing.
Parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| items | array | Required. Array of texts to analyze (1-100 items) |
| items[].text | string | Required. The text to analyze |
| items[].id | string | Optional identifier for this item |
| items[].language | string | Language code for this item (default: "en") |
| items[].entities | string[] | Specific entity types to detect |
| output | string | "full" | "summary" | "counts" (default: "full") |
Example:
{
"items": [
{ "id": "msg-1", "text": "John Smith at [email protected]", "language": "en" },
{ "id": "msg-2", "text": "Hans Müller, IBAN DE89370400440532013000", "language": "de" }
],
"output": "counts"
}Response:
{
"results": [
{ "id": "msg-1", "success": true, "entity_counts": { "PERSON": 1, "EMAIL_ADDRESS": 1 }, "metadata": { "language": "en", "entities_found": 2, "tokens_used": 2 } },
{ "id": "msg-2", "success": true, "entity_counts": { "PERSON": 1, "IBAN_CODE": 1 }, "metadata": { "language": "de", "entities_found": 2, "tokens_used": 2 } }
],
"batch_metadata": {
"total_items": 2,
"successful": 2,
"failed": 0,
"total_entities_found": 4,
"total_tokens_used": 4,
"processing_time_ms": 320
}
}cloak_business_get_balance
Check your current token balance. Free operation.
cloak_business_list_sessions
List your active tokenization sessions. Free operation.
cloak_business_delete_session
Delete a tokenization session. Free operation.
Supported Languages (48)
spaCy Languages (25)
| Code | Language | Code | Language | Code | Language |
|------|----------|------|----------|------|----------|
| en | English | de | German | es | Spanish |
| fr | French | it | Italian | pt | Portuguese |
| nl | Dutch | pl | Polish | ru | Russian |
| ja | Japanese | zh | Chinese | ko | Korean |
| ro | Romanian | el | Greek | hr | Croatian |
| sl | Slovenian | mk | Macedonian | sv | Swedish |
| da | Danish | nb | Norwegian | fi | Finnish |
| uk | Ukrainian | lt | Lithuanian | ca | Catalan |
| tr | Turkish | | | | |
Stanza NER Languages (7)
| Code | Language | Code | Language |
|------|----------|------|----------|
| bg | Bulgarian | hu | Hungarian |
| he | Hebrew | vi | Vietnamese |
| af | Afrikaans | hy | Armenian |
| eu | Basque | | |
Transformer Languages (16)
| Code | Language | Code | Language | Code | Language |
|------|----------|------|----------|------|----------|
| ar | Arabic | hi | Hindi | cs | Czech |
| sk | Slovak | id | Indonesian | th | Thai |
| fa | Persian | sr | Serbian | lv | Latvian |
| et | Estonian | ms | Malay | bn | Bengali |
| ur | Urdu | sw | Swahili | tl | Tagalog |
| is | Icelandic | | | | |
Entity Groups
Use entity_groups parameter to detect regional entities easily:
| Group | Entities Included |
|-------|-------------------|
| UNIVERSAL | PERSON, EMAIL_ADDRESS, PHONE_NUMBER, LOCATION, DATE_TIME, URL, IP_ADDRESS, etc. |
| FINANCIAL | CREDIT_CARD, IBAN_CODE, SWIFT_CODE, CRYPTO |
| DACH | DE_TAX_ID, AT_SSN, CH_AHV, and more for Germany, Austria, Switzerland |
| FRANCE | FR_NIR, FR_CNI, BE_NATIONAL_NUMBER, LU_NATIONAL_ID |
| SPAIN_LATAM | ES_NIF, ES_NIE, MX_CURP, AR_DNI, CL_RUT, etc. |
| ITALY | IT_FISCAL_CODE, IT_VAT, IT_DRIVER_LICENSE, IT_HEALTH_CARD |
| PORTUGAL_BRAZIL | PT_NIF, PT_CC, BR_CPF, BR_CNPJ, BR_RG |
| NORDIC | DK_CPR, FI_HETU, SE_PERSONNUMMER, NO_FODSELSNUMMER, IS_KENNITALA |
| POLAND | PL_PESEL, PL_NIP, PL_REGON, PL_PASSPORT |
| UK_IRELAND | UK_NHS, UK_NINO, IE_PPS, UK_PASSPORT |
| NORTH_AMERICA | US_SSN, US_PASSPORT, CA_SIN, CA_HEALTH_NUMBER |
| ASIA_PACIFIC | JP_MY_NUMBER, CN_RESIDENT_ID, SG_NRIC, AU_TFN, IN_AADHAAR |
| MIDDLE_EAST | AE_EMIRATES_ID, SA_NATIONAL_ID, IL_ID_NUMBER |
| HEALTHCARE | MEDICAL_LICENSE, NRP, HEALTH_INSURANCE_ID |
Custom Recognizers (Ad-hoc)
Define custom patterns for domain-specific entities:
{
"text": "Employee ID: EMP-12345, Badge: B-9876",
"ad_hoc_recognizers": [
{
"entity_type": "EMPLOYEE_ID",
"patterns": [{ "regex": "EMP-\\d{5}", "score": 0.9 }],
"context": ["employee", "staff", "worker"]
},
{
"entity_type": "BADGE_NUMBER",
"patterns": [{ "regex": "B-\\d{4}", "score": 0.85 }]
}
]
}Operator Types
| Operator | Description | Parameters |
|----------|-------------|------------|
| replace | Replace with custom value | new_value |
| redact | Replace with <ENTITY_TYPE> | - |
| hash | One-way hash | hash_type: SHA256, SHA512 |
| encrypt | Reversible encryption | key: 16/24/32 char key |
| mask | Partial masking | chars_to_mask, masking_char, from_end |
| keep | Keep original value | - |
Architecture
This MCP server supports two transports:
- Streamable HTTP: For web clients, Cursor IDE - processing on cloak.business servers
- stdio: For Claude Desktop - local process, API calls to cloak.business
Your data is:
- Encrypted in transit (TLS 1.3)
- Processed in memory only (not stored)
- Tokenization mappings encrypted at rest (AES-256-GCM)
- GDPR compliant (EU data residency)
Version History
- v2.6.1 - Security hardening: error sanitization, request ID propagation
- v2.6.0 - Batch analyze: process 1-100 texts in a single request
- v2.5.0 - Retry logic with exponential backoff for transient failures
- v2.4.0 - Structured logging, enhanced health checks, error codes
- v2.3.0 - Image anonymization: analyze and redact PII in images via OCR
- v2.2.1 - Timing-safe API key comparison to prevent timing attacks
- v2.2.0 - 48 languages, presets, entity groups, advanced features
- v2.1.0 - stdio transport for Claude Desktop
- v2.0.x - Streamable HTTP transport, enhanced tools
- v1.0.0 - Initial release with stdio transport
Support
- Website: cloak.business
- Documentation: cloak.business/docs
- Claude Desktop Setup: CLAUDE_DESKTOP.md
- Support: [email protected]
License
MIT License
