IPGeolocation.io MCP Server について
IPGeolocation.io MCP Serverは、IP位置情報、ネットワーク、安全性の検索などをMCPクライアントに提供します。17のツールで一括検索、タイムゾーン変換、天文データ、ユーザーエージェント解析にも対応します。
主な機能
- 01IPの位置、企業、ASN情報の検索
- 02VPN、プロキシ、Tor、脅威指標の検出
- 03IPとセキュリティ情報の一括検索
- 04タイムゾーン、通貨、天文データの取得
- 05ユーザーエージェント文字列の解析
- 06メモリ内のキャッシュ結果の読み取り
活用シーン
- 01IPの位置とネットワーク情報を確認
- 02IPのVPN利用や不正利用の兆候を調査
- 03IPやユーザーエージェント文字列を一括分析
- 04地域間の時刻変換と日の出時刻の確認
MCP 対応
MCPサーバーとしてstdio経由で、IP位置情報、セキュリティ、ASN、不正利用の連絡先、タイムゾーン、天文、通貨、ユーザーエージェント解析の17ツールを公開します。get_my_ip以外の大半のAPIツールにはIPGeolocation.io APIキーが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| ip | string | いいえ | 検索する IPv4 アドレス、IPv6 アドレス、またはドメイン名です。ドメイン検索には有料プランが必要です。省略するとサーバーのパブリックな送信元 IP が使用されます。 |
| lang | string | いいえ | レスポンスの言語コード(en、de、ru、ja、fr、cn、es、cs、it、ko、fa、pt)。有料プランのみ利用できます。無料プランでは en 以外の値を渡すと 401 エラーが返されます。デフォルトは en です。 |
| fields | string | いいえ | 返却するフィールドをカンマ区切りのドットパスで指定します(例:location.city,asn.organization)。無料プランを含むすべてのプランで利用できます。レスポンスサイズを縮小でき、include と組み合わせるとクレジット消費を抑えられる場合があります。security または abuse 配下のフィールドを指定すると、該当する include モジュールが自動で追加されます。location.accuracy_radius/confidence/locality は geo_accuracy を、location.dma_code は dma_code を自動で追加します。これらの任意モジュールには有料プランが必要です。 |
| include | string | いいえ | レスポンスに含める追加モジュールをカンマ区切りで指定します。有料プランのみ利用できます。選択肢:security(+2 クレジット)、abuse(+1 クレジット)、hostname、liveHostname、hostnameFallbackLive、user_agent、geo_accuracy、dma_code、または *(合計 4 クレジット)。無料プランではこのパラメーターを使用できません。 |
| excludes | string | いいえ | レスポンスから除外するフィールドをカンマ区切りのドットパスで指定します(例:currency,location.continent_code)。無料プランを含むすべてのプランで利用できます。 |
| force_refresh | boolean | いいえ | デフォルトは false です。true にするとキャッシュされた lookup_ip データを使用せず、更新が成功すると新たな上流リクエストを行い、クレジットを消費する場合があります。 |
詳細
IPGeolocation.io MCP サーバー
公式のIPGeolocation.io MCP サーバーは、正確なIPジオロケーション、企業情報、ASNおよびネットワークデータ、IPセキュリティ(VPN、プロキシ、Tor、ボット、ホスティング、スパムの検出)、不正利用に関する連絡先、タイムゾーン、天文情報、通貨データ、ユーザーエージェント解析のための17個のツールを提供します。
MCP(Model Context Protocol)は、クライアントをこれらのツールに接続します。クライアントまたはホストは、stdio経由でローカルコマンドを起動できる必要があります。設定例については、クライアント別のインストールをご覧ください。
このREADMEは2.0.2について説明しています。 以下のnpxコマンドとCursorのインストールリンクは、将来のメジャーリリースを含むnpmのlatestタグに従います。更新を読み込むには、サーバーを再起動してください。選択したバージョンが変わらない場合、npmはパッケージファイルをキャッシュから再利用します。リリースの詳細については、変更履歴をご覧ください。
| 項目 | 値 |
|---|---|
| パッケージ | ipgeolocation-io-mcp |
| バージョン | 2.0.2 |
| リリース日 | 2026-10-27 |
| トランスポート | stdio |
| Node.js | >=22 |
クイックスタート
- 無料のIPGeolocation APIキーを作成します。
- 既存のサーバーを残したまま、このエントリーをクライアントのプライベート設定に統合します。設定ファイルの場所については、クライアント別のインストールをご覧ください。Cursorにはワンクリックインストーラーもあります。
{
"mcpServers": {
"ipgeolocation": {
"command": "npx",
"args": ["-y", "ipgeolocation-io-mcp@latest"],
"env": {
"IPGEOLOCATION_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
- サーバーを再読み込みするか、クライアントを再起動します。
- **「8.8.8.8の所在地はどこですか?」**と質問します。
目次
- クイックスタート
- クライアント別のインストール
- 動作確認
- プラン別のツール
- ツールのリファレンス
- プロンプトの例
- 回答とツール出力の例
- エラーコード
- 仕組み
- キャッシュ
- キャッシュ結果のページネーション
- 環境変数
- ソースからのビルド
- Docker
- テスト
- トラブルシューティング
- 料金
- リンク
- ライセンス
- プライバシーポリシー
クライアント別のインストール
要件
- npm/ソースからインストールする場合はNode.js 22以降、または互換性のあるNode.jsランタイムを備えたバンドルホスト
- npmの設定例を使う場合は
npxが利用可能であること - ほとんどのAPIツールでIPGeolocation.io APIキーが必要です
最新のセキュリティ更新が適用されたサポート対象のNode.jsリリースを使用してください。
get_my_ipにはAPIキーは不要です。それ以外の15個のAPIツールにはAPIキーが必要です。get_cached_resultはメモリにすでに保持されている結果を読み込みます。元の検索時と同じAPIキーを使用してください。
実際のキーは、非公開のユーザー設定、またはクライアントのシークレット/環境変数設定を使用してください。コミットするプロジェクト設定にキーを含めないでください。以下の各クライアントでは、形式が異なる場合を除き、クイックスタートのサーバーエントリを使用します。
Codex CLI
これらのコマンドを実行する前に、非公開のシェル環境でIPGEOLOCATION_API_KEYを設定してください。変数参照を使用することで、入力するコマンドやシェルの履歴にキーの値が残りません。
codex mcp add ipgeolocation --env "IPGEOLOCATION_API_KEY=$IPGEOLOCATION_API_KEY" -- npx -y ipgeolocation-io-mcp@latest
codex mcp list
サーバーを追加した後、新しいCodexセッションを開始してください。
Claude Desktop
公開済みサーバーをClaude Marketplaceの掲載ページからインストールしてください。Claude DesktopでSettings > Extensions > Browse extensionsを開き、IPGeolocation.io MCP Serverを見つけて、インストール時にAPIキーを設定します。Anthropicのデスクトップ拡張機能ガイドを参照してください。このディレクトリでは、承認済みの公開バンドルを配布しています。更新がGitHub Releasesに反映されるまで時間がかかる場合があります。インストール済みのバージョンを確認するか、以下のバージョン指定バンドルをダウンロードしてください。
npmを手動で設定するには、Claude DesktopでSettings > Developer > Edit Configを開きます。claude_desktop_config.jsonが開きます。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
mcpServersにクイックスタートのエントリをマージします。
保存後、Claude Desktopを完全に終了して再度開いてください。公式のローカルサーバー設定ガイドを参照してください。
MCPバンドルをインストールするクライアントの場合は、公開済みのv2.0.2 .mcpbバンドルをGitHub Releasesからダウンロードしてください。バンドルにはサーバーと依存関係が含まれていますが、ホストにはNode.js 22以降のランタイムが必要です。ホストからバンドルの設定を求められたら、APIキーを入力してください。
Cline
ClineでMCP Servers > Configure > Configure MCP Serversを開きます。設定JSONのmcpServersの下にクイックスタートのエントリを追加してください。Cline CLIでは、既定で~/.cline/data/settings/cline_mcp_settings.jsonを使用します。ClineのMCPガイドを参照してください。
保存後、Clineを再起動してください。
Cursor
ワンクリックでインストール:
または、このプロジェクト用の.cursor/mcp.json、もしくはすべてのプロジェクト用の~/.cursor/mcp.jsonに追加してください。CursorのMCPガイドを参照してください。
{
"mcpServers": {
"ipgeolocation": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ipgeolocation-io-mcp@latest"],
"env": {
"IPGEOLOCATION_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
保存後、Cursorを再起動してください。
Cursor プラグイン
このリポジトリには、ipgeolocation-io-mcp 用の Cursor プラグインが含まれています。このプラグインはローカルで stdio 経由で実行され、Node.js 22 以降が必要です。
ローカルにインストールするには、このリポジトリを ~/.cursor/plugins/local/ の下に新しいディレクトリとしてクローンし、Cursor を再読み込みして、Customize > Plugins を開きます。
- ローカルプラグイン: Cursor の起動環境に
IPGEOLOCATION_API_KEYを設定します。プラグインはその環境からキーを読み取ります。 - マーケットプレイスからのインストール: プラグインのプライベート設定にキーを設定します。
API キーが空、または未設定の場合でも、get_my_ip は動作します。キーが必要な API ツールは、リクエストを送信せずにキーがないことを示すエラーを返します。
Cursor CLI でローカルのチェックアウトを読み込むには:
agent --plugin-dir /absolute/path/to/ipgeolocation-io-mcp
キーが必要な API リクエストでは、お使いのアカウントのプランとクレジットが使用されます。get_cached_result ツールは、別の API リクエストを行わずに、保存済みのレスポンスページを読み取ります。
ツールの項目が重複するため、このサーバーは一つの方法だけでインストールしてください。既存の設定に他のサーバーを追加しておくことはできます。
Windsurf / Cascade
Cascade の ... (Actions) メニューで、MCP セクションの Open MCP config file を選択します。インストール済みのバージョンで開いたファイルに、クイックスタートのエントリーを統合します。設定パスはリリースによって異なります。新しいリリースで有効なエージェントと設定場所については、ベンダーの Cascade MCP ガイドを参照してください。
ファイルを保存し、クライアントでサーバーを再読み込みします。
Kiro Powers
Kiro Power は、IP ジオロケーション、企業情報、ASN とネットワークデータ、IP セキュリティ(VPN、プロキシ、Tor、ボット、ホスティング、スパムの検出)、不正利用に関する連絡先、タイムゾーン、天文学、通貨データ、ユーザーエージェントの解析に関する 17 個のツールを提供します。ipgeolocation-io-mcp をローカルで stdio 経由で実行し、npm の latest タグに従います。Node.js 22 以降が必要です。Powers > Add Custom Power から packaging/kiro フォルダーをインポートし、セットアップガイドに従ってプライベート API キーを設定してください。ほとんどのツールにはキーが必要です。アクセスとクレジットはプランによって異なります。
VS Code / GitHub Copilot
コマンドパレットから MCP: Add Server を実行し、ローカルコマンドを選択して、npx -y ipgeolocation-io-mcp@latest を指定します。ユーザー専用の設定には Copilot Global を、持ち運び可能なワークスペース設定には .mcp.json を選択します。サーバーの環境変数に IPGEOLOCATION_API_KEY を追加します。
持ち運び可能な .mcp.json 形式では、クイックスタートに示されているトップレベルの mcpServers オブジェクトを使用します。
サーバーの Start アクションを実行し、プロンプトが表示されたらその設定を承認します。既存の .vscode/mcp.json ファイルでは、代わりにトップレベルの servers オブジェクトを使用します。VS Code の MCP セットアップガイドを参照してください。
Glama
Glamaでサーバーを直接試すことができます。必要なのは IPGEOLOCATION_API_KEY だけです。キャッシュ、タイムアウト、出力制限を変更する場合を除き、他の環境変数フィールドは空のままにしてください。
まだキーをお持ちでない場合は、無料の IPGeolocation API キーを作成してください。
その他の MCP クライアント
クライアントの設定形式で、クイックスタートにある ipgeolocation サーバーのエントリーを使用します。クライアントはローカルの stdio プロセスの起動に対応している必要があります。リモート MCP URL のみを受け付けるクライアントには、ホストされたエンドポイントが必要です。このパッケージが提供するのはサーバーコマンドです。
動作確認
セットアップ後、次の項目を試してください。
| プロンプト | 期待されるツール |
|---|---|
| 8.8.8.8 はどこにありますか? | lookup_ip |
| IP 49.12.212.42 について、脅威インジケーター、会社、ASN、都市を教えてください。 | fields と include=security を指定した lookup_ip |
| 2.56.12.11 の脅威インジケーターと不正利用に関する連絡先メールアドレスを表示してください。 | include=security,abuse を指定した lookup_ip |
| AS1 について、上流 ASN 番号のみを一覧表示してください。 | include=upstreams を指定した lookup_asn |
| ニューヨークの 2026-03-07 09:30 を東京時間に変換してください。 | convert_timezone |
| 2026-03-10 から 2026-03-15 までのカラチの日の出時刻を教えてください。 | get_astronomy_time_series |
| このユーザーエージェントを解析してください:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 | parse_user_agent |
プラン別ツール
バージョン 2.0.2 では、16 個の API ツールと、クレジットを消費しないページリーダー get_cached_result が提供されています。バルクツールの入力数はデフォルトで 250 件です。実際の上限は、2 つの項目数制限の設定のうち低い方になります。
記載されているコストは、上流へのリクエストが成功した場合に適用されます。キャッシュヒットとキャッシュ済みページの読み取りでは、追加のクレジットは消費されません。実際の請求額は、API の X-Credits-Charged レスポンスヘッダーで確認できます。クレジットのルールを参照してください。
無料プラン
1 日あたり 1,000 クレジットです。次の 7 つの API ツールでは、ドキュメントに記載された基本データを取得できます。get_cached_result では、以前に返されたページも 0 クレジットで読み取れます。
| ツール | クレジット | 機能 |
|---|---|---|
lookup_ip | 1 | 1 つの IP の位置情報、タイムゾーン、通貨、ASN |
get_my_ip | 0 | サーバーを実行しているマシンのパブリック IP |
lookup_currency | 1 | 1 つの IP の通貨と国のメタデータ |
get_timezone | 1 | 名前、場所、IP、空港コード、または UN/LOCODE によるタイムゾーンの取得 |
convert_timezone | 1 | 2 つの場所の間で時刻を変換 |
get_astronomy | 1 | 1 日分の日の出、日の入り、月の出、月の入り、薄明、月相 |
get_astronomy_time_series | 1 | 日付範囲の日ごとの天文データ(最大 90 日) |
lookup_company は、無料プランでも会社の詳細を含まず、基本的な ASN 所有者情報を返します。API が有料のネットワークデータを返さない場合、lookup_network はローカルエラーを返します。API のドキュメントでは、バルクのジオロケーションは有料プラン限定とされていますが、無料プランのキーを使ったライブチェックでは、基本的なバルク結果も返されました。プランの利用可否は上流側で決まるため、この確認結果だけを根拠に無料プランでバルク機能を利用できると想定しないでください。
有料プラン
クレジットを消費しないキャッシュ済み結果リーダーを含む、全 17 個のツールが利用できます。有料プランでは、lookup_ip に network、company、拡張 asn フィールドが追加され、さらに security、abuse、hostname、liveHostname、hostnameFallbackLive、user_agent、geo_accuracy、dma_code、または * に対する include パラメーターが利用できます。
| ツール | クレジット | 機能 |
|---|---|---|
bulk_lookup_ip | IP ごとに 1 | バッチジオロケーション。入力数はデフォルトで 250 件 |
check_security | 2 | VPN、プロキシ、Tor、ボット、スパム、脅威のフラグを確認 |
bulk_security_check | IP ごとに 2 | 脅威チェックを一括実行 |
lookup_company | 1 | 1 つの IP の会社名と ASN 保有者 |
lookup_network | 1 | 経路プレフィックス、接続タイプ、エニーキャストのステータス |
parse_user_agent | 1 | 1 つの UA 文字列をブラウザー、デバイス、OS、エンジンに解析 |
bulk_parse_user_agent | UA ごとに 1 | UA の一括解析。文字列数はデフォルトで 250 件 |
lookup_asn | 1 | ASN の詳細、ピア、上流、下流、経路、WHOIS |
get_abuse_contact | 1 | 不正利用に関する連絡先のメールアドレス、電話番号、住所、経路 |
include を指定した lookup_ip のクレジット計算:
| 組み合わせ | 合計クレジット |
|---|---|
| 基本の検索 | 1 |
include=security | 3 |
include=abuse | 2 |
include=* | 4 |
include=security&fields=security | 2 |
include=abuse&fields=abuse | 1 |
現在のプランの詳細と料金については、IPGeolocation の料金ページを参照してください。
ツールリファレンス
ツールの引数は、公開されているスキーマに一致している必要があります。不明なパラメーターは API リクエストの前にローカルで拒否されるため、セレクターの入力ミスによってサーバーの IP が誤って検索されることはありません。
変換用のセレクターを含む座標と elevation には、"24.86" や "10" のような文字列を指定します。force_refresh にはブール値を指定します。
lookup_ip
IP Geolocation API を使って、単一の IP またはドメインを検索します。無料プランと有料プランがあります。基本 IP データには 1 クレジットかかります。
1 つの IP アドレスについて、位置情報、タイムゾーン、通貨、ASN が必要な場合に使用します。有料プランでは、include モジュールを追加して、同じ呼び出しでセキュリティ、不正利用、ホスト名のデータを取得できます。これにより、追加のリクエストを避けられます。
無料プランでは、基本的な位置情報、国のメタデータ、通貨、タイムゾーン、基本的な ASN が返されます。有料プランでは、network、company、拡張 ASN、include パラメーターが利用できます。ドメインの検索には有料プランが必要です。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | IPv4、IPv6、またはドメインです。ドメインの検索には有料プランが必要です。 |
lang | いいえ | レスポンスの言語です。英語以外を指定するには有料プランが必要です。 |
include | いいえ | 追加モジュール:security、abuse、hostname、liveHostname、hostnameFallbackLive、user_agent、geo_accuracy、dma_code、または * |
fields | いいえ | 返すフィールドをカンマ区切りで指定します |
excludes | いいえ | 除外するフィールドをカンマ区切りで指定します |
force_refresh | いいえ | キャッシュを使わず、API に直接アクセスします |
ヒント:include と fields を組み合わせると、クレジット消費を抑えられます。たとえば、include=security&fields=security の場合、基本の位置情報レスポンスを省くため、3 クレジットではなく 2 クレジットかかります。同様に、include=abuse&fields=abuse の場合は、2 クレジットではなく 1 クレジットかかります。
フィールドを指定すると、それに必要なオプションモジュールが有効になります。これらのモジュールには有料プランが必要です。
| 選択したフィールド | 有効になるモジュール |
|---|---|
security.is_vpn | security |
location.accuracy_radius、location.confidence、または location.locality | geo_accuracy |
location.dma_code | dma_code |
精度と DMA の値は location 内に表示されます。明示的に include を指定すると、fields でそのモジュールを省略しても、モジュールは含まれます。ネストされたフィールドは除外できますが、fields で指定したルートや、明示的に include したルートは含まれたままです。include=* はフィールドの選択と除外に従いますが、ルートを保持することはありません。キャッシュされた結果にも、新しいレスポンスと同じルールが適用されます。
bulk_lookup_ip
IP を一括検索します。有料です。IP ごとに 1 クレジットかかります。
IP またはドメインの配列を受け取ります(デフォルトでは最大 250 件)。バッチ上限は IPGEOLOCATION_MCP_MAX_BULK_ITEMS と IPGEOLOCATION_MCP_MAX_RESULT_ITEMS の小さい方です。lookup_ip と同じ include、fields、excludes オプションに対応しています。
| パラメーター | 必須 | 説明 |
|---|---|---|
ips | はい | IP アドレスまたはドメインの配列です |
lang | いいえ | レスポンスの言語です |
include | いいえ | IP ごとの追加モジュールです |
fields | いいえ | IP ごとに返すフィールドをカンマ区切りで指定します |
excludes | いいえ | IP ごとに除外するフィールドをカンマ区切りで指定します |
force_refresh | いいえ | キャッシュを使いません |
get_my_ip
サーバーを実行しているマシンのパブリック IP を返します。無料です。0 クレジットです。API キーは不要です。
パラメーターは不要です。常にネットワークにアクセスします(キャッシュされません)。サーバープロセスが稼働していることをすばやく確認するのに便利です。
check_security
IP Security APIを通じて、1つのIPの脅威および匿名性に関するデータを取得します。有料。2クレジット。
脅威スコア、VPN/プロキシ/Torのフラグ、プロバイダー名、信頼度スコア、ボット/スパムの指標、匿名性フラグ、クラウドプロバイダーのステータスを返します。
同じプロンプトで位置情報またはASNも求められている場合は、include=security を指定して lookup_ip を使うと、1回のリクエストで取得できます。別々にセキュリティチェックと基本検索を行う場合と同じ、3クレジットがかかります。不正利用の連絡先も必要な場合は、include に abuse を追加してください。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | チェックするIPアドレス |
fields | いいえ | 返すフィールドをカンマ区切りで指定 |
excludes | いいえ | 除外するフィールドをカンマ区切りで指定 |
force_refresh | いいえ | キャッシュを使用しない |
bulk_security_check
check_security の一括処理版です。有料。IPあたり2クレジット。 デフォルトで最大250件の入力を受け付けます。一括処理の上限は bulk_lookup_ip と同じです。
| パラメーター | 必須 | 説明 |
|---|---|---|
ips | はい | IPアドレスの配列 |
fields | いいえ | IPごとに返すフィールドをカンマ区切りで指定 |
excludes | いいえ | IPごとに除外するフィールドをカンマ区切りで指定 |
force_refresh | いいえ | キャッシュを使用しない |
get_timezone
Time Zone APIを通じて、場所の現在時刻とタイムゾーンの詳細を取得します。無料・有料プラン対応。1クレジット。
IANAタイムゾーン名、座標、IPアドレス、空港コード(IATA/ICAO)、またはUN/LOCODEを指定できます。レスポンスには、タイムゾーンのオフセット、日付/日時の各形式、current_time、current_time_unix、time_24、time_12、week、month、year、タイムゾーンの略称、DSTの切り替えに関する詳細が含まれます。
セレクターを指定しない場合、APIはサーバーマシンのパブリックな外向きIPを使用します。これはお使いのIPと異なる場合があります。
現在時刻を返すため、毎回ネットワークにアクセスします(キャッシュされません)。
| パラメーター | 必須 | 説明 |
|---|---|---|
tz | いいえ | IANAタイムゾーン名(例:America/New_York) |
lat + long | いいえ | 緯度と経度 |
location | いいえ | 都市名または住所の文字列 |
ip | いいえ | IPアドレス |
iata_code | いいえ | IATA空港コード |
icao_code | いいえ | ICAO空港コード |
lo_code | いいえ | UN/LOCODE |
lang | いいえ | レスポンスの言語。英語以外は有料プランが必要です。 |
convert_timezone
2つの場所の間で時刻を変換します。無料・有料プラン対応。1クレジット。
IANAタイムゾーン、座標、都市名/住所、空港コード、またはUN/LOCODEを使って、変換元と変換先のセレクターをそれぞれ1つ指定してください。time を省略すると、APIは現在時刻を変換します。このツールではIPセレクターと lang は指定できず、毎回APIを呼び出します(キャッシュされません)。
| パラメーター | 必須 | 説明 |
|---|---|---|
time | いいえ | yyyy-MM-dd HH:mm または yyyy-MM-dd HH:mm:ss。デフォルトは現在時刻です。 |
tz_from / tz_to | いいえ | IANAタイムゾーン名 |
lat_from + long_from | いいえ | 変換元の座標 |
lat_to + long_to | いいえ | 変換先の座標 |
location_from / location_to | いいえ | 都市名/住所の文字列 |
iata_from / iata_to | いいえ | IATA空港コード |
icao_from / icao_to | いいえ | ICAO空港コード |
locode_from / locode_to | いいえ | UN/LOCODE |
get_astronomy
天文学 APIを通じて、1つの場所と1つの日付の太陽および月のデータを取得します。無料および有料。1クレジット。
日の出、日の入り、月の出、月の入り、朝と夕方の薄明、太陽の南中、昼の長さ、月相、太陽/月の状態フラグ、現在の太陽/月の位置(高度、方位角)を返します。
date を設定した場合も含め、このツールは常に API を呼び出し、レスポンスキャッシュは使用しません。
| パラメーター | 必須 | 説明 |
|---|---|---|
lat + long | いいえ | 座標(指定された場合は最優先) |
location | いいえ | 都市または住所 |
ip | いいえ | IP アドレス |
date | いいえ | YYYY-MM-DD。デフォルトは今日です。 |
elevation | いいえ | メートル単位、0~10000 |
time_zone | いいえ | 出力時刻を制御する IANA 名 |
lang | いいえ | レスポンスの言語。英語以外は有料プランが必要です。 |
get_astronomy_time_series
最大90日間の日付範囲の天文学データを取得します。無料および有料。リクエストごとに1クレジット。
各日のエントリーには、mid_night、night_end、morning、sunrise、sunset、evening、night_begin、sun_status、solar_noon、day_length、moon_phase、moonrise、moonset、moon_status が含まれます。範囲内のデータを取得する場合は、get_astronomy を繰り返し呼び出す代わりにこちらを使用してください。
| パラメーター | 必須 | 説明 |
|---|---|---|
dateStart | はい | 開始日(YYYY-MM-DD) |
dateEnd | はい | 終了日(YYYY-MM-DD)。最大範囲:90日。 |
lat + long | いいえ | 座標(指定された場合は最優先) |
location | いいえ | 都市または住所 |
ip | いいえ | IP アドレス |
elevation | いいえ | メートル単位 |
time_zone | いいえ | 出力時刻を制御する IANA 名 |
lang | いいえ | レスポンスの言語。英語以外は有料プランが必要です。 |
force_refresh | いいえ | キャッシュをスキップします |
parse_user_agent
User-Agent APIを通じて、1つの UA 文字列を解析し、ブラウザー、デバイス、OS、エンジンのデータを取得します。有料。1クレジット。
ボットやクローラーも分類します。注:解析対象は渡された uaString です。MCP 接続自体から呼び出し元の UA を推測することはありません。
| パラメーター | 必須 | 説明 |
|---|---|---|
uaString | はい | 解析するユーザーエージェント文字列 |
force_refresh | いいえ | キャッシュをスキップします |
name、type、version、device、engine、operating_system を返します。
bulk_parse_user_agent
parse_user_agent の一括処理版です。有料。文字列ごとに1クレジット。
デフォルトでは、1リクエストにつき最大250個の文字列を受け付けます。一括処理の上限は、IPGEOLOCATION_MCP_MAX_BULK_ITEMS と IPGEOLOCATION_MCP_MAX_RESULT_ITEMS のうち小さい方です。
| パラメーター | 必須 | 説明 |
|---|---|---|
uaStrings | はい | ユーザーエージェント文字列の配列 |
force_refresh | いいえ | キャッシュをスキップします |
lookup_company
1つの IP の企業情報と ASN の所有者情報を取得します。企業情報には有料プランが必要です。無料プランでは基本的な ASN 情報のみ返されます。1クレジット。
company および asn オブジェクトを返します。lookup_ip は、位置情報、タイムゾーンなどを含む同じデータを返します。企業情報と ASN 情報だけが必要で、より小さいレスポンスを求める場合はこちらを使用してください。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | IP アドレス |
force_refresh | いいえ | キャッシュをスキップします |
lookup_currency
1つの IP の通貨、国番号、TLD、言語を取得します。無料および有料。1クレジット。
currency および country_metadata オブジェクトを返します。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | IP アドレス |
force_refresh | いいえ | キャッシュをスキップします |
lookup_network
1 つの IP のルートプレフィックス、接続タイプ、エニーキャストの状態を返します。有料。1 クレジット。
connection_type、route、is_anycast を含む network オブジェクトを返します。API がネットワークデータを返さない場合、このツールは空の成功結果ではなくローカルエラーを返します。上流の HTTP ステータスを作り出すことはありません。また、API 呼び出しによってクレジットがすでに消費されている可能性があります。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | IP アドレス |
force_refresh | いいえ | キャッシュをスキップします |
lookup_asn
ASN API を通じて、ネットワークの割り当て情報と関係データを取得します。有料。1 クレジット。
ASN の詳細に加え、必要に応じてピア、アップストリーム、ダウンストリーム、ルート、WHOIS データセットを取得するには、このツールを使用します。include で必要なデータセットをリクエストし、キャッシュされた結果をフィルタリングして別の項目を取得できます。lookup_ip でも、IP の検索結果の一部として ASN メタデータを取得できます。
fields で参照されている任意のデータセット(upstreams.as_number など)は自動的に有効になります。excludes だけでは、追加のデータセットはリクエストされません。
| パラメーター | 必須 | 説明 |
|---|---|---|
asn | いいえ | ASN(例:AS13335 または 13335) |
ip | いいえ | ASN に解決する IP アドレス |
include | いいえ | peers、downstreams、upstreams、routes、whois_response |
fields | いいえ | 返すフィールド(カンマ区切り) |
excludes | いいえ | 除外するフィールド(カンマ区切り) |
force_refresh | いいえ | キャッシュをスキップします |
get_abuse_contact
IP Abuse Contact API を通じて、1 つの IP の不正利用に関する連絡先情報を取得します。有料。1 クレジット。
不正利用ルート、国、連絡先名、組織、住所、メールアドレス、電話番号を返します。同じ IP の位置情報やセキュリティデータも必要な場合は、include=abuse(または include=security,abuse)を指定して lookup_ip を使用すると、1 回の呼び出しですべて取得できます。
| パラメーター | 必須 | 説明 |
|---|---|---|
ip | いいえ | IP アドレス |
fields | いいえ | 返すフィールド(カンマ区切り) |
excludes | いいえ | 除外するフィールド(カンマ区切り) |
force_refresh | いいえ | キャッシュをスキップします |
get_cached_result
以前の大きすぎる結果からページを読み取ります。無料および有料。0 クレジット。2.0.1 で追加。
| パラメーター | 必須 | 説明 |
|---|---|---|
cursor | はい | 前のレスポンスの page.cursor を指定するとそのページを再取得し、page.next_cursor を指定すると続きのページを取得します |
同じサーバープロセスと API キーを使用してください。ページを読み取るとスナップショットのアイドル有効期限が延長されます。また、失敗した場合も含め、API を呼び出すことはありません。レスポンスフィールドと復旧例の全体については、キャッシュ結果のページネーション を参照してください。
プロンプトの例
有料のIP調査では、lookup_ipを1回呼び出し、ip: "49.12.212.42"、include: "security,abuse"、fields: "location,company,asn,security,abuse"を指定します。これにより、位置情報、所有者、脅威の兆候、乱用に関する連絡先をまとめて取得でき、推定コストは4クレジットです。証拠と不明なフィールドを説明し、許可/ブロックを推奨する前にユーザーのポリシーを適用してください。
複数のIPをまとめて照会する場合は、bulk_lookup_ipを呼び出し、ips: ["8.8.8.8", "10.0.0.1", "1.1.1.1"]とfields: "location.country_name"を指定します。structuredContent.errorsを確認してプライベートIPを特定し、成功したレコードをそのまま使用してください。有効な2件のIP照会にかかる推定コストは2クレジットです。プライベートIPには課金されません。件数の多いバッチは、案内されている入力上限に従って分割してください。
ASNは、IPルートをアナウンスするネットワークを識別します。Anycastでは、1つのIPを複数の場所から提供できるため、その位置情報が特定のリクエストを処理したサーバーの場所を示すとは限りません。bogonアドレスは、予約済み、またはその他の理由でパブリックにルーティングできないアドレスです。エラー内のUpstreamは、このサーバーが接続したIPGeolocation.io APIを指します。
IPの位置情報は推定値です。利用可能な場合はinclude=geo_accuracyを使って不確実性を評価してください。脅威スコアやVPN/プロキシのフラグは調査のための手がかりであり、トラフィックが無害または悪意のあるものであることを保証するものではありません。欠落、null、不明の指標はfalseではなく、利用できないものとして扱ってください。位置情報、所有者、セキュリティの兆候、乱用に関する連絡先を、独自の許可/ブロックポリシーと組み合わせてください。
IPの脅威の兆候を調べる
- 49.12.212.42の脅威の兆候と都市を表示して、ネットワークポリシーに照らして評価できるようにしてください。
- 次のIPについて、VPN、プロキシ、Tor、ボット、スパムの兆候を確認してください:49.12.212.42、2.56.12.11、8.8.8.8
- 49.12.212.42の脅威スコア、クラウドプロバイダーかどうか、中継点のように見えるかどうかを教えてください。
IPの所有者を調べる
- 1.1.1.1を使用している組織と、そのIPをルーティングしているASNを教えてください。
- AS24940について、上流ASN番号のみを列挙してください。
- このIPはAnycastですか。また、どのルートプレフィックスがアナウンスされていますか:1.1.1.1
乱用に関する連絡先を取得する
- IP 2.56.12.11の乱用に関する連絡先メールアドレス、電話番号、組織名を教えてください。
- 1.0.0.0の乱用に関する連絡先と、該当するネットワークルートを教えてください。
- このIPの乱用に関する連絡先情報のみを表示してください:1.1.1.1
タイムゾーンの照会と時刻の変換
- 今、東京は何時ですか?
- 2026-03-07 09:30のニューヨーク時間を東京時間に変換してください。
- JFK空港の現在の現地時刻は何時ですか?
日の出、日の入り、月のデータ
- 2026-06-21のロンドンの日の出と日の入りを教えてください。
- 2026-03-10から2026-03-15までのカラチの日の出時刻を表示してください。
- 2026-07-17のニューヨークの月相と日照時間を教えてください。
ユーザーエージェント文字列を解析する
- 次のユーザーエージェントを解析してください:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9
- 次のユーザーエージェントをまとめて解析し、それぞれのブラウザー、OS、デバイスの種類を教えてください。
- このユーザーエージェントはクローラーまたはボットのように見えますか?Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
回答とツール出力の例
以下の回答例は説明用です。正確な文言はモデルによって異なります。JSONブロックは短縮された例であり、現在の測定値ではありません。位置情報、所有者、連絡先、現在時刻のフィールドは変化する場合があります。
単一IPの照会
プロンプト: 91.128.103.196の位置情報を調べ、国、都市、ASN、現地時刻を教えてください。
回答例: 91.128.103.196はスウェーデンのストックホルムにあります。ASNはAS1257で、Tele2 Sverige ABが運営しています。タイムゾーンはEurope/Stockholmで、現地時刻は2026-02-12 18:36:54でした。
{
"ip": "91.128.103.196",
"location": {
"country_name": "Sweden",
"state_prov": "Stockholms lan",
"city": "Stockholm"
},
"asn": {
"as_number": "AS1257",
"organization": "Tele2 Sverige AB",
"country": "SE"
},
"time_zone": {
"name": "Europe/Stockholm",
"current_time": "2026-02-12 18:36:54.401+0100"
}
}
時刻の変換
プロンプト: 2025-01-21 13:42:52をDXBからLHRに変換してください。
回答例: ドバイの2025-01-21 13:42:52は、ロンドンの2025-01-21 09:42:52に相当します。時差は4時間です。
{
"original_time": "2025-01-21 13:42:52",
"converted_time": "2025-01-21 09:42:52",
"diff_hour": 4,
"diff_min": 240
}
不正利用に関する連絡先
プロンプト: 1.0.0.0 の不正利用に関する連絡先を教えてください。
回答例: 1.0.0.0 の不正利用に関する連絡先は、オーストラリアの IRT-APNICRANDNET-AU です。対象ルートは 1.0.0.0/24 です。メールアドレス:[email protected]。
{
"ip": "1.0.0.0",
"abuse": {
"route": "1.0.0.0/24",
"country": "AU",
"name": "IRT-APNICRANDNET-AU",
"address": "PO Box 3646, South Brisbane, QLD 4101, Australia",
"emails": ["[email protected]"]
}
}
エラーコード
ツールの実行に失敗すると、isError: true、読み取り可能なテキスト、およびメッセージを編集・長さ制限したうえでカテゴリ、再試行の可否、ガイダンスを含む structuredContent.error が返されます。
| 失敗の発生元 | 構造化された詳細 |
|---|---|
| API から HTTP エラーレスポンスを受信 | source: "ipgeolocation_api"、status は受信した HTTP ステータス |
| 登録済みスキーマによる拒否:フィールド型の誤り、必須フィールドの欠落、不明なパラメーター、またはバッチサイズ超過 | source: "mcp_server"、category: "validation"、retryable: false。API 呼び出し前に拒否 |
| ハンドラーによる検証(日時や座標ペアなど)、API キーの欠落、またはキャッシュされた結果が利用できない | source: "mcp_server"、category: "tool_error"、retryable: false。HTTP ステータスは付与されません |
| ローカルリクエストのタイムアウト | source: "mcp_server"、category: "timeout"、ローカルの status: 504、retryable: true |
接続障害、無効な JSON、または無効な get_my_ip プロバイダーペイロード | source: "mcp_server"、category: "upstream_request"、ローカルの status: 502、retryable: true |
| API が HTTP リダイレクトを返した | source: "mcp_server"、category: "redirect_blocked"、ローカルの status: 502、retryable: false。リダイレクトを調査するか、サポートにお問い合わせください |
入力検証には、登録済みの Zod スキーマと、実行時の失敗と同じ構造化エラー形式が使用されます。不明なツールや不正な MCP リクエストはプロトコルエラーになります。再試行に関するガイダンスは、再試行が成功することや、費用がかからないことを保証するものではありません。ローカルでのタイムアウトは、API が有料リクエストを処理した後に発生する場合があります。HTTP 429 はクレジットまたはサブスクリプションの上限を示すため、即時の自動再試行は無効です。クレジットが利用可能になってから再試行してください。
以下の表は、API から実際に受信した HTTP エラーに適用されます。
| コード | 意味 |
|---|---|
400 | 上流 API がリクエストパラメーターまたは入力形式を拒否しました |
401 | API キーが拒否された、無料プランで有料ツールを呼び出した、または無料プランで英語以外の lang を指定した |
404 | リソースが見つかりません(例:ASN が存在しません) |
405 | 上流 API によるメソッドまたはサブスクリプションの制限 |
413 | POST 本文が上流 API の許容サイズを超えています |
415 | POST リクエストに必須の application/json コンテンツタイプがありません |
423 | プライベート、予約済み、またはボゴン IP。203.0.113.42 や 198.51.100.27 などのドキュメント用アドレスも含みます |
429 | 1 日あたりのクレジット上限(無料プラン)またはサブスクリプション/追加料金の割り当て量を超過しました |
499 | 上流 API がクライアントリクエストまたは接続のタイムアウトを報告しました |
500、502、503、504、505 | 上流 API サーバー側のエラー |
正確なステータスコードは、エンドポイントやリクエストモードによって異なる場合があります。上流エンドポイントがこの表にないステータスを返した場合、サーバーは原因を推測しません。上流のステータスとメッセージをそのまま渡し、category: "undocumented_api_error" を付与します。また、原因を捏造せず、未文書化の上流ステータスとしてレスポンスを説明するよう MCP クライアントにガイダンスを追加します。
一括テキストは、API の項目ごとの形式を維持します。構造化された結果には、入力順の items と errors リストが含まれます。失敗した各項目には、ゼロから始まる input_index、元の input、ソース、カテゴリ、メッセージ、再試行の可否、ガイダンスが含まれます。項目の status は API から提供された場合にのみ含まれます。メッセージのみのエラーに、HTTP ステータスが付与されることはありません。結果の件数が一致しない場合、信頼できない入力識別子を割り当てる代わりに、呼び出し全体のエラーが返されます。すべてのレコードを確認してください。リクエスト全体の成功は、すべての項目が成功したことを示すものではありません。また、成功した項目は再試行しないでください。
仕組み
MCP クライアントは、このサーバーを使って IPGeolocation.io v3 API を呼び出します。
実行時の流れ:
- MCP クライアントがサーバープロセスを起動します。
- クライアントがツール一覧を読み取ります。
- プロンプトがツールに合致すると、クライアントがそのツールを呼び出します。
- サーバーが引数を検証し、キャッシュされた結果を返すか、API を呼び出します。テキストコンテンツに加えて
structuredContentを返します。17 個すべてのツールで出力スキーマが公開されています。
| 結果 | structuredContent |
|---|---|
| 単一の JSON ルックアップ | { "data": ... } |
| パブリックな送信元 IP | { "ip": "..." } |
| 一括ルックアップ | { "items": [...], "errors": [...] } |
| サイズ超過の成功レスポンス | { "page": ... } |
| 呼び出し全体の失敗 | { "error": ... }。isError: true を伴います |
通常のテキストレスポンスでは、API の JSON 形式が維持されます。ただし、get_my_ip はプレーンな IP 文字列を返します。サイズ超過の成功レスポンスでは、テキストコンテンツと構造化コンテンツの両方にページが含まれます。
認証が必要な上流リクエストでは、API キーを x-ipgeolocation-api-key ヘッダーで送信します。キーがリクエスト URL に追加されることはありません。
サーバーの指示とツールの説明では、ツールの選択、コスト、制限、結果の解釈について MCP クライアントに説明します。このガイダンスをアシスタントにどのように提示するかは、クライアントが決定します。返される WHOIS テキスト、ユーザーエージェント、ホスト名、エラーメッセージは信頼できないデータであり、これらの指示に優先してはなりません。IP セレクターが省略された場合、サーバーマシンのパブリックな送信元 IP が参照されます。この IP はエンドユーザーの IP と異なる場合があります。セキュリティツールは IP インテリジェンスを照会します。ブラウザーを使った別のライブ VPN/プロキシ検出 API は呼び出しません。
lookup_company、lookup_currency、lookup_network は、IP ルックアップ全体のレスポンスの一部を対象とするラッパーです。ユーザーが一部のデータだけを必要とする場合に MCP クライアントが見つけられるよう、個別のツールとして用意されています。
キャッシュ
サーバーはレスポンスをプロセスメモリにキャッシュし、同じ API キーで実行中の同一リクエストを共有します。同じキーを使うセッションはキャッシュの名前空間を共有し、異なるキーを使うセッションには個別の名前空間が割り当てられます。
| キャッシュ対象データ | デフォルトの有効期限 | 読み取りで有効期限は延長されますか? |
|---|---|---|
| 通常のツールレスポンス | 保存から 5 分後 | いいえ |
| 完全なページネーションスナップショット | 5 分間操作がない場合 | はい。get_cached_result の読み取りが成功するたびに延長されます |
どちらも IPGEOLOCATION_MCP_CACHE_TTL_MS を使用します(デフォルトは 300000 ミリ秒)。キャッシュの上限はデフォルトで 500 エントリで、通常のレスポンスとページスナップショットで共有されます。これはエントリ数の上限であり、合計バイト数やメモリ使用量の上限ではありません。完全なスナップショットは個々のページより大幅に大きくなる場合があります。
有効期限の経過、削除、またはプロセスの再起動によって、キャッシュデータを利用できなくなることがあります。その場合、get_cached_result は再取得せずにローカルで失敗します。キャッシュミスの後に元のルックアップを繰り返すと、再びクレジットを消費することがあります。
force_refresh: true を指定すると、同一のリクエストが実行中であっても、新しい上流リクエストが開始されます。古いリクエストがそのキャッシュ結果を上書きすることはありません。
キャッシュ対象: lookup_ip、bulk_lookup_ip、check_security、bulk_security_check、lookup_company、lookup_currency、lookup_network、parse_user_agent、bulk_parse_user_agent、lookup_asn、get_abuse_contact、get_astronomy_time_series
常にライブ(キャッシュ対象外): get_my_ip、get_timezone、convert_timezone、get_astronomy
環境変数
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
IPGEOLOCATION_API_KEY | はい(ほとんどのツールで必要) | ipgeolocation.io API キー | |
IPGEOLOCATION_REQUEST_TIMEOUT_MS | いいえ | 15000 | レスポンス本文の読み取りを含む、上流リクエストのタイムアウト(ミリ秒)。範囲:1000~120000 |
IPGEOLOCATION_MCP_CACHE_TTL_MS | いいえ | 300000 | 通常レスポンスの TTL とページスナップショットのアイドル TTL(ミリ秒)。範囲:1000~3600000 |
IPGEOLOCATION_MCP_CACHE_MAX_ENTRIES | いいえ | 500 | キャッシュ可能なレスポンスとページスナップショットの最大数。メモリ使用量のバイト数の上限ではありません。範囲:10~5000 |
IPGEOLOCATION_MCP_MAX_BULK_ITEMS | いいえ | 1000 | 一括入力の上限。IPGEOLOCATION_MCP_MAX_RESULT_ITEMS による上限も適用されます。最大:50000 |
IPGEOLOCATION_MCP_MAX_RESULT_ITEMS | いいえ | 250 | 一括入力/結果項目の上限。ネストされた配列は完全な状態で保持されます。最大:50000 |
IPGEOLOCATION_MCP_MAX_RESPONSE_CHARS | いいえ | 200000 | テキストと構造化コンテンツを含む、シリアライズ済みツール結果全体の UTF-8 バイト数の上限。上限を超える成功結果にはキャッシュ済みページが使用され、上限を超えるエラーではメッセージが短縮されます。範囲:10000~2000000 |
IPGEOLOCATION_MCP_MAX_ERROR_CHARS | いいえ | 4000 | 切り詰めマーカーを付ける前のエラーメッセージ文字数の上限。レスポンス全体のバイト数上限により、さらに短縮される場合があります。範囲:200~50000 |
有効な項目数の上限を超える一括リクエストは、上流リクエストの前に拒否されるため、API クレジットは消費されません。IPGEOLOCATION_MCP_MAX_BULK_ITEMS だけを引き上げても、有効な上限は上がりません。より大きな一括リクエストが必要な場合は、両方の項目数設定を引き上げてください。
レスポンス上限には、テキストと構造化コンテンツの両方、JSON エスケープ、および UTF-8 エンコードが含まれます。必要に応じて、成功結果のすべてのレコードとネストされた配列は、キャッシュ済みページを通じて保持されます。サイズ超過したエラーではメッセージのみが短縮され、カテゴリ、再試行可能かどうか、ガイダンス、およびステータスは保持されます。
キャッシュ済み結果のページネーション
get_cached_result のコストは 0 クレジットで、カーソルが無効、期限切れ、キャッシュから削除済み、またはサーバー再起動後に利用できない場合も含め、API を呼び出すことはありません。必須の cursor を 1 つ受け取り、page.cursor または page.next_cursor で返されます。同じサーバープロセスと API キーを使用してください。
元の検索結果が大きい場合、通常の data または items/errors の代わりに { "page": ... } が返されます。各ページには次の内容が含まれます。
| フィールド | 意味 |
|---|---|
source_tool | 元の検索ツール |
format | structuredContent_json |
json_fragment | 元の構造化 JSON 結果全体の一部 |
offset, total_chars | フラグメントの位置と JSON 全体の長さ(UTF-16 コード単位) |
cursor | 検索を繰り返さずにこのページを再取得するためのカーソル |
next_cursor | 次のページを読み取るためのカーソル。最終ページにはありません |
expires_at | アイドル時の有効期限。読み取りが成功するたびに TTL が延長されます。デフォルトは 5 分です |
各 next_cursor を get_cached_result で読み取り、json_fragment 文字列をオフセット順に連結してから、結合した JSON を一度だけ解析してください。フラグメント単体では有効な JSON とは限りません。これにより、1 つのレコードや文字列が 1 ページを超える場合にも対応できます。一括結果では、入力識別子とステータスを保持したまま、完全な { "items": [...], "errors": [...] } が再構成されます。単一検索では { "data": ... } が再構成されます。
let response = await client.callTool({ name: "bulk_lookup_ip", arguments: { ips } });
if (response.isError) throw new Error(response.content[0].text);
let complete = response.structuredContent;
if (complete.page) {
let json = "";
for (;;) {
const page = response.structuredContent.page;
json += page.json_fragment;
if (!page.next_cursor) break;
response = await client.callTool({
name: "get_cached_result", arguments: { cursor: page.next_cursor }
});
if (response.isError) throw new Error(response.content[0].text);
}
complete = JSON.parse(json);
}
カーソルを使って残りのデータを取得してください。キャッシュのルールでは、スナップショットの有効期限、キャッシュからの削除、API キーによる分離、および新しい検索でクレジットが消費される条件について説明しています。
ソースからのビルド
git clone https://github.com/IPGeolocation/ipgeolocation-io-mcp.git
cd ipgeolocation-io-mcp
npm ci --ignore-scripts
npm run build
直接実行します。
node dist/cli.js
コマンドを実行する前に、シェルの非公開の環境設定を通じて IPGEOLOCATION_API_KEY を設定してください。プロセスは stdin で MCP メッセージを待機し、対話型のプロンプトは表示しません。
MCP Inspector で検査します。
npx @modelcontextprotocol/inspector node dist/cli.js
Docker
docker build -t ipgeolocation-mcp .
docker run --rm -i -e IPGEOLOCATION_API_KEY ipgeolocation-mcp
まず、プライベートなシェル環境で IPGEOLOCATION_API_KEY を設定してください。イメージには Node.js が含まれており、権限のない node ユーザーとして実行されます。Docker の -i フラグを使うと、MCP メッセージのために stdin が開いたままになります。プロトコルで通常の stdin/stdout を使うため、-t は指定しないでください。
このイメージは、musl を使用する公式の Node.js 24.22.1 Alpine 3.24 ベースイメージを使い、コンパイル済みのサーバーを直接実行します。サーバーにはネイティブの Node.js アドオンはありません。npm と Yarn はビルドステージで利用でき、ランタイムイメージには Node.js とインストール済みの本番用依存関係が含まれます。
イメージをビルドした後、ローカルコマンドを使う MCP クライアントを次のように設定します。
{
"mcpServers": {
"ipgeolocation": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "IPGEOLOCATION_API_KEY", "ipgeolocation-mcp"],
"env": {
"IPGEOLOCATION_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
テスト
クライアントの設定例では、設定形式を説明しています。GUI およびオペレーティングシステムへのインストール確認は、プロトコル、パッケージ、Docker のテストとは分けて記録してください。リリースチェックリストを参照してください。
npm test # full suite
npm run test:unit # unit tests only
npm run test:integration # integration tests only
実際の stdio MCP クライアントを使用するライブスモークテストでは、API クレジットを消費します。IPGEOLOCATION_FREE_KEY と npm run test:live:free を使うと、7 つのコアツール、有料機能の制限、所有権およびネットワークのフォールバック、観測された一括処理の利用資格を確認します。一括処理へのアクセスが、文書化されている有料プラン限定のポリシーと異なる場合は、その旨を報告します。IPGEOLOCATION_PAID_KEY と npm run test:live:paid を使うと、16 個すべての API ツール、有料モジュール、構造化された検証エラー、有効な入力とプライベートな入力が混在する一括処理、ローカルのキャッシュ済み結果リーダーを確認します。有料キーのテストでは、無料プランの利用資格制限は検証できません。
ビルド後、いずれかのキーを使って、キャッシュ済みデータのページネーションが完全であることを確認します。
node tests/pagination.stdio.mjs free # uses IPGEOLOCATION_FREE_KEY
node tests/pagination.stdio.mjs paid # uses IPGEOLOCATION_PAID_KEY
各実行では、6 個の IP に対する API リクエストを 1 回行い、報告された 6 クレジットを確認します。取得したレコードを上流の完全なレスポンスのハッシュと照合し、ページの読み取り、再生、有効期限切れ、プロセスの再起動で API 呼び出しが追加されないことを検証します。テスト中は子サーバーのレスポンス予算とキャッシュ TTL を一時的に引き下げます。サーバーの設定は変更されません。
上記でビルドしたイメージで同じ動作を確認するには、次のようにします。
node tests/pagination.stdio.mjs free docker run --rm -i \
-e IPGEOLOCATION_API_KEY -e IPGEOLOCATION_MCP_MAX_RESPONSE_CHARS \
-e IPGEOLOCATION_MCP_CACHE_TTL_MS -e NODE_OPTIONS ipgeolocation-mcp
トラブルシューティング
クライアントが更新前のツールを使用する場合: サーバープロセスを再起動し、クライアントの MCP 接続詳細でバージョンを確認してください。最新の npm バージョンと比較してください。ソースからのインストールと Docker によるインストールは、再起動する前に再ビルドしてください。
API キーが設定されていない場合: クライアントのサーバー設定で IPGEOLOCATION_API_KEY を設定してください。このローカルエラーには HTTP ステータスがなく、上流へのリクエストも行われません。
401 エラー: API がキーまたは要求された機能を拒否しました。キーが有効で、プランがそのツールをサポートしていることを確認してください。lookup_ip でのドメイン検索には有料プランも必要です。
423 エラー: パブリックにルーティング可能な IP を使用してください。10.0.0.1 などのプライベートアドレスや bogon アドレス、および 203.0.113.42 などの予約済みドキュメント用アドレスは、正常なジオロケーションの例として使用できません。
ローカルの 504 タイムアウト: source: "mcp_server" の場合、リクエストまたはレスポンス本文の読み取りが期限を超過しました。接続を確認するか、IPGEOLOCATION_REQUEST_TIMEOUT_MS を増やしてください(デフォルト:15000 ms、最大:120000 ms)。source: "ipgeolocation_api" の場合、504 は API からの HTTP レスポンスです。
リダイレクトがブロックされた場合: サーバーは予期しない HTTP リダイレクトを受信し、認証情報やリクエストデータを転送する前に停止しました。自動的に再試行しないでください。API エンドポイントを調査するか、サニタイズ済みのエラーを添えてサポートにお問い合わせください。
キャッシュ済みの結果を利用できない場合: カーソルが別のキーまたはプロセスに属しているか、スナップショットの期限が切れた、または削除されました。失敗したページ読み取りでは API 呼び出しは行われていません。新しい検索ではクレジットを消費する場合があります。
クライアントが MCP URL を要求する場合: このパッケージはローカルの stdio コマンドを提供します。これを起動できるクライアントまたはホストを使用してください。リモート接続専用のコネクターには、ホスト型 MCP エンドポイントが必要です。
料金
現在のプランの詳細、クレジット、料金については、IPGeolocation の料金ページを参照してください。
リンク
- IPGeolocation のウェブサイト
- IPGeolocation API ドキュメント
- IPGeolocation の料金
- 無料の IPGeolocation API キーを作成
- 変更履歴
- セキュリティポリシー
- コントリビューション
- リリースチェックリスト
ライセンス
プライバシーポリシー
API の検索では、リクエストされた入力データが IPGeolocation.io に送信されます。また、IPGeolocation.io はサーバーマシンのパブリックな送信元 IP アドレスも受け取ります。サーバーは結果をプロセスメモリにキャッシュします。MCP クライアントまたはホスティングプロバイダーは、それぞれ独自の設定とログストレージを管理します。データの保持に関する詳細はセキュリティポリシー、プロバイダーによるデータの取り扱いについてはIPGeolocation のプライバシーポリシーをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。