クイックスタート
以下の出力例では192.0.2.1を使っています。これはドキュメント用に予約されたアドレスで、実在の機器のものになることはありません。実際にコマンドを実行すると、あなた自身の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"
}
トップページのURLは、Acceptヘッダーを見て何を返すかを決めます。ブラウザはtext/htmlを求めるのでページを受け取ります。curl、wget、HTTPie、PowerShell、各種HTTPライブラリはそうしないので、IPアドレスと改行だけの1行を受け取ります。
エンドポイント
| パス | 返す内容 |
|---|---|
| / | あなたのIP(ブラウザ以外のクライアントにはプレーンテキスト)、またはWebページ(ブラウザ) |
| /ip | あなたのIP。常にプレーンテキスト |
| /json | すべて:IP、地域、ネットワーク、TLS、HTTP、解析済みのUser-Agent、リクエストヘッダー、サーバーの時刻 |
| /geo | IP、地域、ASN、組織名、Cloudflareのデータセンター |
| /tls | TLSのバージョン、暗号スイート、ClientHelloのサイズ、暗号スイートと拡張のハッシュ、HTTPのバージョン |
| /ua | あなたのUser-Agentを、ブラウザ、エンジン、OS、デバイス、クライアントの種類に分解したもの |
| /headers | あなたが送ったリクエストヘッダーと、Cloudflareが追加したヘッダー |
| /api/rdap?q= | ドメイン、IPアドレスまたはCIDR、AS番号のRDAP登録情報。IANAがそれぞれの問い合わせ先として載せているレジストリから取得し、要約と生のRDAP JSONを返します |
| /api/headers-check?url= | 公開URLのレスポンスヘッダー(リダイレクトはたどり、本文は読まない)とセキュリティの評価 |
| /mcp | MCPサーバー(Streamable HTTP、ステートレス)。詳しくは後述 |
特定のプロトコルのアドレスを見たいときは、curlで指定します。curl -4 iseeu.ccはIPv4アドレスを、curl -6 iseeu.ccはIPv6アドレスを表示します(マシンにIPv6の経路がなければ、すぐにエラーになります)。JSONでも同じようにcurl -4 iseeu.cc/jsonとcurl -6 iseeu.cc/jsonが使えます。
JSONのエンドポイントに?format=textを付ける(またはAccept: text/plainを送る)と、key: value形式の平らな行で返るので、grepと組み合わせるのに便利です。formatに指定できるのはjsonかtextだけで、それ以外の値には、黙って別の形式で返すのではなく、"error": "invalid_format"付きの400を返します。curl "iseeu.cc/ua?format=text"はUser-Agent文字列だけを表示します。機械が読める形式の仕様は/openapi.json(OpenAPI 3.1)にあります。
/jsonのオブジェクト
レスポンスの例です(ここでも、予約済みの例示用アドレス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 }
}
値がないときは省略せずにnullにするので、構造はいつも同じです。当てはまらない測定値や、測定されなかった値も同様です。clientTcpRttMsはTCP接続(HTTP/1.1とHTTP/2)のときだけ、clientQuicRttMsはHTTP/3のときだけ値が入ります。Cloudflareは測定していない値を0として報告しますが、こちらはそれを往復0ミリ秒として渡さず、nullにして返します。地域とネットワークのデータは、接続元のアドレスに対するCloudflareのIPインテリジェンスに基づくもので、番地ではなく、あなたのプロバイダのネットワークを表します。tls.clientCiphersSha1とclientExtensionsSha1は、あなたのClientHelloをCloudflareがハッシュにしたもので、JA3やJA4ではありません。ChromeはTLS拡張の順序をランダムにするため、拡張のハッシュは接続のたびに変わるのがふつうで、2つのうちでは暗号スイートのハッシュのほうが安定しています。userAgent.kindはbrowser、search-crawler、ai-crawler、ai-assistant、social-preview、http-library、cli、headless-browser、monitoring、bot、unknownのいずれかです。
よくある使い方
ジョブを動かす前に、VPNやプロキシが有効かを確かめる。出口の国を想定どおりの国と比べ、違っていれば処理を止めます。
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; }
サーバーのグローバルアドレスを調べる。コンテナやCIのランナー、クラウド関数の中では、ネットワークインターフェースにプライベートアドレスしか出てきません。curl -s iseeu.ccだけで十分で、末尾に改行が付くので、シェルのコマンド置換でも安心して使えます。
HTTPクライアントが実際に何を送っているかを見る。ライブラリはヘッダーを足したり、名前を変えたり、並べ替えたりします。コードから/headersを呼べば送られたヘッダーがそのまま見え、/tlsを呼べば、ランタイムが実際に取り決めたTLSのバージョンと暗号スイートを確かめられます。
ほかの言語から:
// 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
iseeu.ccの外に問い合わせるエンドポイント
/api/rdapと/api/headers-checkは、それぞれ外部に1回リクエストを送るので、別枠のより低い上限があります。IPアドレスごとに1分あたり10回までで、それを超えると429とRetry-After: 60が返ります。RDAPの問い合わせ先は、IANAのブートストラップレジストリに載っているサーバーに限られます。ヘッダーチェックは、ポート80と443の公開http/https URLを受け付け、プライベートアドレス、予約済みアドレス、iseeu.cc自身(リダイレクト先として現れた場合も含む。このときは400 invalid_target)を拒否し、リダイレクトを5回までたどり、5秒で打ち切ります。どちらのエンドポイントも、問い合わせの内容を保存しません。
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}'
上限とフェアユース
- IPアドレスごとに1分あたり60リクエスト。超えると
429とRetry-After: 60が返ります。上限はCloudflareの拠点ごとに数えるので、おおよその値です。 - MCPも含め、レスポンスは一切キャッシュされません(
Cache-Control: no-store)。RESTのエンドポイントにはAccess-Control-Allow-Origin: *が付くので、どのサイトのブラウザJavaScriptからでも呼び出せます。 - 商用目的で使っていただいて差し支えありません。ただし、あなたのサイトの訪問者全員が読み込むページの裏で
/jsonを呼ぶのは避けてください。その規模で使うなら、先にご連絡ください。 - 作ろうとしているものに1分あたり60リクエストでは本当に足りない場合は、お問い合わせページから詳しく教えてください。
AIエージェント向けのMCPサーバー
https://iseeu.cc/mcpは、Streamable HTTPで動くリモートのModel Context Protocolサーバーです。状態を持たず、認証も不要で、5つのツールを提供し、どれも読み取り専用です。dns_lookupとrdap_lookupは、外部への問い合わせに対する1分あたり10回の上限を共有します。
| ツール | 入力 | 内容 |
|---|---|---|
| whoami | include_headers? | サーバーを呼び出しているマシンのグローバルIP、地域、ASNと組織名、Cloudflareのデータセンター、TLSとHTTPのバージョン、クライアントの種類 |
| check_headers | headers? | ボット判定で重視されがちな特徴を示します。User-AgentやAccept-Languageがない、クライアントヒントのないChrome、バージョンやプラットフォームの食い違い、別のIPを示すプロキシ系ヘッダー、DNTとGPCなどです。どのクライアントもヘッダーを省いたり偽ったりできるため、これは手がかりであって証拠ではありません。入力がなければ、呼び出し自体のヘッダーを調べます。 |
| parse_ua | user_agent? | ユーザーエージェントをブラウザ、エンジン、OS、デバイス、CPUに分解し、クローラー、AIエージェント、コマンドラインツール、ライブラリを見分けます |
| dns_lookup | name, type? | CloudflareのリゾルバーにDNS over HTTPSで問い合わせたA・AAAA・MX・TXT・NS・CNAME・CAA・SOAレコード。TTL、DNSSECフラグ付きで、存在しない名前(NXDOMAIN)とレコード型がないだけの場合を区別するヒントも返します |
| rdap_lookup | query, include_raw? | ドメイン、IPアドレス、AS番号の登録情報を、権威のあるRDAPサーバーから取得した要約 |
ブラウザで動くMCPクライアントは、どのオリジンからでも呼び出せます。CORSはPOST、GET、DELETEを、Content-Type、Mcp-Session-Id、Mcp-Protocol-Version、Last-Event-IDのリクエストヘッダー付きで許可し、Mcp-Session-Idを公開します。MCPのレスポンスはすべてCache-Control: no-store付きで送られ、サーバーは呼び出しと呼び出しの間に何も保持しません。リクエスト本文は64KBまで、JSON-RPCのバッチは10メッセージまでで、それより大きいものは、ツールを実行する前にエラー-32600で拒否します。
接続方法
# 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" } } }
whoamiについて、正直にお伝えしておきます。これが報告するのは、/mcpにHTTPリクエストを送ったマシンです。デスクトップやコマンドラインで動くエージェントならあなた自身のネットワークなので、プロキシやVPNが効いているかの確認に役立ちます。クラウドで動くアシスタントの場合は、提供元のサーバーになります。
ディスカバリー用のファイル
- /llms.txt:言語モデル向けの短いプレーンテキストの案内
- /.well-known/mcp/server-card.json:MCPサーバーカード
- /openapi.json:HTTPエンドポイントのOpenAPI 3.1による記述
プライバシー
APIは、IPアドレス、ヘッダー、問い合わせの内容をログに残さず、データベースも持ちません。レスポンスはリクエストをもとにメモリ上で組み立て、そのまま捨てます。エンドポイントごとの呼び出し回数は数えますが、IPアドレスは含めません。何をどこまで扱うかは、プライバシーポリシーで項目ごとに説明しています。
APIは現状のまま提供しており、稼働率の保証はありません。地域やネットワークのデータが間違っていることもあります。セキュリティや不正対策の判断を、これだけに頼って下さないでください。