npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cloak-business-mcp-server

v2.6.1

Published

MCP Server for cloak.business - AI-powered PII anonymization. Supports both HTTP and stdio transports.

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

  1. Sign up at cloak.business
  2. Go to Dashboard > API Keys
  3. Create a new API key
  4. 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 text
  • sessionId (required): Session ID from anonymization
  • partial: 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

License

MIT License