Saltar al contenido principal

MCP Server

El MCP Server de IQX Lookup permite a los asistentes de IA (Claude, Cursor, Windsurf, Codex, etc.) invocar las 12 herramientas de validacion de forma nativa a traves del Model Context Protocol. Un solo comando npx, sin paso de compilacion, sin codigo de cliente HTTP, sin parseo de JSON.

Por que MCP?

La integracion tradicional con una API requiere configurar un cliente HTTP, headers de autenticacion, serializacion JSON y manejo de errores. Con MCP, el asistente de IA invoca las herramientas de validacion de la misma forma que lee archivos o busca en la web: de forma nativa. Describes lo que necesitas en lenguaje natural y el asistente se encarga del resto.

Configuracion

Requisitos previos

Claude Desktop / Claude Code

Anade lo siguiente a tu configuracion MCP (claude_desktop_config.json o .claude.json):

{
"mcpServers": {
"iqx-lookup": {
"command": "npx",
"args": ["-y", "@neivi/iqx-lookup-mcp-server@latest"],
"env": {
"LOOKUP_API_KEY": "YOUR_API_KEY"
}
}
}
}

Cursor / Windsurf

Usa el mismo bloque de configuracion en el archivo de configuracion MCP de tu editor (.cursor/mcp.json o equivalente).

Codex

Codex usa config.toml para la configuracion de servidores MCP, no un bloque JSON mcpServers. Puedes configurar servidores MCP globalmente en ~/.codex/config.toml o por proyecto en .codex/config.toml (solo proyectos de confianza). El CLI de Codex y la extension IDE comparten la misma configuracion. Ver la documentacion oficial.

[mcp_servers.iqx_lookup]
command = "npx"
args = ["-y", "@neivi/iqx-lookup-mcp-server@latest"]

[mcp_servers.iqx_lookup.env]
LOOKUP_API_KEY = "YOUR_API_KEY"

O anadelo desde la linea de comandos:

codex mcp add iqx_lookup --env LOOKUP_API_KEY=YOUR_API_KEY -- npx -y @neivi/iqx-lookup-mcp-server@latest

Verificar que funciona

Despues de la configuracion, pregunta a tu asistente:

"Valida el email test@example.com"

Deberias ver una llamada a la herramienta validate_email con el resultado de la validacion.

Self-hosted / On-premises

Por defecto, el MCP server se conecta a https://api.iqxlookup.neivi.es. Para apuntarlo a una instancia de IQX Lookup auto-alojada, establece la variable de entorno LOOKUP_BASE_URL:

{
"mcpServers": {
"iqx-lookup": {
"command": "npx",
"args": ["-y", "@neivi/iqx-lookup-mcp-server@latest"],
"env": {
"LOOKUP_API_KEY": "YOUR_API_KEY",
"LOOKUP_BASE_URL": "http://localhost:8081"
}
}
}
}

Para Codex, anade LOOKUP_BASE_URL al bloque de entorno:

[mcp_servers.iqx_lookup]
command = "npx"
args = ["-y", "@neivi/iqx-lookup-mcp-server@latest"]

[mcp_servers.iqx_lookup.env]
LOOKUP_API_KEY = "YOUR_API_KEY"
LOOKUP_BASE_URL = "http://localhost:8081"

Tus datos nunca salen de tu red cuando usas una instancia local.

Herramientas disponibles

validate_email

Valida una direccion de email: sintaxis, registros DNS MX/A, deteccion de proveedores desechables, deteccion de direcciones de rol e identificacion de proveedores de email gratuito.

Parametros:

ParametroTipoObligatorioDescripcion
addressstringSiDireccion de email a validar (ej., user@company.com)

Ejemplo de respuesta:

{
"email": "admin@gmail.com",
"user": "admin",
"domain": "gmail.com",
"validFormat": true,
"mxRecord": true,
"aRecord": true,
"roleAddress": true,
"disposableEmail": false,
"freeEmailProvider": true
}

validate_phone

Valida y analiza un numero de telefono: operador, tipo de linea (movil/fijo/VoIP), formato E.164, ubicacion y zona horaria.

Parametros:

ParametroTipoObligatorioDescripcion
numberstringSiNumero de telefono en formato E.164 (+34612345678) o formato local (612345678)
countryCodestringNoCodigo ISO 3166-1 alpha-2 (ej., US, ES). Obligatorio para numeros locales.

Ejemplo de respuesta:

{
"valid": true,
"number": "+34612345678",
"e164Format": "+34612345678",
"internationalFormat": "+34 612 34 56 78",
"nationalFormat": "612 34 56 78",
"countryCode": "ES",
"country": "Spain",
"carrier": "Movistar",
"phoneType": "MOBILE",
"location": "Spain",
"timezones": ["Europe/Madrid"]
}

geolocate_ip

Geolocaliza una direccion IP: pais, ciudad, coordenadas, ISP, ASN, zona horaria y pertenencia a la UE.

Parametros:

ParametroTipoObligatorioDescripcion
ipstringSiDireccion IPv4 o IPv6 (ej., 8.8.8.8 o 2001:4860:4860::8888)

Ejemplo de respuesta:

{
"ip": "8.8.8.8",
"country": "United States",
"countryCode": "US",
"region": "California",
"city": "Mountain View",
"latitude": 37.386,
"longitude": -122.0838,
"timezone": "America/Los_Angeles",
"isEu": false,
"isp": "Google LLC",
"organization": "Google Public DNS",
"asn": "AS15169"
}

geolocate_my_ip

Geolocaliza la IP publica del propio servidor. Devuelve los mismos campos que geolocate_ip. No requiere parametros.

validate_vat

Valida un numero de IVA europeo contra el servicio VIES de la UE. Devuelve el nombre de la empresa y la direccion cuando estan disponibles.

Parametros:

ParametroTipoObligatorioDescripcion
countryCodestringSiCodigo de pais UE de dos letras (ej., DE, FR, ES)
numberstringSiNumero de IVA sin prefijo de pais (ej., para ESB87387775 pasa B87387775)

Ejemplo de respuesta:

{
"valid": true,
"countryCode": "ES",
"vatNumber": "B87387775",
"name": "NEIVI IT SOCIEDAD LIMITADA",
"address": "CL EXAMPLE 1\n28001 MADRID"
}

parse_useragent

Analiza una cadena User-Agent: navegador, SO, tipo de dispositivo, marca/modelo y deteccion de bots.

Parametros:

ParametroTipoObligatorioDescripcion
uastringSiCadena raw del header User-Agent

Ejemplo de respuesta:

{
"browserFamily": "Chrome",
"browserVersion": "125.0.0",
"osFamily": "Mac OS X",
"osVersion": "14.5.0",
"deviceFamily": "Mac",
"deviceBrand": "Apple",
"deviceModel": "Mac"
}

validate_iban

Valida un IBAN: estructura (longitud por pais), checksum MOD 97-10 e identificadores de banco/sucursal.

Parametros:

ParametroTipoObligatorioDescripcion
ibanstringSiIBAN con o sin espacios (ej., DE89 3704 0044 0532 0130 00)

Ejemplo de respuesta:

{
"valid": true,
"iban": "DE89370400440532013000",
"countryCode": "DE",
"checkDigits": "89",
"bankCode": "37040044",
"branchCode": "",
"accountNumber": "0532013000",
"bic": "COBADEFFXXX"
}

validate_bic

Valida un codigo BIC/SWIFT: formato, nombre de la institucion, pais e informacion de sucursal.

Parametros:

ParametroTipoObligatorioDescripcion
bicstringSiCodigo BIC/SWIFT, 8 u 11 caracteres (ej., COBADEFFXXX)

Ejemplo de respuesta:

{
"valid": true,
"bic": "COBADEFFXXX",
"bankCode": "COBA",
"countryCode": "DE",
"locationCode": "FF",
"branchCode": "XXX",
"institution": "Commerzbank AG"
}

lookup_dns

Consulta registros DNS de un dominio. Tambien realiza analisis de seguridad de email: SPF, DKIM y DMARC.

Parametros:

ParametroTipoObligatorioDescripcion
domainstringSiNombre de dominio (ej., example.com, sin protocolo)
typesstringNoTipos de registro separados por coma: A, AAAA, MX, TXT, CNAME, NS, SOA. Omitir para todos.

Ejemplo de respuesta:

{
"domain": "example.com",
"records": [
{ "type": "A", "value": "93.184.216.34", "ttl": 3600 },
{ "type": "MX", "value": "mail.example.com", "priority": 10, "ttl": 3600 }
],
"queryTimeMs": 45,
"emailSecurity": {
"spf": { "found": true, "record": "v=spf1 -all", "qualifier": "fail" },
"dkim": { "found": false },
"dmarc": { "found": true, "policy": "reject", "reportingEmail": "dmarc@example.com" }
}
}

check_password_strength

Analiza la fortaleza de una contrasena (zxcvbn) y la verifica contra filtraciones conocidas via Have I Been Pwned usando k-anonymity; la contrasena completa nunca se envia por la red, se registra ni se almacena.

Parametros:

ParametroTipoObligatorioDescripcion
passwordstringSiContrasena a analizar (nunca se registra ni almacena)

Ejemplo de respuesta:

{
"score": 3,
"crackTimeDisplay": "centuries",
"crackTimeSeconds": 3.15e+15,
"guesses": 1.0e+13,
"warning": "",
"suggestions": ["Add another word or two. Uncommon words are better."],
"breached": false,
"breachCount": 0
}

check_ssl_certificate

Inspecciona el certificado SSL/TLS de un dominio: cadena de certificados, fechas de validez, SANs, protocolo, suite de cifrado y asigna un grado (A+ a F).

Parametros:

ParametroTipoObligatorioDescripcion
domainstringSiNombre de dominio (ej., github.com). No incluir https://.

Ejemplo de respuesta:

{
"issuer": "Let's Encrypt",
"subject": "example.com",
"serialNumber": "04:AB:CD:...",
"validFrom": "2025-01-01T00:00:00Z",
"validTo": "2025-04-01T00:00:00Z",
"daysUntilExpiry": 78,
"signatureAlgorithm": "SHA256withRSA",
"subjectAlternativeNames": ["example.com", "www.example.com"],
"protocol": "TLSv1.3",
"cipherSuite": "TLS_AES_256_GCM_SHA384",
"chainLength": 3,
"grade": "A+",
"warnings": []
}

validate_credit_card

Valida un numero de tarjeta de credito: algoritmo de Luhn, identificacion de red de tarjeta, consulta BIN. Solo validacion estructural; no procesa pagos. El numero completo de la tarjeta nunca se devuelve en la respuesta.

Parametros:

ParametroTipoObligatorioDescripcion
cardNumberstringSiNumero de tarjeta con espacios/guiones opcionales (ej., 4111 1111 1111 1111)

Ejemplo de respuesta:

{
"valid": true,
"luhnValid": true,
"brand": "Visa",
"lastFourDigits": "1111",
"cardType": "CREDIT",
"issuingBank": "Example Bank",
"country": "US",
"category": "CLASSIC"
}

Ejemplos de flujos de trabajo multi-herramienta

Los asistentes de IA pueden encadenar multiples herramientas en una sola conversacion. Estos son flujos de trabajo comunes:

Cualificacion de leads

"Valida estos emails y dime cuales son reales: sales@acme.com, info@temp-mail.org, john@bigcorp.io"

El asistente invoca validate_email tres veces y luego resume: cuales son validos, cuales son desechables y cuales son direcciones de rol.

Auditoria de seguridad de dominio

"Ejecuta una verificacion de seguridad en example.com: certificado SSL y seguridad de email DNS"

El asistente invoca check_ssl_certificate + lookup_dns y luego sintetiza un informe cubriendo el grado del certificado, expiracion y politicas SPF/DKIM/DMARC.

Verificacion KYC

"Verifica esta empresa: VAT ES-B87387775, IBAN ES91 2100 0418 4502 0005 1332, telefono +34 912 345 678"

El asistente invoca validate_vat + validate_iban + validate_phone, cruza los codigos de pais e informa sobre la consistencia.

Evaluacion de politica de contrasenas

"Prueba estas contrasenas contra nuestra politica: Welcome1, Tr0ub4dor&3, correct-horse-battery-staple"

El asistente invoca check_password_strength tres veces, compara puntuaciones, estado de filtraciones y tiempos de descifrado, y luego recomienda cuales cumplen tus requisitos.

Buenas practicas

  • Agrupa validaciones relacionadas — describe todos los datos que quieras validar en un solo mensaje. El asistente invocara multiples herramientas de forma eficiente.
  • Numeros de IVA — elimina siempre el prefijo de pais antes de llamar. Pasa ES como countryCode y B87387775 como number, no ESB87387775.
  • Vista completa de DNS — usa types=A,MX,TXT para una consulta enfocada, u omite types para obtener todos los tipos de registro.
  • Limites de tasa — cada respuesta de herramienta incluye informacion de limite de tasa restante. La IA puede auto-regularse al acercarse a los limites.
  • Privacidad — las contrasenas y numeros de tarjeta de credito nunca se registran ni almacenan. Las verificaciones de filtracion de contrasenas usan k-anonymity (solo se envia un prefijo de hash a HIBP). Las respuestas de tarjetas de credito nunca incluyen el numero completo.

Manejo de errores

Cuando una llamada a una herramienta falla, el MCP server devuelve un error estructurado. Codigos de error comunes:

CodigoErrorSignificado
401UNAUTHORIZEDAPI key ausente o invalida
429RATE_LIMIT_EXCEEDEDDemasiadas solicitudes por minuto
429QUOTA_EXCEEDEDCuota mensual de solicitudes agotada
503UPSTREAM_UNAVAILABLEServicio externo (VIES, HIBP, etc.) temporalmente caido

Ejemplo de respuesta de error:

{
"error": "Rate limit exceeded",
"retryAfter": 42,
"status": 429
}

El asistente de IA normalmente esperara y reintentara automaticamente, o te informara de que se ha alcanzado el limite de tasa.