kalu in your CRM and in your AI assistant
kalu already knows which companies are your clients, your suppliers and your competitors. Connected to your AI assistant, it answers with the news that affects them; connected to your CRM, it puts each story on the account's record. Always with the original source one click away.
Claude, ChatGPT, Cursor and any MCP-compatible assistant can read your kalu news: anyone in an organization with a current subscription can connect it. The CRM connects through a signed webhook or a read-only API, with the subscription, Founding Member included.
Who it's for
Three questions kalu answers in each person's assistant, with the story and its source.
- The sales director
- “Prepare me for my meeting with Nemak” or “which client should I call today and why?”
- The latest on each account before picking up the phone, and the concrete reason to call.
- Procurement
- “What risks do I see in my suppliers this month?”
- Strikes, sanctions, bankruptcies and price changes in the chain, before they reach the purchase order.
- Risk or the law firm
- “What came out in the Official Gazette today that affects my clients?”
- What the government published and whom it affects, with the official source. kalu informs; it doesn't advise.
Connect kalu to your AI assistant
kalu watches established press and official sources for your company and delivers only what affects your business. The connector lets your assistant read exactly that: ask what happened with a client before a meeting, or what your competitors did this week, and it answers with the stories kalu already verified, each with the URL of the original publication.
https://kalu.lat/mcpIn claude.ai and Claude for desktop
- Open Settings, Connectors, and choose Add custom connector.
- Name it kalu and paste the address https://kalu.lat/mcp.
- Click Connect. kalu asks you to sign in with your work account and shows what your assistant will be able to read.
- Click Allow. You go back to Claude with kalu connected.
- In a conversation, turn kalu on from the tools menu and ask, for example: which companies does kalu watch?
In ChatGPT
- Open Settings, Connectors, Advanced, and turn on developer mode.
- Create a connector with the address https://kalu.lat/mcp and OAuth authentication.
- Sign in to kalu when asked and click Allow.
- In a conversation, pick kalu in the tools and ask.
In Claude Code, Cursor and VS Code
- With your kalu account: add the address and sign in when the client asks (in Claude Code, with the /mcp command).
- Or with an organization key: an owner or admin creates it in Settings, Connect your CRM, and it is sent as the header Authorization: Bearer kalu_live_…. Keys come with the subscription, Founding Member included.
claude mcp add --transport http kalu https://kalu.lat/mcpclaude mcp add --transport http kalu https://kalu.lat/mcp \
--header "Authorization: Bearer kalu_live_…"{
"mcpServers": {
"kalu": {
"type": "http",
"url": "https://kalu.lat/mcp",
"headers": {
"Authorization": "Bearer kalu_live_…"
}
}
}
}What it can look up
Six tools, all read-only. Your assistant picks them on its own from what you ask.
- radar
- The companies kalu watches for your organization, each one once, with all its types (a company can be both client and supplier) and its domain.
- noticias
- The stories kalu delivered to you, newest first, with date and category filters. Each with its headline, summary, outlet and original URL.
- noticias_de_empresa
- The stories that name one company on your radar, by its domain. What you need before a call.
- buscar_noticias
- The stories about a topic, for example “steel tariffs”, with date and category filters.
- resumen_del_dia
- Straight to the Point: the five stories of the day, one per category, as on the kalu screen.
- notas_guardadas
- The stories you saved in kalu. They are yours, not the team's; you need to connect with your account.
- Who can connect it
- Anyone in an organization with a current kalu subscription, or with complimentary access. You don't need to be an admin. A kalu legal law firm connects the same way. Each person connects their own assistant with their own account, and sees their organization's news, never another's.
- Read-only
- The connector doesn't change your radar, your settings or anything in your account, and it doesn't search the web on the spot: it answers with what kalu already read and verified. The text of each story reaches your assistant marked as third-party content, so it reads it as data and not as instructions.
- How access is cut off
- Remove the connector from your assistant's settings and it stops reading right away. Someone who leaves your organization in kalu, or an organization whose subscription ends, loses access on their next request: each access lasts one hour and each renewal checks the account again. If you need to cut every connection at once, write to us and kalu invalidates them all.
Privacy, terms and support
Privacy noticeTerms and conditionsContact support
How it works
- 1
Paste a URL
In Settings, Connect your CRM, paste the webhook URL your CRM or your n8n, Zapier or Make flow gives you. kalu sends a signed test right away.
- 2
kalu matches by domain
When a news item names a company on your radar, the payload carries its name and domain. That is the key HubSpot, Salesforce and Pipedrive use to find the account.
- 3
The note arrives with its source
Headline, summary, outlet and the URL of the original publication. Without a verifiable source the item is not sent: the same rule as the feed.
Step by step, by CRM
All three recipes use n8n, which you can self-host for free and which has native nodes for the three CRMs. The base flow already verifies the signature; you only add your CRM's node. Zapier and Make work with the same webhook URL.
HubSpot
- Import the base flow into n8n and copy the production URL of its Webhook node.
- Paste it into kalu, in Settings, with HubSpot selected. Copy the signing secret that appears and store it in the flow's credential.
- After the signature check, add a HubSpot node: Company, Search By Domain, with empresa.dominio.
- Add another HubSpot node that creates a note (Engagement, type note) associated with that company, with the headline, summary and fuente.url in the body.
- Press Send test in kalu: the test note appears on the radar company that has a domain.
Salesforce
- Import the base flow into n8n and connect your Salesforce credential.
- Paste the Webhook URL into kalu with Salesforce selected and store the signing secret in the flow.
- Add a Salesforce node with a SOQL search: the Account whose Website field contains empresa.dominio.
- Add another Salesforce node that creates a Task related to that Account (WhatId), with the headline as subject and the source in the description.
- Press Send test in kalu and check the account's activity.
Pipedrive
- Import the base flow into n8n and connect your Pipedrive credential.
- Paste the Webhook URL into kalu with Pipedrive selected and store the signing secret.
- Add a Pipedrive node: Organization, Search, with empresa.nombre (or the custom field where you keep the domain).
- Add another Pipedrive node: Note, Create, with the org_id found, the headline, the summary and the source.
- Press Send test in kalu: the note appears on the organization.
For developers
If your team runs its own system, this is everything it needs.
The payload of each delivery
A JSON POST. The X-Kalu-Event header names the event (noticia.nueva, alerta.urgente or prueba) and X-Kalu-Delivery is unique per delivery, so you can drop repeats.
{
"evento": "noticia.nueva",
"version": 1,
"enviado": "2026-10-15T15:02:11.000Z",
"id": "6f1c2b9e-4d1a-4a4a-9b9b-2f7e0c1d5a31",
"titulo": "Grupo Bimbo invertirá 300 millones de dólares en una planta en Nuevo León",
"resumen": "La planta abrirá en 2027 y duplicará su capacidad de distribución en el noreste.",
"categoria": "industria_cliente",
"urgente": false,
"publicada": "2026-10-15T12:00:00.000Z",
"fuente": {
"url": "https://www.eleconomista.com.mx/empresas/bimbo-planta-nuevo-leon",
"medio": "El Economista"
},
"kalu_url": "https://kalu.lat/noticia/grupo-bimbo-invertira-6f1c2b9e-4d1a-4a4a-9b9b-2f7e0c1d5a31",
"empresa": {
"nombre": "Grupo Bimbo",
"dominio": "grupobimbo.com",
"relacion": "cliente"
}
}Verify the signature
X-Kalu-Signature carries t (the time in seconds) and v1, the HMAC-SHA256 of your secret over t, a dot and the body exactly as received. Reject signatures older than five minutes. Reply 2xx to confirm; after ten failures in a row kalu pauses delivery and tells you in Settings.
import crypto from "node:crypto";
// cuerpo: el texto EXACTO que llegó, antes de parsearlo.
export function esDeKalu(cuerpo, cabecera, secreto) {
const partes = Object.fromEntries(cabecera.split(",").map((p) => p.split("=")));
const t = Number(partes.t);
if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
const esperada = crypto.createHmac("sha256", secreto).update(`${t}.${cuerpo}`).digest("hex");
return partes.v1?.length === esperada.length &&
crypto.timingSafeEqual(Buffer.from(partes.v1), Buffer.from(esperada));
}import hashlib, hmac, time
def es_de_kalu(cuerpo: bytes, cabecera: str, secreto: str) -> bool:
partes = dict(p.split("=", 1) for p in cabecera.split(","))
t = int(partes.get("t", "0"))
if abs(time.time() - t) > 300:
return False
esperada = hmac.new(secreto.encode(), f"{t}.".encode() + cuerpo, hashlib.sha256).hexdigest()
return hmac.compare_digest(partes.get("v1", ""), esperada)The read API
For the CRM that prefers to ask. Create a key in Settings and send it as a Bearer token. Read only, 60 calls per minute per key.
- GET /empresas/{dominio}/noticias
- The news that names a company on your radar. What a card on the account record needs.
- GET /noticias
- Everything for your organization, paginated, for syncing.
- GET /radar
- The companies kalu watches, with their domain, so you know which ones to match.
curl "https://rernregrsxvgtgmscdvf.supabase.co/functions/v1/api-v1/v1/empresas/grupobimbo.com/noticias?desde=2026-10-01" \
-H "Authorization: Bearer kalu_live_…"Errors have a fixed shape: 401 invalid key, 402 no subscription, 403 the package does not include the API, 404, 422 and 429.
What doesn't change when it leaves kalu
The source travels with every note
The URL of the original publication goes in the webhook and in the API. A note without a verifiable source is not sent.
Each organization sees its own
The organization comes from the key, not from a parameter. A key only reads its own organization's news.
Credentials are not stored in the clear
Only a hash of each key is stored. The key and the secret are shown once, and revoked or rotated in one click.
Read only
Neither the webhook nor the API writes to your radar. What goes out is what kalu already read and verified.
Which package includes it
The connector for your AI assistant comes with any kalu subscription. The CRM connection, the API and organization keys are included too, from Founding Member up, at no extra cost.