Skip to main content
Glama
tillo

kustodyan-mcp

by tillo

kustodyan-mcp

A Model Context Protocol server for the Kustodyan data-protection API (powered by the RegData Protection Suite). It lets AI agents and applications protect, unprotect and search sensitive data through Kustodyan's contextual transform engine — so data is tokenized, encrypted, anonymized or masked according to who is asking (a role) and what operation is requested, with every call auditable.

It speaks two transports from one binary:

  • stdio (default) — for local use (node dist/server.js after a build)

  • streamable HTTP — for hosting behind a reverse proxy (set KUSTODYAN_MCP_TRANSPORT=http)

What it does

The Kustodyan Engine exposes a single transform operation; behaviour is selected by evidence you send — a Role (who) and an Action (Protect / Unprotect / Search) — plus the (className, propertyName) of each value. The transformation technique (encryption, tokenization, anonymization, masking) is configured server-side, never chosen by the caller. This server wraps that model in ergonomic tools.

Tools

Tool

Purpose

protect

Protect field values for a role (encrypt / tokenize / anonymize per config).

unprotect

Reverse a protection to recover the original — returns cleartext, treat as sensitive.

search

Get a search token to match against a stored protected value.

transform

Low-level escape hatch: send a full Engine transform payload.

validate_transform

Statically validate a transform payload before sending.

whoami

Confirm credentials and the configured environment (decoded token claims).

health

Check Identity + Engine reachability.

list_data_model

Discover the configured classes, properties, roles and actions.

Resources & prompts

  • kustodyan://guide/contextualisation — how Role/Action evidence drives transforms.

  • kustodyan://guide/best-practices — safe, effective use of protect/unprotect.

  • kustodyan://data-model — the configured data-model manifest.

  • Prompt protect_record — guides an assistant to protect a record's PII safely.

Related MCP server: Shrike Security MCP Server

Configuration (environment)

Variable

Required

Description

KUSTODYAN_IDENTITY_URL

yes

e.g. https://<env>.kustodyan.io/api/identity

KUSTODYAN_ENGINE_URL

yes

e.g. https://<env>.kustodyan.io/api/engine

KUSTODYAN_CLIENT_ID

yes

Engine API client id (from the CoreAdmin portal)

KUSTODYAN_CLIENT_SECRET

yes

Engine API client secret

KUSTODYAN_DATA_MODEL

no

Path to a data-model manifest JSON (classes/properties/roles)

KUSTODYAN_MCP_TRANSPORT

no

stdio (default) or http

KUSTODYAN_HTTP_HOST / KUSTODYAN_HTTP_PORT

no

HTTP bind (default 127.0.0.1 / 9090)

Run locally (stdio)

npm install && npm run build
KUSTODYAN_IDENTITY_URL=https://<env>.kustodyan.io/api/identity \
KUSTODYAN_ENGINE_URL=https://<env>.kustodyan.io/api/engine \
KUSTODYAN_CLIENT_ID=... KUSTODYAN_CLIENT_SECRET=... \
node dist/server.js

MCP client config (stdio):

{
  "mcpServers": {
    "kustodyan": {
      "command": "node",
      "args": ["/path/to/kustodyan-mcp/dist/server.js"],
      "env": {
        "KUSTODYAN_IDENTITY_URL": "https://<env>.kustodyan.io/api/identity",
        "KUSTODYAN_ENGINE_URL": "https://<env>.kustodyan.io/api/engine",
        "KUSTODYAN_CLIENT_ID": "...",
        "KUSTODYAN_CLIENT_SECRET": "..."
      }
    }
  }
}

Run hosted (HTTP, token-gated image)

The container serves streamable HTTP behind an nginx bearer-token gate.

docker run -d -p 8080:8080 \
  -e MCP_BEARER_TOKEN=<a long random secret> \
  -e KUSTODYAN_IDENTITY_URL=https://<env>.kustodyan.io/api/identity \
  -e KUSTODYAN_ENGINE_URL=https://<env>.kustodyan.io/api/engine \
  -e KUSTODYAN_CLIENT_ID=... -e KUSTODYAN_CLIENT_SECRET=... \
  <image>

Point your MCP client at https://<host>/mcp, sending Authorization: Bearer <MCP_BEARER_TOKEN> (or ?token=<MCP_BEARER_TOKEN>). GET /healthz is unauthenticated for probes.

Build

npm install
npm run build      # -> dist/
npm start          # stdio

Safety notes

  • unprotect returns cleartext. Never log it, persist it, or call it for an unauthorised role. Prefer a masking role when a partial value suffices.

  • Discover the data model (list_data_model) instead of guessing propertyNames.

  • Transform calls can succeed (HTTP 200) while individual fields carry a per-field error — always inspect per-field results.

Documentation

  • docs/rps-api-contract.md — the verified Identity + Engine API contract (auth, /transform shape, error model) this server is built on.

  • docs/searchable-encryption.md — the searchable-encryption guide: the scheme/leakage ladder, and the PROPE search-band contract (dependencyContext {method,min,max}, case-insensitive collation).

License

MIT

Available Tools

8 tools
healthHealth check (identity + engine reachability)A
Read-only

Verify the Identity API issues a token and the Engine API endpoint is reachable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint. Description adds specific checks (token issuance, engine reachability), giving more context than annotations alone. However, the phrase 'issues a token' could imply a side effect, creating mild ambiguity with readOnlyHint. Not a strong contradiction, so score is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy, front-loaded with action verb 'Verify'. Every word contributes to the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description covers the core functionality. Could mention expected behavior on failure (e.g., error responses), but not strictly necessary given simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist and schema coverage is 100%. Description does not need to add parameter details. Baseline of 4 is appropriate as the description provides no extra parameter info, but none is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool verifies two specific endpoints (Identity API token issuance and Engine API reachability), which is a precise health check. Distinguishes from sibling tools (e.g., whoami checks user identity, not system health) by focusing on system-level connectivity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives mentioned. Usage is implied for checking system health before other operations, but no comparison to siblings or conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_data_modelList configured classes / properties / rolesA
Read-only

Return the data-model manifest: which (className, propertyName) fields are protectable, the roles and their behaviour, and the Action vocabulary. Use this to discover what you can protect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only (readOnlyHint: true), so the agent knows it's safe. The description adds detail on what data is returned (protectable fields, roles, etc.), which is useful context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise and front-loaded. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with no parameters and no output schema, the description covers the essential return content (protectable fields, roles, action vocabulary). It could hint at the return structure, but is sufficient for an agent to understand the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline score is 4. The description appropriately includes no further parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a 'data-model manifest' specifying protectable fields, roles, and the Action vocabulary. This distinguishes it from siblings like 'protect' and 'unprotect' which perform actions, while this tool is purely informational.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to discover what you can protect,' providing clear context for when to use it—before protection actions. It doesn't explicitly list exclusions, but the sibling list and tool name imply it's for model discovery, not for other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

protectProtect data (encrypt / tokenize / anonymize)A

Protect one or more field values for a given role. The exact technique (encryption, tokenization, anonymization, masking) is server-configured per (className, propertyName). Returns each field's protected value joined to its original. Protect data as early as possible.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole evidence (who is asking), e.g. R_MANAGER.R_MANAGER
fieldsYesField values to protect.
evidencesNoExtra evidence key/value pairs beyond Role/Action.
loggingAttributesNoOptional audit-log attributes for this call.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds that the technique is server-configured and that results are joined to originals. This provides useful context beyond annotations, though it doesn't detail error handling or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: first states the action, second provides crucial context and best practice. No wasted words, all sentences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of data protection, the schema coverage is high, and annotations are present. The description adds important context about server-configuration and best practice (early protection). However, it lacks specifics on return format or error handling, but overall sufficient for a tool with good schema and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and includes clear descriptions for each parameter. The tool description adds that the exact technique is server-configured per (className, propertyName) and that the return joins protected to original values, which adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The name and title explicitly state 'protect' and 'encrypt/tokenize/anonymize'. The description clearly says 'Protect one or more field values for a given role' and distinguishes the technique as server-configured per class/property. This provides a specific verb and resource, and the sibling 'unprotect' clearly contrasts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for early protection and for a given role, but no explicit when-not-to-use or alternatives (e.g., when to use transform vs protect). The guidance is limited to 'as early as possible' without detailing when protection is appropriate or not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transformLow-level transform (full passthrough)B

Escape hatch: send a fully-formed Engine transform payload (rightsContexts, processingContexts, requests) for advanced cases (multiple contexts, dependency contexts). Prefer protect/unprotect/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestsYes
loggingContextNo
rightsContextsYes
processingContextsYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must fully describe behavioral traits. It only says 'low-level transform (full passthrough)' and 'escape hatch', but does not disclose side effects, authentication needs, rate limits, return value, or whether the payload is validated or executed immediately. This is insufficient for an agent to understand the consequences of invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at two sentences, with the most critical information (purpose and usage guidance) placed first. However, it sacrifices necessary detail for brevity, earning a 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, nested objects, no output schema, no annotations), the description is severely incomplete. It lacks information on parameter construction, default behavior, error handling, and the nature of the 'full passthrough'. Sibling tool descriptions may help, but the description itself falls short.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and no annotation, the description adds no meaning to the parameters. It mentions three top-level properties (rightsContexts, processingContexts, requests) but omits loggingContext and provides no explanation of their structure or usage. The agent cannot determine how to construct valid parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is an 'escape hatch' for sending a fully-formed Engine transform payload, explicitly distinguishing it from higher-level tools protect/unprotect/search. The verb 'send' and resource 'Engine transform payload' define its purpose precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: use for advanced cases like multiple contexts or dependency contexts, and recommends preferring protect/unprotect/search for simpler use. This clearly tells when and when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unprotectUnprotect data (reveal — SENSITIVE)A

Reverse a protection to recover the original value, for a role permitted to do so. ⚠️ Returns CLEARTEXT sensitive data — treat the result as confidential, never log it, and only call when the caller is authorised. Depending on the role the engine may instead return a masked value or the stored protected value.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole evidence; must have unprotect rights, e.g. R_MANAGER.R_MANAGER
fieldsYesProtected field values to unprotect.
evidencesNo
loggingAttributesNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds critical behavioral context beyond annotations: it returns cleartext sensitive data, warns against logging, and notes role-dependent output (masked or protected value). Annotations only indicate non-read-only, non-destructive, and open world, so the description fills gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences plus a warning emoji. Every sentence adds value: define the action, sensitivity warning, usage restriction, and role-dependent output. No unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no output schema, the description covers the core behavior and security implications but omits details on 'evidences' and 'loggingAttributes' parameters and does not describe the return structure. It is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% with descriptions for 'role' and 'fields'. The description does not add extra meaning for parameters; 'evidences' and 'loggingAttributes' are undocumented beyond the schema. The tool description focuses on overall behavior rather than parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reverses protection to recover the original value, distinguishing it from the sibling tool 'protect'. It specifies the action, resource, and role requirement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use (recover protected data) and warns about sensitivity and authorization. It does not explicitly mention when not to use or alternatives, but the sibling 'protect' implies the opposite operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_transformValidate a transform payload (local)A
Read-only

Statically validate a transform payload before sending it: required fields, evidence shape, and that each request's rightsContext/processingContext references a declared context guid.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestsNo
rightsContextsNo
processingContextsNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description need not restate. It adds value by detailing the validation scope (required fields, evidence shape, cross-references), going beyond the annotation. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the essential purpose and scope. No wasted words, and the key validation points are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, and the description omits any information about return values (e.g., validation errors or success indicators). For a validation tool, this is a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explains the purpose of validation across the three parameters (requests, rightsContexts, processingContexts) and their cross-referencing. This adds meaning beyond raw schema, though individual parameter details are absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Statically validate a transform payload before sending it', specifying the verb (validate) and resource (transform payload). It distinguishes itself from the sibling tool 'transform' which assumes actual execution, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'before sending it' implies use prior to the 'transform' tool, but no explicit guidance on when not to use or alternatives. For a validation tool, this is minimal but functional guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiIdentity / credential checkA
Read-only

Fetch an access token and report the (non-sensitive) JWT claims — client id, scope, expiry — to confirm credentials and which environment is configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint, and the description adds that it fetches an access token and reports non-sensitive claims. This provides useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no wasted words, efficiently conveying the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description fully covers what the tool does and its return values. It is complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. The description does not need to explain parameters; baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches an access token and reports JWT claims (client id, scope, expiry) to confirm credentials and environment. It is specific and distinct from sibling tools like health or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the purpose ('to confirm credentials and which environment is configured'), making it clear when to use. However, it does not mention when not to use or alternatives, but given the tool's simplicity, this is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedhealth
    • First observedlist_data_model
    • First observedprotect
    • First observedsearch
    • First observedtransform
    • First observedunprotect
    • First observedvalidate_transform
    • First observedwhoami

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation: health checks connectivity, whoami retrieves JWT claims, list_data_model discovers schema, protect/unprotect field values, search for tokens, transform for advanced payloads, validate_transform for payload validation. No overlapping purposes.

Naming Consistency4/5

Tools use lowercase with underscores, but naming patterns vary: some are single verbs (health, protect, search), others verb_noun (list_data_model, validate_transform), and 'whoami' breaks the pattern. Mostly consistent but with minor deviations.

Tool Count5/5

8 tools are a reasonable scope for a data protection API: discovery, protection, unprotection, search, transform, validation, health, and identity checks. Not too many or too few.

Completeness4/5

Core protection lifecycle (protect, unprotect, search) is covered, along with discovery and validation. Missing tools for updating or deleting protections, and no admin tools for role/policy management, but these may be out of scope for the client.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    Enables high-precision detection, anonymization, encryption and decryption of personally identifiable information (PII) in text using GPT-4o-based detection and advanced cryptographic methods. Supports both deterministic encryption for searchable data and format-preserving encryption for structured identifiers.
    8
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    Protects AI agents from threats like prompt injection, jailbreaks, and SQL injection through a multi-layer scanning pipeline. It also enables PII redaction and rehydration to ensure data privacy during LLM interactions.
    12
    71 npm
    2
    Apache 2.0