Aller au contenu
iseeu.cc

API et serveur MCP

Tout ce que montre la page d'accueil, pour les scripts, les serveurs et les agents d'IA. HTTPS, sans clé d'API ni inscription, CORS activé, gratuit pour un usage commercial dans la limite d'une utilisation raisonnable.

En bref

curl iseeu.cc affiche votre adresse IP publique suivie d'un saut de ligne ; /json renvoie tout ce que montre la page d'accueil dans un seul objet JSON, et /mcp est un serveur Model Context Protocol doté de cinq outils. C'est gratuit et sans clé dans la limite de 60 requêtes par minute et par adresse IP, ou de 10 par minute pour les deux endpoints qui interrogent un service extérieur.

Comment c'est obtenu

La même URL répond en fonction de la requête : un en-tête Accept qui demande text/html reçoit la page web, tout le reste reçoit du texte brut. Les endpoints JSON acceptent ?format=text pour obtenir des lignes key: value, et un en-tête Accept qui préfère text/plain produit le même effet (négociation de contenu, RFC 9110). Les réponses ne sont jamais mises en cache et peuvent être lues par des scripts de n'importe quelle origine. L'endpoint MCP utilise le transport Streamable HTTP et fonctionne sans état.

Exemple

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

192.0.2.1 et le pays sont des valeurs fictives tirées de la plage réservée à la documentation (RFC 5737) ; votre requête renvoie vos propres valeurs.

Limites

  • Les données décrivent la machine qui envoie la requête ; avec un assistant d'IA hébergé dans le cloud, c'est le serveur du fournisseur, pas vous.
  • La limite de débit est comptée par centre de données Cloudflare : elle est donc approximative.
  • La localisation est une estimation tirée d'une base de données d'adresses IP.

Sources

Sources vérifiées le . Page mise à jour le .

Démarrage rapide

Les exemples de sortie ci-dessous utilisent 192.0.2.1, une adresse réservée à la documentation qui n'appartient jamais à un appareil réel. En lançant ces commandes, vous verrez votre propre 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"
}

L'URL d'accueil choisit quoi renvoyer d'après votre en-tête Accept : les navigateurs demandent text/html et reçoivent la page ; curl, wget, HTTPie, PowerShell et les bibliothèques HTTP ne le font pas, et reçoivent une seule ligne contenant votre adresse IP suivie d'un saut de ligne.

Points d'accès

CheminRenvoie
/Votre IP en texte brut (clients autres que les navigateurs) ou la page web (navigateurs)
/ipVotre IP en texte brut, dans tous les cas
/jsonTout : IP, localisation, réseau, TLS, HTTP, User-Agent analysé, en-têtes de la requête, heure du serveur
/geoIP, localisation, ASN, organisation et centre de données Cloudflare
/tlsVersion TLS, suite de chiffrement, taille du ClientHello, empreintes des suites et des extensions, version HTTP
/uaVotre User-Agent, décomposé en navigateur, moteur, système d'exploitation, appareil et type de client
/headersLes en-têtes de requête que vous avez envoyés, et ceux que Cloudflare a ajoutés
/api/rdap?q=Données d'enregistrement RDAP d'un domaine, d'une adresse IP ou d'un bloc CIDR, ou d'un numéro d'AS, obtenues auprès du registre que l'IANA indique pour cette ressource : un résumé plus le JSON RDAP brut
/api/headers-check?url=En-têtes de réponse d'une URL publique (redirections suivies, corps jamais lu) avec une note de sécurité
/mcpServeur MCP (Streamable HTTP, sans état) — voir plus bas

Pour voir l'adresse d'un protocole précis, forcez-le dans curl : curl -4 iseeu.cc affiche votre adresse IPv4 et curl -6 iseeu.cc votre adresse IPv6 (la commande échoue aussitôt si votre machine n'a pas de route IPv6) ; cela marche aussi en JSON avec curl -4 iseeu.cc/json et curl -6 iseeu.cc/json.

Ajoutez ?format=text (ou envoyez Accept: text/plain) à n'importe quel endpoint JSON pour obtenir des lignes key: value à plat, pratiques avec grep. format n'accepte que json ou text ; toute autre valeur reçoit une erreur 400 avec "error": "invalid_format", plutôt qu'un repli silencieux. curl "iseeu.cc/ua?format=text" n'affiche que la chaîne User-Agent. La description lisible par une machine se trouve à /openapi.json (OpenAPI 3.1).

L'objet /json

Un exemple de réponse (là encore avec l'adresse d'exemple réservée 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 }
}

Les valeurs manquantes valent null et ne sont jamais omises : la structure reste stable. Cela vaut aussi pour les mesures qui ne s'appliquent pas ou qui n'ont pas été faites : clientTcpRttMs n'existe que sur les connexions TCP (HTTP/1.1 et HTTP/2), clientQuicRttMs que sur HTTP/3, et Cloudflare indique une valeur non mesurée par 0, que nous transmettons sous la forme null plutôt que comme un aller-retour de zéro milliseconde. Les données de localisation et de réseau proviennent des informations dont Cloudflare dispose sur l'adresse IP d'où vous vous êtes connecté ; elles décrivent le réseau de votre fournisseur d'accès, pas une adresse postale. tls.clientCiphersSha1 et clientExtensionsSha1 sont des empreintes que Cloudflare calcule à partir de votre ClientHello, pas des JA3 ni des JA4. Chrome mélange l'ordre de ses extensions TLS : son empreinte d'extensions change donc en général d'une connexion à l'autre, et l'empreinte des suites de chiffrement est la plus stable des deux. userAgent.kind vaut browser, search-crawler, ai-crawler, ai-assistant, social-preview, http-library, cli, headless-browser, monitoring, bot ou unknown.

Usages courants

Vérifier qu'un VPN ou un proxy est actif avant de lancer une tâche. Comparez le pays de sortie avec celui attendu et arrêtez-vous s'il ne correspond pas :

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; }

Trouver l'adresse publique d'un serveur depuis un conteneur, un runner de CI ou une fonction cloud, où l'interface réseau n'affiche qu'une adresse privée. curl -s iseeu.cc suffit, et le saut de ligne final permet de l'utiliser sans risque dans une substitution shell.

Voir ce que votre client HTTP envoie vraiment. Les bibliothèques ajoutent, renomment et réordonnent les en-têtes. Appelez /headers depuis votre code pour voir l'ensemble exact, ou /tls pour confirmer quelle version TLS et quelle suite de chiffrement votre environnement d'exécution négocie.

Depuis d'autres langages :

// 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

Les recherches qui sortent d'iseeu.cc

/api/rdap et /api/headers-check font chacun une requête sortante : ils ont donc leur propre limite, plus basse, de 10 appels par minute et par adresse IP ; au-delà, la réponse est 429 avec Retry-After: 60. Les requêtes RDAP ne partent jamais que vers des serveurs inscrits dans le registre d'amorçage (bootstrap) de l'IANA. La vérification des en-têtes accepte les URL publiques http/https sur les ports 80 et 443, refuse les adresses privées et réservées ainsi qu'iseeu.cc lui-même (y compris comme cible d'une redirection ; c'est alors une erreur 400 invalid_target), suit jusqu'à cinq redirections et abandonne au bout de cinq secondes. Aucun des deux endpoints ne conserve la requête.

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}'

Limites et usage raisonnable

  • 60 requêtes par minute et par adresse IP. Au-delà, vous recevez 429 avec Retry-After: 60. La limite est comptée par centre de données Cloudflare : elle est donc approximative.
  • Les réponses, y compris celles du serveur MCP, ne sont jamais mises en cache (Cache-Control: no-store). Les endpoints REST renvoient Access-Control-Allow-Origin: * : le JavaScript de n'importe quel site peut donc les appeler depuis le navigateur.
  • L'usage commercial est autorisé. Évitez simplement de placer /json derrière une page que chacun de vos visiteurs charge ; à cette échelle, contactez-nous d'abord.
  • Si 60 requêtes par minute ne suffisent vraiment pas pour ce que vous construisez, parlez-nous-en via la page de contact.

Serveur MCP pour les agents d'IA

https://iseeu.cc/mcp est un serveur Model Context Protocol distant, accessible en Streamable HTTP. Il fonctionne sans état, ne demande aucune authentification et propose cinq outils, tous en lecture seule ; dns_lookup et rdap_lookup partagent la limite de 10 recherches sortantes par minute.

OutilEntréeCe qu'il fait
whoamiinclude_headers?IP publique, localisation, ASN et organisation, centre de données Cloudflare, versions TLS et HTTP, et type de client de la machine qui appelle le serveur
check_headersheaders?Signale les traits que la détection de bots pondère souvent : absence de User-Agent ou d'Accept-Language, Chrome sans Client Hints, versions ou plateformes incohérentes, en-têtes de proxy portant une autre IP, DNT et GPC. Ce sont des indices possibles, pas des preuves, puisque n'importe quel client peut omettre ou falsifier des en-têtes. Sans entrée, ce sont les en-têtes de l'appel lui-même qui sont vérifiés.
parse_uauser_agent?Décompose un User-Agent en navigateur, moteur, système d'exploitation, appareil et processeur, et classe les robots d'indexation, agents d'IA, outils en ligne de commande et bibliothèques
dns_lookupname, type?Enregistrements A, AAAA, MX, TXT, NS, CNAME, CAA ou SOA via le résolveur de Cloudflare en DNS over HTTPS, avec TTL, indicateur DNSSEC et une note qui distingue un nom inexistant (NXDOMAIN) d'un type d'enregistrement absent
rdap_lookupquery, include_raw?Résumé de l'enregistrement d'un domaine, d'une adresse IP ou d'un numéro d'AS auprès du serveur RDAP qui fait autorité

Les clients MCP qui tournent dans un navigateur peuvent l'appeler depuis n'importe quelle origine. CORS autorise POST, GET et DELETE avec les en-têtes de requête Content-Type, Mcp-Session-Id, Mcp-Protocol-Version et Last-Event-ID, et expose Mcp-Session-Id. Chaque réponse MCP est envoyée avec Cache-Control: no-store, et le serveur ne garde rien d'un appel à l'autre. Le corps d'une requête peut atteindre 64 Ko et un lot JSON-RPC 10 messages ; au-delà, la requête est refusée avec l'erreur -32600 avant qu'aucun outil ne s'exécute.

Connexion

# 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" } } }

Une précision honnête sur whoami : il décrit la machine, quelle qu'elle soit, qui envoie la requête HTTP à /mcp. Pour les agents de bureau et en ligne de commande, c'est votre propre réseau, ce qui permet de vérifier qu'un proxy ou un VPN est bien actif. Pour les assistants qui tournent dans le cloud, c'est le serveur du fournisseur.

Fichiers de découverte

Confidentialité

L'API ne journalise jamais les adresses IP, les en-têtes ni les requêtes, et n'a pas de base de données. Les réponses sont construites en mémoire à partir de la requête, puis effacées ; nous comptons les appels par endpoint, sans adresse IP. Les détails figurent dans la politique de confidentialité.

L'API est fournie en l'état, sans garantie de disponibilité. Les données de localisation et de réseau peuvent être fausses. Ne vous en servez pas comme seul critère pour des décisions de sécurité ou de lutte contre la fraude.