OSINT MCP
Reconocimiento OSINT pasivo para dominios e IPs: whois, DNS, subdominios, Wayback, seguridad de correo electrónico, TLS, ASN y Shodan. Sin claves API.
Documentación
osint-mcp
Servidor MCP que le da a Claude (o a cualquier cliente MCP) un puñado de consultas de reconocimiento pasivo para dominios e IPs. No se necesitan claves API, todo proviene de fuentes públicas.
Me cansé de saltar entre pestañas de whois, crt.sh, Wayback Machine y Shodan al investigar un dominio, así que esto permite que el modelo lo haga y combine los resultados.
Herramientas
| herramienta | qué hace | fuente |
|---|---|---|
recon_domain | todo lo siguiente a la vez + una lista de aspectos destacados que vale la pena revisar | todo |
domain_whois | registrador, creado/expira, servidores de nombres, contacto de abuso | RDAP (rdap.org) |
ip_whois | propietario de la red, CIDR, país, contacto de abuso, PTR | RDAP + DNS inverso |
dns_lookup | A, AAAA, CNAME, MX, NS, TXT, SOA, CAA (o elige los tuyos) | tu resolutor o uno personalizado |
subdomains | subdominios encontrados en registros de transparencia de certificados | crt.sh |
wayback | instantáneas archivadas de una URL, admite example.com/* | API Wayback CDX |
http_headers | estado, cadena de redirecciones, cabeceras, cabeceras de seguridad faltantes | solicitud directa |
shodan_internetdb | puertos abiertos, nombres de host, CPEs, CVEs conocidos | Shodan InternetDB (gratuito) |
email_security | SPF, DMARC, MTA-STS, TLS-RPT, DKIM, calificación A-F | DNS |
tls_certificate | emisor, expiración, SANs, versión TLS, por qué un certificado es inválido | conexión directa |
asn_lookup | qué AS anuncia una IP, quién la posee, todos sus prefijos | RIPEstat |
Todo excepto http_headers y tls_certificate es pasivo, el objetivo nunca ve tu tráfico. Esos dos solo abren una conexión normal, igual que visitar el sitio en un navegador.
Instalación
Requiere Python 3.10+.
pip install osint-mcp-server
o si usas uv no necesitas instalar nada, solo apunta el cliente a uvx (ver abajo).
Claude Desktop
Añade esto a claude_desktop_config.json:
{
"mcpServers": {
"osint": {
"command": "uvx",
"args": ["osint-mcp-server"]
}
}
}
Si instalaste con pip, "command": "osint-mcp-server" sin argumentos también funciona.
Claude Code
claude mcp add osint -- uvx osint-mcp-server
Cursor, Windsurf, etc. aceptan el mismo JSON que Claude Desktop.
Ejemplos de prompts
- "haz reconocimiento en example.com y dime qué destaca"
- "¿alguien puede suplantar el correo de nuestro dominio? ¿qué deberíamos arreglar primero?"
- "¿cuáles de estos 20 dominios tienen certificados que expiran este mes?"
- "¿qué rangos de IP anuncia AS13335?"
- "revisa las cabeceras de seguridad de estos 5 sitios y dime cuáles son peores"
- "¿cuáles de los subdominios de example.com resuelven a algo con puertos abiertos?"
- "¿cómo se veía example.com/about en 2015?"
Caché
Las respuestas de la API (RDAP, crt.sh, Wayback, RIPEstat, InternetDB) se guardan en caché en sqlite durante 6 horas en ~/.cache/osint-mcp/cache.sqlite3, principalmente para que crt.sh no reciba demasiadas solicitudes. Las comprobaciones de DNS, TLS y HTTP siempre son en vivo.
OSINT_MCP_CACHE=off # disable
OSINT_MCP_CACHE_TTL=3600 # seconds
OSINT_MCP_CACHE_PATH=/tmp/x.db
Notas
- crt.sh y la API Wayback CDX son lentos y devuelven 502/503 con bastante frecuencia. El servidor reintenta un par de veces, pero a veces solo hay que intentarlo de nuevo más tarde.
- InternetDB no es en tiempo real y solo tiene IPs que Shodan ha escaneado realmente.
- Los selectores DKIM no se pueden enumerar,
email_securityprueba los comunes. Pasadkim_selectorssi conoces el tuyo. .ro,.dey algunos otros ccTLDs no tienen RDAP público, así quedomain_whoisno puede hacer mucho por ellos.
Desarrollo
git clone https://github.com/robyroro/osint-mcp
cd osint-mcp
pip install -e . pytest
pytest
Los tests no tocan la red, las llamadas HTTP están simuladas.
Para probarlo con el inspector MCP:
npx @modelcontextprotocol/inspector osint-mcp
Sé razonable
Esto solo obtiene datos públicos, pero aun así: úsalo en tus propias cosas, objetivos de bug bounty que estén dentro del alcance, o para investigación. No lo uses para acosar a personas.
Licencia
MIT © Robert Vind-Gardoș (@robyroro)