# API et serveur MCP

Tout ce que montre la [page d'accueil](https://iseeu.cc/fr/), 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

- [RFC 9110, section 12: Content Negotiation](https://www.rfc-editor.org/rfc/rfc9110#section-12) : les réponses selon l'en-tête Accept.
- [Model Context Protocol specification (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18) : le transport et les messages MCP.
- [OpenAPI Specification 3.1.0](https://spec.openapis.org/oas/v3.1.0) : le format de /openapi.json.
- [RFC 5737: IPv4 Address Blocks Reserved for Documentation](https://www.rfc-editor.org/rfc/rfc5737) : l'adresse d'exemple.

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

| Chemin | Renvoie |
| --- | --- |
| / | Votre IP en texte brut (clients autres que les navigateurs) ou la page web (navigateurs) |
| /ip | Votre IP en texte brut, dans tous les cas |
| /json | Tout : IP, localisation, réseau, TLS, HTTP, User-Agent analysé, en-têtes de la requête, heure du serveur |
| /geo | IP, localisation, ASN, organisation et centre de données Cloudflare |
| /tls | Version TLS, suite de chiffrement, taille du ClientHello, empreintes des suites et des extensions, version HTTP |
| /ua | Votre User-Agent, décomposé en navigateur, moteur, système d'exploitation, appareil et type de client |
| /headers | Les 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é |
| /mcp | Serveur 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](https://iseeu.cc/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](https://iseeu.cc/fr/contact/).

## Serveur MCP pour les agents d'IA

`https://iseeu.cc/mcp` est un serveur [Model Context Protocol](https://modelcontextprotocol.io/) 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.

| Outil | Entrée | Ce qu'il fait |
| --- | --- | --- |
| whoami | `include_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_headers | `headers?` | 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_ua | `user_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_lookup | `name`, `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_lookup | `query`, `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

- [/llms.txt](https://iseeu.cc/llms.txt) — un court guide en texte brut pour les modèles de langage
- [/.well-known/mcp/server-card.json](https://iseeu.cc/.well-known/mcp/server-card.json) — la fiche du serveur MCP (server card)
- [/openapi.json](https://iseeu.cc/openapi.json) — la description OpenAPI 3.1 des endpoints HTTP

## 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é](https://iseeu.cc/fr/confidentialite/).

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.

Dernière mise à jour : 2026-10-11

Page d'origine : https://iseeu.cc/fr/api/
