# API y servidor MCP

Todo lo que muestra la [página de inicio](https://iseeu.cc/es/), para scripts, servidores y agentes de IA. HTTPS, sin clave de API, sin registro, con CORS activado y gratis para uso comercial dentro del límite de uso razonable.

## Respuesta corta

`curl iseeu.cc` imprime tu dirección IP pública y un salto de línea; `/json` devuelve todo lo que muestra la página de inicio en un solo objeto JSON, y `/mcp` es un servidor de Model Context Protocol con cinco herramientas. Es gratis y no necesita clave mientras no pases de 60 solicitudes por minuto por dirección IP, o de 10 por minuto en los dos endpoints que hacen una consulta hacia afuera.

### Cómo se obtiene

La misma URL responde según la solicitud: si el encabezado Accept pide text/html, recibes la página web; si no, texto plano. Los endpoints JSON aceptan `?format=text` para devolver líneas `key: value`, y un encabezado Accept que prefiera text/plain hace lo mismo (negociación de contenido, RFC 9110). Las respuestas nunca se guardan en caché y las pueden leer scripts de cualquier origen. El endpoint MCP usa Streamable HTTP y no tiene estado.

### Ejemplo práctico

```
$ curl iseeu.cc
192.0.2.1
$ curl -s "iseeu.cc/geo?format=text" | grep '^country:'
country: US
```

192.0.2.1 y el país son valores de ejemplo del rango reservado para documentación (RFC 5737); tu solicitud devuelve tus propios valores.

### Límites

- Los datos describen la máquina que envía la solicitud; si usas un asistente de IA que corre en la nube, esa máquina es el servidor del proveedor, no tú.
- El límite de solicitudes se cuenta por cada ubicación de Cloudflare, así que es aproximado.
- Los datos de ubicación son una estimación a partir de una base de datos de IP.

### Fuentes

- [RFC 9110, section 12: Content Negotiation](https://www.rfc-editor.org/rfc/rfc9110#section-12): respuestas según el encabezado Accept.
- [Model Context Protocol specification (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18): el transporte y los mensajes de MCP.
- [OpenAPI Specification 3.1.0](https://spec.openapis.org/oas/v3.1.0): el formato de /openapi.json.
- [RFC 5737: IPv4 Address Blocks Reserved for Documentation](https://www.rfc-editor.org/rfc/rfc5737): la dirección de ejemplo.

## Inicio rápido

Las salidas de ejemplo de abajo usan `192.0.2.1`, una dirección reservada para documentación que nunca pertenece a un dispositivo real. Cuando ejecutes estos comandos, verás tu propia IP.

```
$ curl iseeu.cc
192.0.2.1

$ curl -s iseeu.cc/json | jq '{ip, country: .location.country, asn: .network.asn, tls: .tls.version}'
{
  "ip": "192.0.2.1",
  "country": "US",
  "asn": 7922,
  "tls": "TLSv1.3"
}
```

La URL de inicio decide qué devolver según tu encabezado `Accept`: los navegadores piden `text/html` y reciben la página; curl, wget, HTTPie, PowerShell y las bibliotecas HTTP no lo piden, y reciben una sola línea con tu dirección IP y un salto de línea.

## Endpoints

| Ruta | Devuelve |
| --- | --- |
| / | Tu IP en texto plano (clientes que no son navegadores) o la página web (navegadores) |
| /ip | Tu IP en texto plano, siempre |
| /json | Todo: IP, ubicación, red, TLS, HTTP, User-Agent desglosado, encabezados de la solicitud, hora del servidor |
| /geo | IP, ubicación, ASN, organización y centro de datos de Cloudflare |
| /tls | Versión de TLS, cifrado, tamaño del ClientHello, hashes de cifrados y extensiones, versión de HTTP |
| /ua | Tu User-Agent, desglosado en navegador, motor, sistema operativo, dispositivo y tipo de cliente |
| /headers | Los encabezados de la solicitud que enviaste y los que agregó Cloudflare |
| /api/rdap?q= | Datos de registro RDAP de un dominio, una dirección IP o un CIDR, o un número AS, desde el registro que IANA indica para cada caso: un resumen más el JSON RDAP sin procesar |
| /api/headers-check?url= | Los encabezados de respuesta de una URL pública (siguiendo redirecciones y sin leer nunca el cuerpo) con una calificación de seguridad |
| /mcp | Servidor MCP (Streamable HTTP, sin estado): ver más abajo |

Para ver la dirección de un solo protocolo, fuérzalo en curl: `curl -4 iseeu.cc` imprime tu dirección IPv4 y `curl -6 iseeu.cc` tu dirección IPv6 (falla de inmediato si tu máquina no tiene ruta IPv6); lo mismo funciona con JSON usando `curl -4 iseeu.cc/json` y `curl -6 iseeu.cc/json`.

Agrega `?format=text` (o envía `Accept: text/plain`) a cualquier endpoint JSON para obtener líneas planas `key: value`, prácticas con `grep`. `format` solo acepta `json` o `text`; cualquier otro valor recibe un `400` con `"error": "invalid_format"` en lugar de un valor por defecto silencioso. `curl "iseeu.cc/ua?format=text"` imprime solo la cadena del User-Agent. La descripción legible por máquinas está en [/openapi.json](https://iseeu.cc/openapi.json) (OpenAPI 3.1).

## El objeto /json

Una respuesta de ejemplo (de nuevo con la dirección de ejemplo reservada `192.0.2.1`):

```
{
  "ip": "192.0.2.1",
  "ipVersion": 4,
  "location": {
    "country": "US", "countryName": "United States",
    "region": "Texas", "regionCode": "TX", "city": "Austin",
    "postalCode": "78701", "metroCode": "635", "continent": "NA",
    "isEU": false, "latitude": 30.27, "longitude": -97.74,
    "timezone": "America/Chicago"
  },
  "network": { "asn": 7922, "asOrganization": "Comcast Cable", "colo": "DFW",
               "clientTcpRttMs": 22, "clientQuicRttMs": null, "deliveryRateBps": null },
  "tls": { "version": "TLSv1.3", "cipher": "AEAD-AES128-GCM-SHA256", "clientHelloLength": 508,
           "clientCiphersSha1": "…", "clientExtensionsSha1": "…" },
  "http": { "protocol": "HTTP/2", "method": "GET", "priority": null, "acceptEncoding": "gzip, br" },
  "userAgent": { "raw": "curl/8.9.1", "browser": {…}, "engine": {…}, "os": {…},
                 "device": {…}, "cpu": {…}, "kind": "cli", "bot": { "name": "curl", "kind": "cli", "operator": null } },
  "headers": { "accept": "*/*", "host": "iseeu.cc", "user-agent": "curl/8.9.1" },
  "edgeHeaders": { "cf-ray": "…", "cf-ipcountry": "US", … },
  "time": { "server": "2026-10-08T12:00:00.000Z", "serverMs": 1791460800000 },
  "meta": { "docs": "https://iseeu.cc/api/", "privacy": "https://iseeu.cc/privacy/", "simulated": false }
}
```

Los valores que faltan son `null`, nunca se omiten, así que la estructura es estable. Eso incluye las mediciones que no aplican o que no se hicieron: `clientTcpRttMs` solo existe en conexiones TCP (HTTP/1.1 y HTTP/2), `clientQuicRttMs` solo en HTTP/3, y Cloudflare informa un valor no medido como 0, que nosotros pasamos como `null` en lugar de como un viaje de ida y vuelta de cero milisegundos. Los datos de ubicación y de red vienen de la información de IP de Cloudflare para la dirección desde la que te conectaste; describen la red de tu proveedor, no una dirección postal. `tls.clientCiphersSha1` y `clientExtensionsSha1` son hashes que calcula Cloudflare a partir de tu ClientHello, no JA3 ni JA4. Chrome cambia al azar el orden de sus extensiones TLS, así que su hash de extensiones suele cambiar entre conexiones; el hash de cifrados es el más estable de los dos. `userAgent.kind` es uno de `browser`, `search-crawler`, `ai-crawler`, `ai-assistant`, `social-preview`, `http-library`, `cli`, `headless-browser`, `monitoring`, `bot` o `unknown`.

## Usos comunes

**Comprobar que una VPN o un proxy está activo antes de ejecutar una tarea.** Compara el país de salida con el que esperas y detente si no coincide:

```
country=$(curl -s "iseeu.cc/geo?format=text" | awk -F': ' '$1=="country"{print $2}')
[ "$country" = "DE" ] || { echo "VPN not in Germany (got $country)"; exit 1; }
```

**Averiguar la dirección pública de un servidor** desde dentro de un contenedor, un runner de CI o una función en la nube, donde la interfaz de red solo muestra una dirección privada. Basta con `curl -s iseeu.cc`, y el salto de línea final hace que sea seguro usarlo en una sustitución de comandos del shell.

**Ver lo que tu cliente HTTP realmente envía.** Las bibliotecas agregan, renombran y reordenan encabezados. Llama a `/headers` desde tu código para ver el conjunto exacto, o a `/tls` para confirmar qué versión de TLS y qué cifrado negocia tu entorno de ejecución.

**Desde otros lenguajes:**

```
// JavaScript (browser or Node 18+)
const me = await (await fetch("https://iseeu.cc/json")).json();

# Python
import requests; me = requests.get("https://iseeu.cc/json", timeout=5).json()

// Go
resp, _ := http.Get("https://iseeu.cc/ip")

# PowerShell
(Invoke-RestMethod https://iseeu.cc/json).location.country
```

## Consultas que salen de iseeu.cc

`/api/rdap` y `/api/headers-check` hacen cada uno una solicitud hacia afuera, así que tienen su propio límite, más bajo: 10 llamadas por minuto por dirección IP; por encima de eso responden con `429` y `Retry-After: 60`. Las consultas RDAP solo van a servidores que figuran en el registro de arranque (bootstrap) de IANA. La verificación de encabezados acepta URL públicas `http`/`https` en los puertos 80 y 443, rechaza las direcciones privadas y reservadas e iseeu.cc mismo (también como destino de una redirección; eso da un `400 invalid_target`), sigue hasta cinco redirecciones y se rinde a los cinco segundos. Ninguno de los dos endpoints guarda la consulta.

```
curl -s "iseeu.cc/api/rdap?q=AS64496" | jq .summary
curl -s "iseeu.cc/api/headers-check?url=https://example.com/" | jq '.grade | {grade, score}'
```

## Límites y uso razonable

- **60 solicitudes por minuto por dirección IP.** Si te pasas, recibes `429` con `Retry-After: 60`. El límite se cuenta por cada ubicación de Cloudflare, así que es aproximado.
- Las respuestas, incluidas las de MCP, nunca se guardan en caché (`Cache-Control: no-store`). Los endpoints REST llevan `Access-Control-Allow-Origin: *`, así que el JavaScript del navegador de cualquier sitio puede llamarlos.
- El uso comercial está permitido. Por favor, no pongas `/json` detrás de una página que carguen todos tus visitantes; a esa escala, escríbenos antes.
- Si 60 solicitudes por minuto de verdad no te alcanzan para lo que estás construyendo, cuéntanos a través de la [página de contacto](https://iseeu.cc/es/contacto/).

## Servidor MCP para agentes de IA

`https://iseeu.cc/mcp` es un servidor remoto de [Model Context Protocol](https://modelcontextprotocol.io/) sobre Streamable HTTP. No tiene estado, no necesita autenticación y ofrece cinco herramientas, todas de solo lectura; `dns_lookup` y `rdap_lookup` comparten el límite de 10 por minuto de las consultas hacia afuera.

| Herramienta | Entrada | Qué hace |
| --- | --- | --- |
| whoami | `include_headers?` | IP pública, ubicación, ASN y organización, centro de datos de Cloudflare, versión de TLS y de HTTP, y tipo de cliente de la máquina que llama al servidor |
| check_headers | `headers?` | Señala rasgos que la detección de bots suele ponderar: falta de User-Agent o Accept-Language, Chrome sin Client Hints, versiones o plataformas que no coinciden, encabezados de proxy con otra IP, DNT y GPC. Son indicios posibles, no pruebas, porque cualquier cliente puede omitir o falsificar encabezados. Sin entrada, revisa los encabezados de la propia llamada. |
| parse_ua | `user_agent?` | Descompone un User-Agent en navegador, motor, sistema operativo, dispositivo y CPU, y clasifica rastreadores, agentes de IA, herramientas de línea de comandos y bibliotecas |
| dns_lookup | `name`, `type?` | Registros A, AAAA, MX, TXT, NS, CNAME, CAA o SOA a través del resolvedor de Cloudflare con DNS sobre HTTPS, con TTL, la marca DNSSEC y una nota que distingue un nombre inexistente (NXDOMAIN) de un tipo de registro que no existe |
| rdap_lookup | `query`, `include_raw?` | Resumen del registro de un dominio, una dirección IP o un número AS desde el servidor RDAP autoritativo |

Los clientes MCP que funcionan en el navegador pueden llamarlo desde cualquier origen. CORS permite `POST`, `GET` y `DELETE` con los encabezados de solicitud `Content-Type`, `Mcp-Session-Id`, `Mcp-Protocol-Version` y `Last-Event-ID`, y expone `Mcp-Session-Id`. Cada respuesta MCP se envía con `Cache-Control: no-store`, y el servidor no guarda nada entre llamadas. El cuerpo de una solicitud puede pesar hasta 64 KB y un lote JSON-RPC puede tener hasta 10 mensajes; los más grandes se rechazan con el error `-32600` antes de que se ejecute cualquier herramienta.

### Conectar

```
# Claude Code
claude mcp add --transport http iseeu https://iseeu.cc/mcp

# Cursor, Windsurf, VS Code and other JSON configs
{ "mcpServers": { "iseeu": { "url": "https://iseeu.cc/mcp" } } }
```

Una aclaración honesta sobre `whoami`: informa sobre la máquina que envía la solicitud HTTP a `/mcp`, sea cual sea. En los agentes de escritorio y de línea de comandos, esa es tu propia red, así que sirve para comprobar si un proxy o una VPN está funcionando. En los asistentes que corren en la nube, es el servidor del proveedor.

## Archivos de descubrimiento

- [/llms.txt](https://iseeu.cc/llms.txt): una guía breve en texto plano para modelos de lenguaje
- [/.well-known/mcp/server-card.json](https://iseeu.cc/.well-known/mcp/server-card.json): la ficha del servidor MCP (server card)
- [/openapi.json](https://iseeu.cc/openapi.json): descripción OpenAPI 3.1 de los endpoints HTTP

## Privacidad

La API nunca registra direcciones IP, encabezados ni consultas, y no tiene base de datos. Las respuestas se arman en memoria a partir de la solicitud y luego se descartan; contamos las llamadas por endpoint sin direcciones IP. Los detalles están en la [página de privacidad](https://iseeu.cc/es/privacidad/).

La API se ofrece tal como está, sin garantías de disponibilidad. Los datos de ubicación y de red pueden estar equivocados. No la uses como única señal para decisiones de seguridad o de fraude.

Última actualización: 2026-10-11

Página original: https://iseeu.cc/es/api/
