---
title: "AgentCloak: anonimizar PII antes de que llegue al modelo"
excerpt: "AgentCloak sustituye los datos personales por gemelos sintéticos antes de mandarlos a un LLM, y los restaura al volver. Cómo funciona su MCP server, su skill para Claude Code y dónde están los límites reales."
date: "2026-09-18T17:00:00.000Z"
category: "MCP"
tech_article: true
author:
  name: "angel cruz"
  picture: "/images/me/angel-cruz.png"
ogImage:
  url: "/images/open-graph/mcp-opengraph-image.png"
seo_title: "AgentCloak: anonimizar PII antes de enviarla a ChatGPT o Claude"
seo_description: "Guía de AgentCloak de InCountry: el MCP server con las tools cloak y uncloak, la skill para Claude Code y Cursor, los 8 campos que cubre y las 17 estrategias de redacción."
---

**AgentCloak sustituye los datos personales de un texto por valores sintéticos consistentes antes de que salgan hacia un modelo, y los devuelve a su valor original en la respuesta.** Lo hace InCountry, la empresa de residencia de datos, y hoy tiene tres formas de usarse: una extensión de navegador gratuita, un MCP server con dos tools, y una skill que instalas en Claude Code o Cursor.

El problema que ataca es viejo y muy concreto: el momento en que un agente lee tu base de datos de clientes y manda los nombres reales a un proveedor de IA. Nadie lo decidió, simplemente pasa porque el contexto viaja entero.

Esto es lo que dicen las fuentes originales: la documentación de InCountry, el repositorio público de la skill y el comunicado de lanzamiento.

## Qué es AgentCloak y qué productos incluye

AgentCloak es la línea de producto "Sovereign AI" de InCountry, separada de su negocio original de residencia de datos (InCountry DRaaS, InCountry Identity, InCountry China). Dentro de AgentCloak hay cuatro piezas con públicos distintos:

- **AgentCloak Desktop**, extensión de navegador y app de escritorio para usuarios finales.
- **AgentCloak Server**, la pieza para desarrolladores: MCP Server, MCP Proxy, A2A Proxy o API.
- **AgentCloak Skills**, la skill de agente que se instala en un editor o CLI.
- **AgentCloak para Agentforce**, la integración con Salesforce.

La empresa anunció AgentCloak el 22 de septiembre de 2025 junto con una ronda de 10 millones de dólares liderada por Arbor Ventures. Según el comunicado del 18 de septiembre de 2026, la financiación total acumulada es de 50 millones.

## AgentCloak Desktop: la versión gratuita para ChatGPT y Claude

La pieza que se lanzó hoy. Es un cloaking que corre **en tu máquina**, no en la nube: según la página de producto, empareja el cifrado de gemelo digital con un modelo pequeño que se ejecuta localmente.

Sustituye por valores sintéticos consistentes, con el ejemplo literal que da el comunicado: "Peter Parker" pasa a ser "Julio Schmidt", y "364 23rd St" pasa a ser "401 Vanessa Curve". Luego restaura los valores originales en la respuesta del modelo.

Lo que detecta la versión gratuita: nombres, direcciones de correo, teléfonos, URLs, números de seguridad social e identificadores fiscales, números de cuenta y de ruta bancaria, y direcciones físicas. Siete idiomas, español incluido.

Chatbots cubiertos: ChatGPT, Claude, Gemini, Grok, Copilot y DeepSeek. Se distribuye como extensión para Chrome, Safari y Edge, y como app nativa para macOS y Windows. Es gratis para uso individual.

Peter Yared, fundador y CEO, resume la tesis en el comunicado: "People should not have to choose between useful AI and keeping their private data private" (la traducción es mía: la gente no debería tener que elegir entre una IA útil y mantener sus datos privados).

## El MCP server de AgentCloak: las tools cloak y uncloak

Aquí empieza la parte de desarrollador. El MCP server expone exactamente dos tools, `cloak` y `uncloak`, sobre JSON-RPC 2.0 por HTTP POST. Si vienes de [la introducción a MCP](/post/introduccion-a-mcp-model-context-protocol), el patrón es el de siempre: `tools/call` con un nombre y unos argumentos.

Las variables que necesitas:

```bash
export INC_MCP_URL="https://us-mt-01.api.incountry.io/mcp"
export INC_MCP_API_KEY="<uuid>:<token>"
```

La URL no es fija: sale del campo `mcp_server_url` de tu entorno, y el patrón general que documenta el tutorial es `https://<country>-restapi-<pop>.api.incountry.io/mcp`. Es decir, el país en el que corre el servidor forma parte del hostname, que es coherente con el resto del negocio de InCountry.

Anonimizar un texto:

```bash
curl -s -X POST "$INC_MCP_URL" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "x-inc-agentcloak-api-key: $INC_MCP_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 1,
    "params": {
      "name": "cloak",
      "arguments": { "message": "John Smith, age 34" }
    }
  }'
```

La respuesta trae el texto anonimizado y un `id` de sesión. Ese `id` es la pieza clave, porque sin él no hay vuelta atrás:

```bash
curl -s -X POST "$INC_MCP_URL" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "x-inc-agentcloak-api-key: $INC_MCP_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 2,
    "params": {
      "name": "uncloak",
      "arguments": { "message": "<texto anonimizado>", "id": "<cloak-id>" }
    }
  }'
```

En Node, el propio README lo reduce a una función y un `fetch`, sin SDK ni dependencias nuevas:

```javascript
async function callMcp(tool, args) {
  const res = await fetch(process.env.INC_MCP_URL, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-inc-agentcloak-api-key": process.env.INC_MCP_API_KEY,
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      method: "tools/call",
      id: 1,
      params: { name: tool, arguments: args },
    }),
  });
  return (await res.json()).result.structuredContent;
}
```

La consecuencia arquitectónica conviene decirla en voz alta: el mapeo entre el valor real y el sintético vive del lado de AgentCloak, porque es lo que permite que `uncloak` funcione. No estás eliminando el dato, lo estás moviendo a otro proveedor, uno cuyo modelo de negocio es precisamente dónde se guarda. Si tu requisito es que el dato no salga de tu infraestructura, la vía es el despliegue single-tenant, on-premises o en AWS Outposts que la empresa documenta, no el multi-tenant.

## Instalar la skill de AgentCloak en Claude Code, Cursor o Codex

InCountry publica la skill en abierto, en el repositorio [agentcloak/skill](https://github.com/agentcloak/skill) de su organización de GitHub. Se declara MIT en el `package.json` y en el `marketplace.json`, y se publica en npm como `agentcloak-skill`, cuya última versión es la 1.2.8, del 4 de junio de 2026.

La instalación recomendada usa el CLI `skills` de vercel-labs, el mismo que se está estandarizando para [distribuir skills entre agentes](/post/skills-claude-code):

```bash
npm install -g skills
npx skills add agentcloak/skill
```

Para CI o scripts, sin prompts:

```bash
# A nivel de proyecto: instala en .agents/skills/ y .claude/skills/
npx github:agentcloak/skill

# Global, para todos los proyectos
npx github:agentcloak/skill -g

# Ver las skills disponibles
npx github:agentcloak/skill --list
```

La skill declara soporte para Claude Code (`.claude/skills/`), OpenCode, Cursor, Cline y GitHub Copilot (`.agents/skills/`), Windsurf (`.windsurf/skills/`), Roo Code (`.roo/skills/`) y Continue (`.continue/skills/`). Trae además un `agents/openai.yaml` para Codex, con `allow_implicit_invocation: true`, o sea que el agente puede decidir invocarla sin que se lo pidas.

Una vez instalada tiene dos modos. El primero es puntual, sin tocar código:

```
Cloak the name "Alice Johnson"
```

El segundo es el que importa, y es donde una skill se gana el sitio frente a un simple MCP server: el agente lee tu fuente, añade la llamada y reescribe la salida.

```
Add PII protection to acme-crm.ts using the AgentCloak MCP server.
Cloak the full names of all customers before printing them.
```

Merece la pena leer el `SKILL.md` antes de instalar nada, aunque solo sea por higiene, como con [cualquier servidor MCP de terceros](/post/servidores-mcp-maliciosos-ghostsplice). Tiene un detalle bien pensado: la skill se instruye a sí misma para no imprimir nunca PII ni credenciales, y para referenciar siempre las claves por variable de entorno en los comandos `curl` que muestra, de forma que el valor real no aparezca en el historial de la conversación.

## Los 8 campos que cubre el cloak, y los que no

Este es el dato que cambia la decisión y que no está en la portada. La tool `cloak` del MCP server reconoce **ocho tipos de campo**, con estas opciones por defecto:

| Campo | Opción por defecto |
|---|---|
| `name` | `native` (nombre sintético culturalmente apropiado) |
| `age` | `keep` |
| `gender` | `keep` |
| `weight` | `placeholder` |
| `weight_unit` | `kilograms` |
| `location` | `country` (reduce a nivel de país) |
| `medical_condition` | `mask` |
| `financial` | `mask` |

Las opciones disponibles son `keep`, `placeholder`, `mask`, `native`, `country`, `city`, `region`, `categories`, `ranges`, `group`, `pounds` y `kilograms`, y no todas valen para todos los campos: `native` es solo para `name`, `group` solo para `medical_condition`.

Lo interesante es la generalización, no solo la sustitución. `age` con opción `ranges` te deja definir tramos, y `location` puede degradarse a ciudad, región o país. Eso es minimización de datos de verdad, no enmascaramiento cosmético.

Y aquí está la trampa: **email, teléfono y dirección no están entre esos ocho**. El propio `SKILL.md` instruye al agente para que, si le pides anonimizar un campo fuera de la lista, explique la limitación y derive a las configuraciones de Border. La extensión de escritorio sí detecta correos y teléfonos; la tool `cloak` del MCP server, no. Son dos productos con coberturas distintas y conviene no asumir que la del uno aplica al otro.

## Las 17 estrategias de redacción de las configuraciones Border

Para todo lo demás está la otra capa: la Portal API en `portal.incountry.com/api`, que se autentica con `X-API-Key: inc_v1_...` y donde viven las configuraciones Border. Ahí hay un catálogo de 17 estrategias de redacción que se aplican por JSONPath.

Las que más se van a usar:

| Estrategia | ¿Persistente? | Pensada para |
|---|---|---|
| `alphaNumericPersistent` | Sí | name, full_name, address, city |
| `emailPersistent` | Sí | email, username_email |
| `numeric` | No | phone, zip_code, amount |
| `defaultDateISO` | No | date, date_of_birth (fija 1970-01-01) |
| `masking` | No | name, email, phone, card_number |
| `password` | No | password, secret, token |
| `formula` | No | phone, email con hash a medida |
| `llm` | No | mcp_request, mcp_response |
| `fixed` | No | cualquier campo, valor constante |

"Persistente" significa que el mismo valor de entrada produce siempre el mismo valor de salida, usando un `persistentTokenSalt` de 32 caracteres hexadecimales. Es lo que necesitas si quieres seguir pudiendo agrupar por cliente sobre datos anonimizados. Las no persistentes rompen esa correlación, que a veces es justo lo que quieres.

La skill infiere la estrategia por el nombre del campo: un JSONPath que contenga `email` recibe `emailPersistent`, uno con `name` o `fullName` recibe `alphaNumericPersistent`, uno con `phone` o `mobile` recibe `numeric`, y el resto cae en `alphaNumeric`. `emailPersistent` genera correos de 12 caracteres con el sufijo `@superredacted.us` por defecto.

El flujo de edición es export, `jq`, import, y está pensado para que lo ejecute el agente:

```bash
curl -s -H "X-API-Key: $INC_API_KEY" \
  "$INC_BASE_URL/environments/$INC_ENV_ID/export" > ./tmp/baseline.json

jq '.countries["se-mt-01"].border.configurations[0].target = "https://new.example.com"' \
  ./tmp/baseline.json > ./tmp/edited.json

curl -s -H "X-API-Key: $INC_API_KEY" -F "file=@./tmp/edited.json" \
  "$INC_BASE_URL/environments/$INC_ENV_ID/import"
```

Es un import completo, no un parche. Exportas el entorno entero, lo editas y lo vuelves a subir.

## Cuándo tiene sentido y cuándo no

Tiene sentido cuando el agente toca datos de producción de terceros y necesitas una respuesta defendible ante la pregunta de qué salió hacia el proveedor del modelo. La minimización que exige el AI Act europeo es el caso de uso que la empresa nombra explícitamente, junto a la PIPL china y la PDPL saudí.

No tiene sentido si lo que quieres es que el dato no viaje a ningún sitio. En el modo multi-tenant estás sumando un proveedor más al circuito, y la latencia de dos llamadas HTTP extra por turno de conversación no es gratis.

Y hay un tercer caso, el más frecuente: si tu problema es un `.env` o unas credenciales que el agente no debería leer, esto no es lo que buscas. AgentCloak va de datos personales, no de secretos.

## Preguntas frecuentes

### ¿AgentCloak es gratis?

AgentCloak Desktop es gratis para uso individual, como extensión de Chrome, Safari y Edge y como app de macOS y Windows. El MCP server y las configuraciones Border van por el portal de InCountry y requieren una cuenta con un entorno activado.

### ¿Cómo anonimizar datos antes de enviarlos a ChatGPT?

Con la extensión de escritorio no hay que configurar nada: detecta y sustituye en local antes de que el texto salga del navegador. Con código, la vía es llamar a la tool `cloak` del MCP server antes de construir el prompt y a `uncloak` sobre la respuesta, guardando el `id` de sesión entre ambas.

### ¿Se puede usar AgentCloak con Claude Code?

Sí, instalando la skill con `npx skills add agentcloak/skill`. Queda en `.claude/skills/` y funciona en dos modos: anonimizar un valor puntual, o añadir las llamadas de cloaking a tu propio código. También se instala para Cursor, Codex, Cline, Copilot, Windsurf, Roo Code y Continue.

### ¿Qué diferencia hay entre AgentCloak Desktop y el MCP server?

Cubren campos distintos. La extensión detecta nombres, correos, teléfonos, URLs, identificadores fiscales, cuentas bancarias y direcciones. La tool `cloak` del MCP server reconoce ocho campos: nombre, edad, género, peso, unidad de peso, ubicación, condición médica y datos financieros. Para correo, teléfono o dirección por API hay que usar las configuraciones Border.

### ¿El cloaking es reversible?

Sí, esa es la diferencia con una redacción sin más. La tool `uncloak` restaura los valores originales a partir del `id` que devolvió `cloak`, lo que implica que el mapeo se conserva del lado del servidor.

## En resumen

La idea que vale la pena llevarse, más allá de este producto concreto, es que el punto de intercepción correcto para la PII es el borde del prompt, no la base de datos. Un MCP server con dos tools, `cloak` y `uncloak`, es una forma sorprendentemente pequeña de poner ese borde donde toca: una función, un `fetch`, ninguna dependencia.

Antes de adoptarlo, comprueba dos cosas contra tu caso: que los campos que te importan estén entre los ocho que cubre la tool `cloak`, y que el modo de despliegue que eliges deje el mapeo donde tu política de datos exige que esté.

## Fuentes

- [AgentCloak Developers Overview](https://incountry.com/developers/agentcloak-developers-overview/), InCountry.
- [Tutorial del MCP Server de AgentCloak](https://docs.incountry.com/agentcloak/mcp-server-tutorial/), documentación de InCountry.
- [agentcloak/skill](https://github.com/agentcloak/skill) en GitHub: `README.md`, `skills/agentcloak/SKILL.md`, `package.json` y `.claude-plugin/marketplace.json`.
- [agentcloak-skill](https://www.npmjs.com/package/agentcloak-skill) en el registro de npm.
- [AgentCloak Desktop](https://incountry.com/products/agentcloak-desktop/), página de producto de InCountry.
- [AgentCloak Launches AgentCloak Desktop, Free Sovereign AI That Cloaks Private Data Before It Reaches Popular AI Chatbots](https://www.financialcontent.com/article/bizwire-2026-9-18-agentcloak-launches-agentcloak-desktop-free-sovereign-ai-that-cloaks-private-data-before-it-reaches-popular-ai-chatbots), comunicado de Business Wire del 18 de septiembre de 2026.
- [InCountry raises $10 million in funding and launches AgentCloak AI agent data protection](https://www.businesswire.com/news/home/20250922579301/en/InCountry-raises-$10-million-in-funding-and-launches-AgentCloak-AI-agent-data-protection), Business Wire, 22 de septiembre de 2025.

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://www.angelcruz.dev/sitemap.md)

Canónico HTML: [https://www.angelcruz.dev/post/agentcloak-pii-agentes-ia](https://www.angelcruz.dev/post/agentcloak-pii-agentes-ia)
