Use Cold Leads desde Cursor, Claude Desktop y Windsurf a través de MCP
- Para quién
- Desarrolladores que usan asistentes de IA en Cursor, Claude Desktop o Windsurf
- El problema
- Copiar direcciones entre un asistente, un CRM y una herramienta de verificación es lento y propenso a errores, y un asistente al que se le piden contactos se inventará algunos sin reparo.
- La solución
- Un asistente conectado puede gestionar sus contactos, importar filas estructuradas, leer conversaciones sincronizadas, preparar plantillas y borradores de campaña y configurar formularios web. El envío exige confirmación expresa del usuario y se somete a las protecciones de consentimiento, bajas, DNC y límites de Cold Leads.
- Qué obtiene
- Un asistente que trabaja con sus contactos, buzón y borradores de campaña mediante MCP o el SDK de Node.
Las direcciones, los identificadores y los resultados de los ejemplos son ilustrativos. example.com está reservado para documentación, así que una comprobación real de estas direcciones devuelve invalid.
Los ejemplos de código son iguales en todos los idiomas; sus comentarios están en inglés.
Qué ofrece el servidor
| Herramienta | Qué hace | Coste |
|---|---|---|
| search_leads | Contactos que ya están en su CRM de Cold Leads en el dominio de una empresa (subdominios incluidos), con una palabra clave de rol opcional que se compara con el nombre, la parte local del correo, las etiquetas, las notas y el tipo de contacto. Devuelve correo, nombre, empresa, teléfono, fase, etiquetas, verificación y do_not_contact. | Gratis |
| verify_email | Comprobaciones de sintaxis, dominio desechable, cuenta de rol y MX, más la comprobación SMTP del buzón y de accept-all cuando Cold Leads puede abrir una conexión SMTP con el servidor de correo del destinatario. Devuelve validity, score, reasons, catch_all, disposable y role_account. | 1 crédito |
| CRM, bandeja, plantillas, campañas y herramientas web | Importe y actualice contactos (hasta 100 filas estructuradas por llamada; el asistente procesa CSV/XLSX). Lea conversaciones sincronizadas y gestione plantillas y borradores; los mensajes individuales y campañas solo se envían tras la aprobación humana. Los formularios web se guardan como inquiry, no como consentimiento automático para prospección en frío. | Gratis; se aplican límites de envío |
| provision_account_and_get_payment_link, check_provisioning_status | Alta sin clave: un enlace de pago de Stripe para el propietario humano y, después, la clave de API una sola vez. Solo en el servidor local. | Sin créditos |
Cold Leads no tiene una base de datos externa de personas ni empresas. MCP solo accede al espacio conectado. Los archivos deben convertirse a filas estructuradas antes de importar; las importaciones no envían correo. Los formularios web se marcan como inquiry; verificar no equivale a consentimiento. Las campañas siguen como borradores hasta que una persona las revise y las inicie.
- Servidor local (stdio): npx -y --allow-git=root github:anttka4cz/mcp-server-coldleads con COLDLEADS_API_KEY en su entorno. No está publicado en npm; npx lo instala desde GitHub. Necesita Node.js 20 o posterior. npm 12 bloquea las instalaciones desde git salvo que usted las permita, y --allow-git=root lo hace para este comando; npm 10 también acepta la opción.
- Endpoint alojado: https://coldleads.app/api/mcp, MCP Streamable HTTP. Use una clave API secreta o OAuth de ChatGPT. Las herramientas gestionan contactos, conversaciones sincronizadas, plantillas y borradores de campaña, envíos aprobados, formularios web, búsqueda y verificación de correo.
- La clave es una clave secreta (sk_…) de Ajustes → Claves de API. La API, y con ella MCP, forma parte del plan Business.
Cursor
Ponga el servidor en ~/.cursor/mcp.json para usarlo en todos los proyectos, o en .cursor/mcp.json dentro de un solo proyecto. El servidor local:
{
"mcpServers": {
"coldleads": {
"command": "npx",
"args": ["-y", "--allow-git=root", "github:anttka4cz/mcp-server-coldleads"],
"env": { "COLDLEADS_API_KEY": "sk_your_secret_key" }
}
}
}Cursor también se conecta a servidores remotos con cabeceras personalizadas, así que el endpoint alojado funciona sin Node.js. Cursor resuelve ${env:NAME} en url y headers, lo que mantiene la clave fuera del archivo:
{
"mcpServers": {
"coldleads": {
"url": "https://coldleads.app/api/mcp",
"headers": { "Authorization": "Bearer ${env:COLDLEADS_API_KEY}" }
}
}
}Claude Desktop
- Abra el menú Claude en la barra de menús del sistema (no los ajustes dentro de la ventana del chat), elija Settings…, abra la pestaña Developer y haga clic en Edit Config.
- El archivo es ~/Library/Application Support/Claude/claude_desktop_config.json en macOS y %APPDATA%\Claude\claude_desktop_config.json en Windows. Añada el bloque de abajo y guarde.
- Cierre Claude Desktop por completo y vuelva a abrirlo; solo carga los servidores MCP al arrancar.
{
"mcpServers": {
"coldleads": {
"command": "npx",
"args": ["-y", "--allow-git=root", "github:anttka4cz/mcp-server-coldleads"],
"env": { "COLDLEADS_API_KEY": "sk_your_secret_key" }
}
}
}Claude Desktop inicia los servidores locales desde este archivo. Los servidores remotos, en cambio, se añaden como conectores en los ajustes de la aplicación, y enviar una cabecera con clave de API desde un conector es una beta que solo tienen algunas organizaciones, así que el servidor local es la vía que funciona para todos.
Windsurf (Devin Desktop) y Claude Code
Windsurf pasó a ser Devin Desktop el 2 de junio de 2026. En el panel Cascade, abra el menú … (Actions) arriba a la derecha y haga clic en Open MCP config file, en la sección MCPs; después añada el mismo bloque mcpServers que para Cursor (el servidor local) y guarde. La documentación de Devin indica ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json en Windows) para este archivo; las versiones de Windsurf anteriores al cambio de nombre leen ~/.codeium/windsurf/mcp_config.json. Los servidores remotos llevan url (o serverUrl) con headers:
{
"mcpServers": {
"coldleads": {
"url": "https://coldleads.app/api/mcp",
"headers": { "Authorization": "Bearer sk_your_secret_key" }
}
}
}En Claude Code, añada cualquiera de las dos variantes desde el terminal:
# local stdio server (Node.js 20 or newer)
claude mcp add --env COLDLEADS_API_KEY=sk_your_secret_key --transport stdio coldleads -- npx -y --allow-git=root github:anttka4cz/mcp-server-coldleads
# or the hosted endpoint
claude mcp add --transport http coldleads https://coldleads.app/api/mcp --header "Authorization: Bearer sk_your_secret_key"Prompts que encajan con las herramientas reales
- «Busca en mi CRM de Cold Leads contactos de example.com con la etiqueta cto y verifica sus direcciones.» (search_leads con domain example.com y role cto; después verify_email para cada lead sin do_not_contact: 1 crédito por dirección.)
- «¿Cuáles de mis contactos de Cold Leads en example.com están marcados como do_not_contact?» (Solo search_leads, gratis.)
- «Verifica anna@example.com y dime si se comprobó el propio buzón.» (verify_email; la respuesta está en reasons: ok significa que un servidor de correo aceptó el buzón, smtp_unreachable significa que no se comprobó.)
- «Comprueba estas cinco direcciones y clasifícalas en enviar, revisar y descartar según sus códigos de motivo.» (verify_email cinco veces, 5 créditos.)
- Con el servidor local y todavía sin clave: «Configura Cold Leads para owner@example.com.» (provision_account_and_get_payment_link devuelve un enlace de pago sobre el que decide usted, la persona.)
La palabra clave de rol se compara con el nombre, la parte local del correo, las etiquetas, las notas y el tipo de contacto; Cold Leads no tiene un campo de cargo. Etiquete los contactos con su rol (cto, ceo, sales) si quiere que las búsquedas por rol funcionen. Los resultados de las herramientas llegan como JSON compacto:
{
"status": "success",
"domain": "example.com",
"count": 1,
"source": "crm",
"leads": [
{
"email": "jan.novak@example.com",
"name": "Jan Novák",
"company": "Acme",
"stage": "lead",
"tags": ["cto"],
"verification": { "status": "valid", "score": 75 },
"do_not_contact": false
}
]
}{
"status": "success",
"email": "jan.novak@example.com",
"validity": "valid",
"catch_all": null,
"score": 75,
"reasons": ["smtp_unreachable"],
"disposable": false,
"role_account": false
}Pruebe el endpoint alojado desde un terminal
El endpoint no guarda estado, así que un único POST funciona sin el handshake initialize. También es una forma rápida de confirmar que una clave es válida y pertenece a una cuenta Business.
# list the tools of the hosted endpoint (free; counts toward 120 requests per minute)
curl -s https://coldleads.app/api/mcp \
-H "Authorization: Bearer $COLDLEADS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# call verify_email once (1 credit)
curl -s https://coldleads.app/api/mcp \
-H "Authorization: Bearer $COLDLEADS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"verify_email","arguments":{"email":"anna@example.com"}}}'Límites y costes
- search_leads es gratis y devuelve hasta 50 contactos por llamada (10 por defecto).
- verify_email cuesta 1 crédito por llamada, incluidos los resultados servidos desde la caché de 30 días. Responde en unos 5 segundos: el endpoint alojado da a cada comprobación un margen de 4,5 segundos y el servidor local pide 4 segundos. Cuando se agota el margen, el resultado es risky con el motivo timeout y no se guarda en caché; POST /api/v1/verify acepta un timeout_ms de hasta 30 000 para una comprobación más larga.
- Cada petición al endpoint alojado, incluidas initialize y tools/list, cuenta para las 120 peticiones por minuto de la clave. El servidor local solo llama a la API para las llamadas a herramientas.
- El plan Business cuesta $99 al mes e incluye 10 000 créditos al mes; los paquetes extra de 1 000 créditos cuestan $5.
Preguntas frecuentes
¿Puede el asistente encontrar personas nuevas en una empresa?
No. Cold Leads no tiene una base de datos de personas ni de empresas. search_leads solo cubre los contactos de su propio espacio de trabajo de Cold Leads. Para un nombre que ya conoce, POST /api/v1/find devuelve la dirección más probable, marcada como pattern salvo que un servidor de correo haya confirmado el buzón.
¿Servidor local o endpoint alojado?
El servidor local funciona en cualquier cliente que pueda iniciar un comando y además gestiona el alta sin clave. El endpoint alojado no necesita Node.js, pero solo funciona en clientes que puedan enviar una cabecera Authorization personalizada. Ambos ejecutan las mismas comprobaciones.
¿Por qué catch_all es null?
catch_all solo se conoce cuando un servidor de correo respondió a la comprobación, lo que se ve en un último motivo ok, catch_all o mailbox_missing. En los demás casos, tanto el endpoint alojado como el servidor local devuelven null: accept-all no se probó, así que lea reasons para saber qué se comprobó.
¿Dónde va mi clave?
En el bloque env o en la cabecera de su configuración MCP local. El servidor la envía a coldleads.app como Authorization: Bearer. No la pegue en un chat y regenérela en Ajustes → Claves de API si se filtra.