Kaidn

Puntuación de fraude y abuso para operadores que no pueden justificar un equipo empresarial de fraude.

Documentación

Kaidn

npm version MCP registry license MIT docs

Kaidn MCP

Servidor de Protocolo de Contexto de Modelo (MCP) para la API de puntuación de fraude Kaidn.

Investiga fraudes en lenguaje natural — "¿por qué se bloqueó este registro?", "¿qué más ha tocado este dispositivo?", "¿qué hay en la cola de revisión esta mañana?"

  • Evidencia, no solo una puntuación. Cada motivo lleva los números brutos detrás, para que un modelo pueda explicar un veredicto en lugar de adivinarlo.
  • Solo lectura por defecto. Nada cambia en tu tenant a menos que optes por ello.
  • Protegido por cuota. Un agente en un bucle no puede gastar tu mes en diez minutos.
  • Cualquier cliente. MCP es un protocolo abierto: stdio localmente, HTTP Streamable para agentes remotos y alojados.

Requisitos

Node.js 18 o superior, y una clave de API desde tu panel de Kaidn.


Primeros pasos

Primero, instala el servidor MCP de Kaidn con tu cliente. La configuración estándar funciona en la mayoría de las herramientas:

{
  "mcpServers": {
    "kaidn": {
      "command": "npx",
      "args": ["@kaidn/mcp@latest"],
      "env": { "KAIDN_API_KEY": "your_key" }
    }
  }
}
Claude Code
claude mcp add kaidn --env KAIDN_API_KEY=your_key -- npx @kaidn/mcp@latest
Claude Desktop

Añade la configuración estándar a claude_desktop_config.json, luego reinicia Claude. Configuración → Desarrollador → Editar Configuración abre el archivo.

Cursor

Configuración → MCP → Añadir nuevo servidor MCP, o añade la configuración estándar a .cursor/mcp.json en tu proyecto (o ~/.cursor/mcp.json para cada proyecto).

VS Code
code --add-mcp '{"name":"kaidn","command":"npx","args":["@kaidn/mcp@latest"],"env":{"KAIDN_API_KEY":"your_key"}}'
Windsurf

Añade la configuración estándar a ~/.codeium/windsurf/mcp_config.json.

Cline

Añade la configuración estándar a cline_mcp_settings.json mediante el icono de Servidores MCP → Configurar Servidores MCP.

Zed

Añade a settings.json bajo context_servers, usando el mismo comando, argumentos y env que la configuración estándar.

Cualquier otra cosa

Cualquier cliente MCP acepta un bloque de comando, argumentos y env. Usa la configuración estándar anterior. Si el cliente solo puede alcanzar el servidor a través de la red en lugar de lanzar un proceso, consulta HTTP Streamable.


Configuración

OpciónVariable de entornoPredeterminadoPropósito
KAIDN_API_KEYobligatorioTu clave secreta. Solo entorno — nunca una bandera, nunca un argumento de herramienta.
KAIDN_API_URLhttps://api.kaidn.ioURL base de la API
--allow-writesKAIDN_MCP_ALLOW_WRITES=1desactivadoRegistrar las herramientas de mutación
KAIDN_MCP_MAX_QUOTA_CALLS100Límite de cuota por proceso
--httpKAIDN_MCP_TRANSPORT=httpstdioServir HTTP Streamable
--host <addr>KAIDN_MCP_HOST127.0.0.1Dirección de enlace HTTP
--port <n>KAIDN_MCP_PORT8765Puerto HTTP
KAIDN_MCP_HTTP_TOKENsin definirRequerir Authorization: Bearer en HTTP
--helpMostrar uso
--versionMostrar la versión

Precedencia: Las banderas de CLI anulan las variables de entorno.

La clave de API es deliberadamente solo entorno. Una clave pasada como bandera se filtra en los listados de procesos y el historial del shell.


Transportes

TransporteÚsalo paraEndpoint
stdio (predeterminado)clientes locales que lanzan un subproceso—
HTTP Streamableagentes remotos, contenedores, cualquier cosa fuera de la máquinaPOST /mcp

HTTP+SSE está deliberadamente ausente: obsoleto en la especificación del 2025-03-26 y retirado en junio de 2026.

HTTP Streamable

npx @kaidn/mcp@latest --http --port 8765

Sin estado — un servidor nuevo por solicitud, nada compartido entre llamadores — por lo que se coloca detrás de un balanceador de carga sin sorpresas. GET /health no está autenticado para que un orquestador pueda verificar la disponibilidad sin tener el token.


Docker

docker build -t kaidn-mcp .
# stdio — behaves like the npx invocation
docker run -i --rm -e KAIDN_API_KEY=your_key kaidn-mcp

# HTTP — for remote agents
docker run --rm -p 8765:8765 \
  -e KAIDN_API_KEY=your_key \
  -e KAIDN_MCP_TRANSPORT=http \
  -e KAIDN_MCP_HOST=0.0.0.0 \
  -e KAIDN_MCP_HTTP_TOKEN=your_token \
  kaidn-mcp

Compilación de múltiples etapas, se ejecuta como el usuario no privilegiado node, con un healthcheck.


Seguridad

El servidor contiene tu clave de API. Quien pueda alcanzarlo puede gastar tu cuota, por lo que los valores predeterminados son conservadores y las protecciones fallan de forma cerrada en lugar de advertir.

  • Se enlaza a 127.0.0.1, y se niega a iniciar en una interfaz más amplia a menos que KAIDN_MCP_HTTP_TOKEN esté configurado. Se detiene con una explicación en lugar de exponer silenciosamente tu cuenta.
  • Solo lectura por defecto. add_to_list y label_outcome existen solo con --allow-writes.
  • set_config y forget_subject nunca se exponen, en ningún modo. Una cambia silenciosamente el veredicto en cada evento futuro; la otra es un borrado irreversible según el GDPR. Ambas pertenecen al panel, frente a un humano.
  • Límite de cuota por proceso, con el presupuesto restante informado en cada respuesta con costo. Una reserva que excedería se rechaza directamente en lugar de gastarse parcialmente.
  • La clave nunca cruza el límite de la herramienta — no como parámetro, no en la salida, no en un error.

Herramientas

Dos cosas gobiernan cada herramienta: si gasta cuota, y si cambia algo.

Solo lectura — disponible por defecto

HerramientaCostoQué hace
get_statsgratisVeredicto, puntuación y resúmenes de motivos en una ventana móvil. Empieza aquí.
list_eventsgratisEventos puntuados, más recientes primero, filtrables por veredicto o tipo, buscables por huella digital o ID de usuario
explain_eventgratisCada verificación que se activó en un evento, con la evidencia bruta
triage_queuegratisTodo en review, puntuación más alta primero
get_configgratisPesos y umbrales efectivos para este tenant
investigate_entity1 fila¹Enriquecimiento, reputación de red y eventos relacionados para una entidad
check_email1 filaDominio desechable, entregabilidad, puntuación de fraude, historial de abuso
check_ip1 filaProxy, VPN, Tor, ASN de centro de datos, geo, historial de abuso
check_phone1 filaValidez, tipo de línea, operador, puntuación de fraude
score_event1 filaPuntuar un nuevo evento (también lo registra)

¹ Gratis cuando la entidad es un device_id; el enriquecimiento solo cuesta en correo electrónico o IP.

Mutación — requiere --allow-writes

HerramientaQué hace
add_to_listAñadir una entidad a la lista de permitidos o bloqueados
label_outcomeReportar un resultado confirmado de fraude / contracargo / legítimo

Ejemplos prácticos

Las herramientas están diseñadas para encadenarse. Estos son los flujos para los que fueron construidas.

Triage matutino

Tú: ¿Qué pasó durante la noche, y qué necesita mi atención?

El modelo llama a get_stats para la forma de las últimas 24 horas, luego triage_queue para los eventos en review, luego explain_event en el peor. Obtienes una lista clasificada con el razonamiento adjunto, en lugar de un panel que aún tienes que leer.

"¿Por qué se bloqueó a este cliente?"

Tú: Evento evt_8f21c — un cliente dice que fue bloqueado incorrectamente.

explain_event devuelve cada verificación que se activó con su evidencia bruta — el ASN de centro de datos que coincidió, cuántas cuentas compartieron el dispositivo, el conteo de velocidad. Suficiente para responder al cliente, o para concluir que la regla era incorrecta y necesita ajuste.

Trabajando hacia afuera desde una señal

Tú: ¿Es 194.x.x.x un caso aislado o parte de un anillo?

investigate_entity devuelve enriquecimiento y reputación de red para la IP más cada evento reciente en el que aparece. Si los mismos ID de dispositivo se repiten, eso es un anillo en lugar de una coincidencia.

Verificando un cambio de regla antes de hacerlo

Tú: Si redujera el peso de velocidad, ¿qué dejaría de bloquearse?

get_config lee los pesos actuales; list_events con verdict: "block" muestra lo que se captura actualmente. El modelo puede decirte cuáles de esos dependen de la verificación que estás a punto de debilitar.


Manejo de errores

Los fallos vuelven como errores de herramienta con un mensaje legible, no excepciones — el modelo puede actuar sobre ellos.

VesSignificadoSolución
KAIDN_API_KEY is not setEl servidor se inició sin una claveConfigúrala en el bloque env del cliente
Kaidn error: 401 …Clave rechazadaRota o vuelve a copiarla desde el panel
Kaidn error: 429 …Límite de velocidadReduce la velocidad; la limitación por clave es por minuto
Session quota ceiling reached (100/100 …)La protección detuvo una ejecución costosaAumenta KAIDN_MCP_MAX_QUOTA_CALLS deliberadamente, o reinicia
No event <id> in the most recent 200 eventsEl evento es más antiguo que la ventana de escaneoRetrocede con list_events usando offset
Supply exactly one of email, ip or device_idInvestigación ambiguaPregunta sobre una entidad a la vez
Refusing to bind <host> without authenticationHTTP no loopback sin tokenConfigura KAIDN_MCP_HTTP_TOKEN, o enlaza 127.0.0.1

Los errores nunca contienen tu clave de API.


Solución de problemas

El cliente no muestra herramientas. Revisa el registro MCP del cliente para la línea de inicio. kaidn-mcp: ready (stdio, …) en stderr significa que el servidor está activo y el problema está en el lado del cliente. Nada en absoluto generalmente significa que npx no pudo resolver el paquete o Node es anterior a 18.

Se inicia, luego sale inmediatamente. Casi siempre falta KAIDN_API_KEY. El mensaje lo dice en stderr; algunos clientes ocultan stderr, así que ejecútalo en una terminal para verlo.

add_to_list y label_outcome faltan. Funciona como está diseñado. Necesitan --allow-writes.

set_config y forget_subject faltan. También por diseño, y no están disponibles en ningún modo. Consulta SECURITY.md.

El modo HTTP se niega a iniciar. Enlazaste algo que no es loopback sin un token de portador. Esa es la protección funcionando — el proceso contiene tu clave de API.

Todo es lento. Las verificaciones de enriquecimiento hacen llamadas upstream en vivo. get_stats, list_events, explain_event y triage_queue son gratis y rápidas; prefíelas al leer historial.

Verifica el servidor independientemente del cliente:

node dist/index.js --help                 # no key required
KAIDN_API_KEY=your_key npm start          # should print a ready line

Soporte


Ejecutar desde el código fuente

git clone https://github.com/Kaidn-io/kaidn-mcp.git
cd kaidn-mcp
npm install
npm run build
npm test
claude mcp add kaidn --env KAIDN_API_KEY=your_key -- node /absolute/path/to/kaidn-mcp/dist/index.js

Para verificar que se inicia sin un cliente:

KAIDN_API_KEY=your_key npm start

Imprime kaidn-mcp: ready (stdio, read-only, quota ceiling 100) en stderr y luego espera en stdin — ese es el transporte MCP, por lo que el silencio es correcto.


Por qué la evidencia importa

El motor de Kaidn es primero en reglas y explicable: cada motivo lleva los números brutos detrás. Una puntuación desnuda no le da nada al modelo para razonar, mientras que checks[] con evidencia adjunta le da algo que explicar. Esa es la diferencia entre que explain_event sea útil y que sea decorativo.

Las reglas deciden. El modelo narra.


Proyecto

Licencia

MIT