# API und MCP-Server

Alles, was die [Startseite](https://iseeu.cc/de/) zeigt, für Skripte, Server und KI-Agenten. HTTPS, kein API-Key, keine Registrierung, CORS aktiviert und im Rahmen der Fair-Use-Grenze auch für kommerzielle Zwecke kostenlos.

## Kurz gesagt

`curl iseeu.cc` gibt deine öffentliche IP-Adresse und einen Zeilenumbruch aus; `/json` liefert alles, was die Startseite zeigt, als ein einziges JSON-Objekt, und `/mcp` ist ein Model-Context-Protocol-Server mit fünf Tools. Die Nutzung ist kostenlos und braucht keinen Key, solange du nicht mehr als 60 Anfragen pro Minute und IP-Adresse stellst – bei den beiden Endpunkten, die eine externe Abfrage auslösen, nicht mehr als 10 pro Minute.

### So wird es ermittelt

Dieselbe URL antwortet je nach Anfrage: Ein Accept-Header, der text/html verlangt, bekommt die Webseite, alles andere reinen Text. Die JSON-Endpunkte nehmen `?format=text` für Zeilen im Format `key: value` an, und ein Accept-Header, der text/plain bevorzugt, bewirkt dasselbe (Content Negotiation, RFC 9110). Antworten werden nie gecacht und dürfen von Skripten beliebiger Herkunft gelesen werden. Der MCP-Endpunkt spricht Streamable HTTP und ist zustandslos.

### Beispiel

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

192.0.2.1 und das Land sind Platzhalter aus dem Dokumentationsbereich (RFC 5737); deine Anfrage liefert deine eigenen Werte.

### Grenzen

- Die Daten beschreiben den Rechner, der die Anfrage sendet; bei einem KI-Assistenten, der in der Cloud läuft, ist das der Server des Anbieters, nicht du.
- Das Ratenlimit wird pro Cloudflare-Standort gezählt und ist daher nur ungefähr.
- Standortdaten sind eine Schätzung aus einer IP-Datenbank.

### Quellen

- [RFC 9110, section 12: Content Negotiation](https://www.rfc-editor.org/rfc/rfc9110#section-12): Antworten abhängig vom Accept-Header.
- [Model Context Protocol specification (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18): Transport und Nachrichten von MCP.
- [OpenAPI Specification 3.1.0](https://spec.openapis.org/oas/v3.1.0): das Format von /openapi.json.
- [RFC 5737: IPv4 Address Blocks Reserved for Documentation](https://www.rfc-editor.org/rfc/rfc5737): die Beispieladresse.

## Schnellstart

Die Beispielausgaben unten verwenden `192.0.2.1`, eine reservierte Dokumentationsadresse, die nie zu einem echten Gerät gehört. Wenn du die Befehle selbst ausführst, siehst du deine eigene 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"
}
```

Was die Start-URL zurückgibt, entscheidet dein `Accept`-Header: Browser fragen nach `text/html` und bekommen die Seite; curl, wget, HTTPie, PowerShell und HTTP-Bibliotheken tun das nicht und bekommen eine einzige Zeile mit deiner IP-Adresse und einem Zeilenumbruch.

## Endpunkte

| Pfad | Liefert |
| --- | --- |
| / | Deine IP als reinen Text (Clients ohne Browser) oder die Webseite (Browser) |
| /ip | Deine IP als reinen Text, immer |
| /json | Alles: IP, Standort, Netzwerk, TLS, HTTP, zerlegter User-Agent, Request-Header, Serverzeit |
| /geo | IP, Standort, ASN, Organisation und Cloudflare-Rechenzentrum |
| /tls | TLS-Version, Cipher, Größe des ClientHello, Hashes der Cipher und Extensions, HTTP-Version |
| /ua | Dein User-Agent, zerlegt in Browser, Engine, Betriebssystem, Gerät und Client-Typ |
| /headers | Die Request-Header, die du gesendet hast, und die, die Cloudflare ergänzt hat |
| /api/rdap?q= | RDAP-Registrierungsdaten zu einer Domain, einer IP-Adresse oder einem CIDR-Bereich oder einer AS-Nummer, von der Registry, die die IANA dafür führt: eine Zusammenfassung plus das rohe RDAP-JSON |
| /api/headers-check?url= | Response-Header einer öffentlichen URL (Weiterleitungen werden verfolgt, der Body wird nie gelesen) mit Sicherheitsnote |
| /mcp | MCP-Server (Streamable HTTP, zustandslos) – siehe unten |

Um die Adresse eines bestimmten Protokolls zu sehen, erzwingst du es in curl: `curl -4 iseeu.cc` gibt deine IPv4-Adresse aus und `curl -6 iseeu.cc` deine IPv6-Adresse (das schlägt sofort fehl, wenn dein Rechner keine IPv6-Route hat). Für JSON funktioniert das genauso mit `curl -4 iseeu.cc/json` und `curl -6 iseeu.cc/json`.

Häng `?format=text` an einen beliebigen JSON-Endpunkt an (oder sende `Accept: text/plain`), um flache Zeilen im Format `key: value` zu bekommen – praktisch mit `grep`. `format` akzeptiert nur `json` oder `text`; jeder andere Wert führt zu einem `400` mit `"error": "invalid_format"` statt zu einem stillen Rückfall. `curl "iseeu.cc/ua?format=text"` gibt nur den User-Agent-String aus. Die maschinenlesbare Beschreibung liegt unter [/openapi.json](https://iseeu.cc/openapi.json) (OpenAPI 3.1).

## Das /json-Objekt

Eine Beispielantwort (wieder mit der reservierten Beispieladresse `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 }
}
```

Fehlende Werte sind `null` und werden nie weggelassen, die Struktur bleibt also stabil. Das gilt auch für Messwerte, die nicht zutreffen oder nicht erhoben wurden: `clientTcpRttMs` gibt es nur bei TCP-Verbindungen (HTTP/1.1 und HTTP/2), `clientQuicRttMs` nur bei HTTP/3, und einen nicht gemessenen Wert meldet Cloudflare als 0, den wir als `null` weitergeben statt als Roundtrip von null Millisekunden. Standort- und Netzwerkdaten stammen aus Cloudflares IP-Daten zu der Adresse, von der aus du verbunden bist; sie beschreiben das Netz deines Anbieters, keine Postanschrift. `tls.clientCiphersSha1` und `clientExtensionsSha1` sind Cloudflares Hashes deines ClientHello, nicht JA3 oder JA4. Chrome mischt die Reihenfolge seiner TLS-Extensions zufällig, deshalb ändert sich sein Extensions-Hash meist von Verbindung zu Verbindung; der Cipher-Hash ist der beständigere der beiden. `userAgent.kind` hat einen der Werte `browser`, `search-crawler`, `ai-crawler`, `ai-assistant`, `social-preview`, `http-library`, `cli`, `headless-browser`, `monitoring`, `bot` oder `unknown`.

## Typische Anwendungen

**Vor einem Job prüfen, ob ein VPN oder Proxy aktiv ist.** Vergleiche das Ausgangsland mit dem erwarteten und brich ab, wenn es nicht stimmt:

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

**Die öffentliche Adresse eines Servers herausfinden** – aus einem Container, einem CI-Runner oder einer Cloud-Funktion heraus, wo die Netzwerkschnittstelle nur eine private Adresse zeigt. `curl -s iseeu.cc` genügt, und durch den abschließenden Zeilenumbruch lässt sich das Ergebnis gefahrlos in einer Kommandosubstitution der Shell verwenden.

**Sehen, was dein HTTP-Client wirklich sendet.** Bibliotheken fügen Header hinzu, benennen sie um und ändern ihre Reihenfolge. Ruf `/headers` aus deinem Code auf, um den genauen Satz zu sehen, oder `/tls`, um zu prüfen, welche TLS-Version und welchen Cipher deine Laufzeitumgebung aushandelt.

**Aus anderen Programmiersprachen:**

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

## Abfragen, die iseeu.cc verlassen

`/api/rdap` und `/api/headers-check` stellen jeweils eine ausgehende Anfrage und haben deshalb ein eigenes, niedrigeres Limit: 10 Aufrufe pro Minute und IP-Adresse; darüber hinaus antworten sie mit `429` und `Retry-After: 60`. RDAP-Abfragen gehen ausschließlich an Server, die im Bootstrap-Verzeichnis der IANA stehen. Der Header-Check akzeptiert öffentliche `http`/`https`-URLs auf den Ports 80 und 443, lehnt private und reservierte Adressen sowie iseeu.cc selbst ab (auch als Ziel einer Weiterleitung; das ergibt `400 invalid_target`), folgt bis zu fünf Weiterleitungen und gibt nach fünf Sekunden auf. Keiner der beiden Endpunkte speichert die Abfrage.

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

## Limits und Fair Use

- **60 Anfragen pro Minute und IP-Adresse.** Darüber bekommst du `429` mit `Retry-After: 60`. Das Limit wird pro Cloudflare-Standort gezählt und ist daher nur ungefähr.
- Antworten, auch die von MCP, werden nie gecacht (`Cache-Control: no-store`). Die REST-Endpunkte senden `Access-Control-Allow-Origin: *`, sodass Browser-JavaScript auf jeder beliebigen Website sie aufrufen kann.
- Kommerzielle Nutzung ist in Ordnung. Bitte bau `/json` aber nicht in eine Seite ein, die jeder deiner Besucher lädt; in dieser Größenordnung melde dich vorher bei uns.
- Wenn 60 Anfragen pro Minute für dein Vorhaben wirklich nicht reichen, erzähl uns über die [Kontaktseite](https://iseeu.cc/de/kontakt/) davon.

## MCP-Server für KI-Agenten

`https://iseeu.cc/mcp` ist ein entfernter [Model-Context-Protocol](https://modelcontextprotocol.io/)-Server über Streamable HTTP. Er ist zustandslos, braucht keine Authentifizierung und bietet fünf Tools, die alle nur lesen; `dns_lookup` und `rdap_lookup` teilen sich das Limit von 10 Aufrufen pro Minute für externe Abfragen.

| Tool | Eingabe | Funktion |
| --- | --- | --- |
| whoami | `include_headers?` | Öffentliche IP, Standort, ASN und Organisation, Cloudflare-Rechenzentrum, TLS- und HTTP-Version sowie Client-Typ des Rechners, der den Server aufruft |
| check_headers | `headers?` | Zeigt Merkmale, die Bot-Erkennung häufig gewichtet: fehlender User-Agent oder Accept-Language, Chrome ohne Client Hints, unpassende Versionen oder Plattformen, Proxy-Header mit einer anderen IP, DNT und GPC. Das sind mögliche Hinweise, keine Beweise, denn jeder Client kann Header weglassen oder fälschen. Ohne Eingabe werden die Header des Aufrufs selbst geprüft. |
| parse_ua | `user_agent?` | Zerlegt einen User-Agent in Browser, Engine, Betriebssystem, Gerät und CPU und ordnet Crawler, KI-Agenten, Kommandozeilen-Tools und Bibliotheken ein |
| dns_lookup | `name`, `type?` | A-, AAAA-, MX-, TXT-, NS-, CNAME-, CAA- oder SOA-Einträge über Cloudflares Resolver per DNS-over-HTTPS, mit TTL, DNSSEC-Flag und einem Hinweis, der einen nicht existierenden Namen (NXDOMAIN) von einem fehlenden Eintragstyp unterscheidet |
| rdap_lookup | `query`, `include_raw?` | Zusammenfassung der Registrierung einer Domain, IP-Adresse oder AS-Nummer vom autoritativen RDAP-Server |

Browserbasierte MCP-Clients können ihn von jeder Herkunft (Origin) aus aufrufen. CORS erlaubt `POST`, `GET` und `DELETE` mit den Request-Headern `Content-Type`, `Mcp-Session-Id`, `Mcp-Protocol-Version` und `Last-Event-ID` und gibt `Mcp-Session-Id` für Skripte frei. Jede MCP-Antwort wird mit `Cache-Control: no-store` gesendet, und der Server behält zwischen den Aufrufen nichts. Ein Request-Body darf bis zu 64 KB groß sein und ein JSON-RPC-Batch bis zu 10 Nachrichten enthalten; Größeres wird mit dem Fehler `-32600` abgewiesen, bevor überhaupt ein Tool läuft.

### Verbinden

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

Ein ehrlicher Hinweis zu `whoami`: Das Tool meldet den Rechner, der die HTTP-Anfrage an `/mcp` sendet. Bei Desktop- und Kommandozeilen-Agenten ist das dein eigenes Netz – praktisch, um zu prüfen, ob ein Proxy oder VPN greift. Bei Assistenten, die in der Cloud laufen, ist es der Server des Anbieters.

## Discovery-Dateien

- [/llms.txt](https://iseeu.cc/llms.txt) – eine kurze Klartext-Anleitung für Sprachmodelle
- [/.well-known/mcp/server-card.json](https://iseeu.cc/.well-known/mcp/server-card.json) – die Server Card des MCP-Servers
- [/openapi.json](https://iseeu.cc/openapi.json) – OpenAPI-3.1-Beschreibung der HTTP-Endpunkte

## Datenschutz

Die API protokolliert nie IP-Adressen, Header oder Abfragen und hat keine Datenbank. Antworten werden im Arbeitsspeicher aus der Anfrage gebaut und danach verworfen; wir zählen Aufrufe pro Endpunkt, ohne IP-Adressen. Einzelheiten stehen in der [Datenschutzerklärung](https://iseeu.cc/de/datenschutz/).

Die API wird so bereitgestellt, wie sie ist, ohne Garantie für ihre Verfügbarkeit. Standort- und Netzwerkdaten können falsch sein. Nutze sie nicht als einziges Signal für Sicherheits- oder Betrugsentscheidungen.

Zuletzt aktualisiert: 2026-10-11

Originalseite: https://iseeu.cc/de/api/
