Use NaLU validators natively inside Claude Desktop, Claude Code and any MCP-compatible client.
Model Context Protocol (MCP) is an open standard that lets AI agents call external tools natively.
The NaLU AI MCP server runs locally via stdio and calls the NaLU REST API β your API key never leaves your machine.
Clone the MCP server and install dependencies:
git clone https://git.naluai.dev/nalu-mcp.git cd nalu-mcp npm install
Edit %APPDATA%\Claude\claude_desktop_config.json (Windows)
or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"nalu": {
"command": "node",
"args": ["/path/to/nalu-mcp/index.mjs"],
"env": {
"NALU_API_KEY": "YOUR_API_KEY"
}
}
}
}
Restart Claude Desktop after saving. Validators will appear automatically as available tools.
claude mcp add nalu \ --command node \ --args "/path/to/nalu-mcp/index.mjs" \ --env NALU_API_KEY=YOUR_API_KEY
After connecting, your AI agent sees these tools:
| Tool | Description | Credits |
|---|---|---|
| extract_name | Extracts full person name from dialogue | 2 cr |
| extract_email | Extracts email, corrects common typos | 1 cr |
| extract_yes_no | Detects yes/no across phrasing styles | 2 cr |
| extract_birthdate | Extracts birth date, calculates current age | 2 cr |
| extract_postal_code | International postal code (non-Brazil) | 1 cr |
| extract_company_name | Extracts company name (LLC, Inc, GmbH...) | 2 cr |
| detect_handoff | Detects intent to speak with a human agent | 2 cr |
| detect_cancel_intent | Classifies cancellation intent type | 2 cr |
| analyze_reply | Full conversational context analysis | 5 cr |
| extract_cpf | Extracts and validates Brazilian CPF (mod 11) | 1 cr |
| extract_cnpj | Extracts and validates Brazilian CNPJ (mod 11) | 1 cr |
| extract_cep | Extracts Brazilian ZIP (CEP), returns full address | 3 cr |
| extract_phone_br | Extracts Brazilian phone with area code | 1 cr |
| extract_plate_br | Extracts Brazilian plate (Mercosul or old format) | 1 cr |
All validators (except analyze_reply) accept:
| Parameter | Type | Description |
|---|---|---|
| agent_input | string * | The agent's message or question |
| user_input | string * | The user's reply |
| language | string | Conversation language (default: pt-BR) |
analyze_reply uses agent_message and user_reply instead.
Prompt to Claude:
"The user said 'my name is John Smith, can you confirm?'. Use extract_name to validate it."
Claude calls automatically:
extract_name({
"agent_input": "What is your full name?",
"user_input": "my name is John Smith, can you confirm?"
})
Response:
{
"obtained": true,
"extracted_value": "John Smith",
"confidence": "high",
"certain": true
}