Kaidn
Pontuação de fraude e abuso para operadores que não podem justificar uma equipe empresarial de fraude.
Documentação
Kaidn MCP
Servidor de Protocolo de Contexto de Modelo (MCP) para a API de pontuação de fraude Kaidn.
Investigue fraudes em linguagem simples — "por que este cadastro foi bloqueado?", "o que mais este dispositivo tocou?", "o que está na fila de revisão esta manhã?"
- Evidência, não apenas uma pontuação. Cada motivo carrega os números brutos por trás dele, para que um modelo possa explicar um veredito em vez de adivinhar.
- Somente leitura por padrão. Nada altera seu tenant, a menos que você opte por isso.
- Protegido por cota. Um agente em loop não pode gastar seu mês em dez minutos.
- Qualquer cliente. MCP é um protocolo aberto — stdio localmente, HTTP Streamable para agentes remotos e hospedados.
Requisitos
Node.js 18 ou mais recente e uma chave de API do seu painel Kaidn.
Começando
Primeiro, instale o servidor Kaidn MCP com seu cliente. A configuração padrão funciona na maioria das ferramentas:
{
"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
Adicione a configuração padrão a claude_desktop_config.json e reinicie o Claude.
Configurações → Desenvolvedor → Editar Configuração abre o arquivo.
Cursor
Configurações → MCP → Adicionar novo servidor MCP, ou adicione a configuração padrão a
.cursor/mcp.json no seu projeto (ou ~/.cursor/mcp.json para todos os projetos).
VS Code
code --add-mcp '{"name":"kaidn","command":"npx","args":["@kaidn/mcp@latest"],"env":{"KAIDN_API_KEY":"your_key"}}'
Windsurf
Adicione a configuração padrão a ~/.codeium/windsurf/mcp_config.json.
Cline
Adicione a configuração padrão a cline_mcp_settings.json via o ícone de Servidores MCP →
Configurar Servidores MCP.
Zed
Adicione a settings.json sob context_servers, usando o mesmo comando, args e
env da configuração padrão.
Qualquer outra coisa
Qualquer cliente MCP aceita um bloco command, args e env. Use a configuração padrão acima. Se o cliente só puder alcançar o servidor pela rede em vez de iniciar um processo, veja Streamable HTTP.
Configuração
| Opção | Variável de ambiente | Padrão | Finalidade |
|---|---|---|---|
KAIDN_API_KEY | obrigatório | Sua chave secreta. Somente ambiente — nunca uma flag, nunca um argumento de ferramenta. | |
KAIDN_API_URL | https://api.kaidn.io | URL base da API | |
--allow-writes | KAIDN_MCP_ALLOW_WRITES=1 | desligado | Registrar as ferramentas de mutação |
KAIDN_MCP_MAX_QUOTA_CALLS | 100 | Teto de cota por processo | |
--http | KAIDN_MCP_TRANSPORT=http | stdio | Servir HTTP Streamable |
--host <addr> | KAIDN_MCP_HOST | 127.0.0.1 | Endereço de bind HTTP |
--port <n> | KAIDN_MCP_PORT | 8765 | Porta HTTP |
KAIDN_MCP_HTTP_TOKEN | não definido | Exigir Authorization: Bearer em HTTP | |
--help | Mostrar uso | ||
--version | Mostrar a versão |
Precedência: flags de CLI sobrescrevem variáveis de ambiente.
A chave de API é deliberadamente somente ambiente. Uma chave passada como flag vaza em listagens de processos e histórico de shell.
Transportes
| Transporte | Use para | Endpoint |
|---|---|---|
| stdio (padrão) | clientes locais que iniciam um subprocesso | — |
| HTTP Streamable | agentes remotos, contêineres, qualquer coisa fora da máquina | POST /mcp |
HTTP+SSE está deliberadamente ausente: descontinuado na especificação de 2025-03-26 e encerrado
em junho de 2026.
HTTP Streamable
npx @kaidn/mcp@latest --http --port 8765
Sem estado — um servidor novo por requisição, nada compartilhado entre chamadores — então
fica atrás de um balanceador de carga sem surpresas. GET /health não é autenticado
para que um orquestrador possa verificar a vivacidade sem segurar o 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
Build multi-estágio, executa como o usuário não privilegiado node, com healthcheck.
Segurança
O servidor guarda sua chave de API. Quem puder alcançá-lo pode gastar sua cota, então os padrões são conservadores e as proteções falham fechadas em vez de avisar.
- Faz bind em
127.0.0.1e se recusa a iniciar em uma interface mais ampla a menos queKAIDN_MCP_HTTP_TOKENesteja definido. Ele para com uma explicação em vez de expor silenciosamente sua conta. - Somente leitura por padrão.
add_to_listelabel_outcomeexistem apenas com--allow-writes. set_configeforget_subjectnunca são expostos, em nenhum modo. Um muda silenciosamente o veredito em cada evento futuro; o outro é apagamento irreversível de GDPR. Ambos pertencem ao painel, diante de um humano.- Teto de cota por processo, com orçamento restante relatado em cada resposta com custo. Uma reserva que ultrapassaria é recusada diretamente em vez de parcialmente gasta.
- A chave nunca cruza o limite da ferramenta — não como parâmetro, não na saída, não em um erro.
Ferramentas
Duas coisas governam cada ferramenta: se ela gasta cota e se ela muda algo.
Somente leitura — disponível por padrão
| Ferramenta | Custo | O que faz |
|---|---|---|
get_stats | grátis | Veredito, pontuação e resumos de motivo em uma janela móvel. Comece aqui. |
list_events | grátis | Eventos pontuados, mais recentes primeiro, filtráveis por veredito ou tipo, pesquisáveis por fingerprint ou id de usuário |
explain_event | grátis | Cada verificação que disparou em um evento, com a evidência bruta |
triage_queue | grátis | Tudo em review, maior pontuação primeiro |
get_config | grátis | Pesos e limites efetivos para este tenant |
investigate_entity | 1 linha¹ | Enriquecimento, reputação de rede e eventos relacionados para uma entidade |
check_email | 1 linha | Domínio descartável, entregabilidade, pontuação de fraude, histórico de abuso |
check_ip | 1 linha | Proxy, VPN, Tor, ASN de datacenter, geo, histórico de abuso |
check_phone | 1 linha | Validade, tipo de linha, operadora, pontuação de fraude |
score_event | 1 linha | Pontuar um novo evento (também o registra) |
¹ Grátis quando a entidade é um device_id; enriquecimento só custa em email ou IP.
Mutação — exige --allow-writes
| Ferramenta | O que faz |
|---|---|
add_to_list | Adicionar uma entidade à lista de permitidos ou bloqueados |
label_outcome | Relatar um resultado confirmado de fraude / chargeback / legítimo |
Exemplos práticos
As ferramentas são projetadas para serem encadeadas. Estes são os fluxos para os quais foram construídas.
Triagem matinal
Você: O que aconteceu durante a noite e o que precisa de mim?
O modelo chama get_stats para o formato das últimas 24 horas, depois
triage_queue para os eventos em review, depois explain_event no
pior. Você recebe uma lista classificada com o raciocínio anexado, em vez de um
painel que ainda precisa ler.
"Por que este cliente foi bloqueado?"
Você: Evento
evt_8f21c— um cliente diz que foi bloqueado erroneamente.
explain_event retorna cada verificação que disparou com sua evidência bruta — o
ASN de datacenter que correspondeu, quantas contas compartilharam o dispositivo, a contagem
de velocidade. Suficiente para responder ao cliente ou concluir que a regra estava errada e
precisa de ajuste.
Trabalhando para fora a partir de um sinal
Você:
194.x.x.xé um caso isolado ou parte de um anel?
investigate_entity retorna enriquecimento e reputação de rede para o IP mais
cada evento recente em que aparece. Se os mesmos ids de dispositivo continuam recorrentes, isso é
um anel em vez de uma coincidência.
Verificando uma mudança de regra antes de fazê-la
Você: Se eu reduzisse o peso de velocidade, o que deixaria de ser bloqueado?
get_config lê os pesos atuais; list_events com verdict: "block"
mostra o que está sendo capturado atualmente. O modelo pode dizer quais desses dependem
da verificação que você está prestes a enfraquecer.
Tratamento de erros
Falhas retornam como erros de ferramenta com uma mensagem legível, não exceções — o modelo pode agir sobre elas.
| Você vê | Significado | Correção |
|---|---|---|
KAIDN_API_KEY is not set | Servidor iniciou sem chave | Defina-a no bloco env do cliente |
Kaidn error: 401 … | Chave rejeitada | Gire ou copie novamente do painel |
Kaidn error: 429 … | Limitado por taxa | Desacelere; a limitação por chave é por minuto |
Session quota ceiling reached (100/100 …) | A proteção parou uma execução cara | Aumente KAIDN_MCP_MAX_QUOTA_CALLS deliberadamente ou reinicie |
No event <id> in the most recent 200 events | Evento é mais antigo que a janela de varredura | Volte a página com list_events usando offset |
Supply exactly one of email, ip or device_id | Investigação ambígua | Pergunte sobre uma entidade por vez |
Refusing to bind <host> without authentication | HTTP não-loopback sem token | Defina KAIDN_MCP_HTTP_TOKEN ou faça bind em 127.0.0.1 |
Erros nunca contêm sua chave de API.
Solução de problemas
O cliente não mostra ferramentas.
Verifique o log MCP do cliente para a linha de inicialização. kaidn-mcp: ready (stdio, …)
no stderr significa que o servidor está ativo e o problema está no lado do cliente. Nada
geralmente significa que npx não conseguiu resolver o pacote ou o Node é mais antigo que 18.
Inicia e sai imediatamente.
Quase sempre um KAIDN_API_KEY ausente. A mensagem diz isso no stderr; alguns
clientes ocultam o stderr, então execute em um terminal para vê-lo.
add_to_list e label_outcome estão ausentes.
Funcionando como projetado. Eles precisam de --allow-writes.
set_config e forget_subject estão ausentes.
Também por design, e não estão disponíveis em nenhum modo. Veja
SECURITY.md.
O modo HTTP se recusa a iniciar. Você fez bind em algo diferente de loopback sem um token de portador. Isso é a proteção funcionando — o processo guarda sua chave de API.
Tudo está lento.
As verificações de enriquecimento fazem chamadas upstream ao vivo. get_stats, list_events,
explain_event e triage_queue são grátis e rápidas; prefira-as ao ler
histórico.
Verifique o servidor independentemente do cliente:
node dist/index.js --help # no key required
KAIDN_API_KEY=your_key npm start # should print a ready line
Suporte
- Bugs e solicitações de recursos: Issues do GitHub
- Segurança: security@kaidn.io — veja SECURITY.md
- Privacidade e tratamento de dados: PRIVACY.md
- A própria API: kaidn.io
Executar a partir do código-fonte
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 se inicia sem um cliente:
KAIDN_API_KEY=your_key npm start
Imprime kaidn-mcp: ready (stdio, read-only, quota ceiling 100) no stderr e
então espera no stdin — isso é o transporte MCP, então o silêncio está correto.
Por que a evidência importa
O motor do Kaidn é baseado em regras e explicável: cada motivo carrega os números
brutos por trás dele. Uma pontuação nua não dá nada para um modelo raciocinar, enquanto
checks[] com evidência anexada dá algo para explicar. Essa é a
diferença entre explain_event ser útil e ser decorativo.
As regras decidem. O modelo narra.
Projeto
- CONTRIBUTING.md — o que pertence aqui e as garantias que uma mudança não deve quebrar
- SECURITY.md — relato, modelo de ameaça, limitações conhecidas
- PRIVACY.md — o que passa, o que é armazenado, o que não é
- CODE_OF_CONDUCT.md
Licença
MIT