whois-mcp-server について
whois-mcp-serverは、RDAPとDNS-over-HTTPSを使ってドメインやネットワーク情報を調べるMCPサーバーです。登録情報、DNS、IP、ASNを確認するAgent向けで、APIキー不要のデータソースと2種類の通信方式に対応します。
主な機能
- 01ドメイン登録情報と状態の取得
- 02DNSレコードとTTLの取得
- 03IP、ネットブロック、逆引きDNSの検索
- 04ASNの組織情報の解決
- 05ドメイン情報の一括レポート生成
活用シーン
- 01ドメインの登録事業者、期限、DNSSECの確認
- 02DNS設定やメール関連レコードの調査
- 03IP範囲の管理組織や不正利用窓口の特定
- 04登録情報とDNS情報をまとめた初期調査
MCP 対応
MCPサーバーとして、ドメインとネットワークの検索ツール6種をSTDIOまたはStreamable HTTPでクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/whois-mcp-serverMCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').RDAP_TIMEOUT_MSHTTP timeout for RDAP requests in milliseconds.DOH_TIMEOUT_MSHTTP timeout for DNS-over-HTTPS requests in milliseconds.RDAP_MAX_RETRIESMax retry attempts on transient RDAP failures.DOH_MAX_RETRIESMax retry attempts on transient DNS-over-HTTPS failures.MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_PUBLIC_URLPublic origin override for deployments behind a TLS-terminating reverse proxy (e.g. https://mcp.example.com).MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| domain | string | はい | 検索する完全修飾ドメイン名(例:"example.com"、"github.com")。有効な FQDN である必要があります。ラベルはドットで区切り、各ラベルは最大 63 文字です。 |
詳細
@cyanheads/whois-mcp-server
MCP を介して RDAP と DNS-over-HTTPS を利用し、ドメイン登録情報の検索、レジストリレコードの状態確認、DNS レコードの取得、IP と ASN の解決を行います。STDIO または Streamable HTTP に対応しています。
概要
RDAP と DNS-over-HTTPS によるドメインおよびネットワーク情報の取得。ドメイン登録情報の検索、レジストリレコードの状態確認、DNS レコードの取得、IP と ASN のレジストリへの解決を行います。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
whois_lookup_domain | ドメイン登録情報一式 — レジストラー、作成日/有効期限、ネームサーバー、EPP ステータス、DNSSEC、登録者組織 |
whois_check_availability | レジストリレコードの有無を確認します。レコードが見つからなくても、登録資格があるとは限りません |
whois_get_dns | DNS-over-HTTPS による DNS 所有者レコード(A、AAAA、MX、TXT、NS、CNAME、SOA、CAA、PTR) |
whois_lookup_ip | RIR RDAP による IP または CIDR ネットブロック、組織、国、Abuse 連絡先、逆引き DNS |
whois_lookup_asn | ASN を組織名、国、RIR ソースに解決します |
whois_get_dossier | 1 回の呼び出しでドメインをトリアージ — 登録情報と DNS を並行取得し、事実に基づくシグナルを含む単一のレコードに正規化します |
機能リファレンス
whois_lookup_domain ツール
- 完全修飾ドメイン名を受け取り、IANA ブートストラップを通じてレジストリの RDAP サーバーを選択します。
- レジストラー、日付、ネームサーバー、EPP ステータス、DNSSEC、
registrant_redactedを返します。レジストリから根拠が得られない場合、DNSSEC とプライバシーの値はnullのままです。rdap_no_coverage、domain_not_found、rdap_invalid_domain_response(応答が照会したドメインと一致しない場合)で失敗します。 include_registrar: trueを指定すると、レジストラーの RDAP 紹介先を 1 つたどり、registrar_detail(found、no_referral、failedのいずれかと、ソース URL)を追加します。既定では無効です。RDAP_TIMEOUT_MSによる制限があり、失敗してもレジストリの結果は保持されます。
whois_check_availability tool
- 完全修飾ドメイン名を受け取ります。
registration_status: registered | not_found | unknownを返します。登録が見つかった場合、availableはfalse、それ以外の場合はnullで、trueになることはありません。404 はレコードがないことを意味し、その名前が登録可能であることを意味するわけではありません。- 既知の ICANN サブドメインについては、登録可能な親ドメインとともに
non_registrable_domainを返します。
whois_get_dns tool
- ASCII DNS 名を受け取ります(
_dmarc.example.comのようなアンダースコアを含むラベルも使用できます)。長さは最大 253 文字で、各ラベルは 1~63 文字です。typesは省略可能で、指定できる値は A、AAAA、MX、TXT、NS、CNAME、SOA、CAA、PTR です。デフォルトは A、AAAA、MX、TXT、NS です。 - TTL と
query_sources: [{type, source}]を含むレコードを返します。空の応答と NXDOMAIN も含みます。従来のsourceは、いずれかのクエリが Cloudflare から正常な応答を受け取った場合はcloudflare、それ以外の場合はnextdnsです。 - リゾルバーの失敗コードと応答の切り詰めについては、再試行とフォールバックの後にエラーを返します。CAA クエリは NextDNS に送信されます。
whois_lookup_ip tool
- オプションの CIDR プレフィックス(0~32/0~128)を指定した IPv4/IPv6 アドレスを受け取ります。元の
ipをそのまま返します。 - 組織、国、不正利用の連絡先、プロバイダーの CIDR を
cidrsで返します(該当する CIDR が 1 つだけの場合に限りcidrも返します)。また、ベストエフォートで逆引き DNS を照会し、ptr_status: found | not_found | failedを返します。失敗時にはptr_source_errorが設定されますが、RDAP データは保持されます。 include_routing: trueを指定すると、RIPEstat Network Info(RIPEstat Network Info)で観測されたプレフィックスとorigin_asnsを含むrouting(found | not_found | failed)が追加されます。デフォルトでは無効です。ルーティングの照会に失敗しても、RDAP と PTR の結果は保持されます。invalid_ip、ip_not_found、ip_no_rdap_route(そのアドレスをカバーする RIR がない場合。再試行不可)、またはprivate_rangeで失敗します。private_rangeの対象は、0.0.0.0/8、10.0.0.0/8、100.64.0.0/10、127.0.0.0/8、169.254.0.0/16、172.16.0.0/12、192.168.0.0/16、255.0.0.0/8、::1/128、fc00::/7、fe80::/10です。
whois_lookup_asn tool
- 1~4294967295 の ASN を受け取ります。
ASプレフィックスは省略可能です(例:AS15169、AS 15169、+15169)。範囲外の数値を指定するとinvalid_asnで失敗します。 name、org_name、country、rir、start_autnum、end_autnumを返します。レコードがない場合はasn_not_foundで失敗します。
whois_get_dossier tool
- 完全修飾ドメイン名を受け取り、登録情報と A/MX/NS/TXT の照会を並行して実行します。
- 登録情報、DNS、ドメインの経過年数、プライバシーの状態、推定される NS/MX プロバイダーを返します。照会の一方が失敗しても、もう一方のデータは保持され、
rdap_source_errorまたはdns_source_errorが設定されます。both_legs_failedは、どちらも成功しなかったことを意味します。 - null MX(
0 .)は、そのドメインがメールを受け付けないことを意味します。
特長
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、差し替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースを備えた構造化ロギングに対応しています。
RDAP / DNS 固有の機能:
- HTTPS 経由の RDAP — ポート 43 の TCP に依存しません
- IANA ブートストラップによる自動選択 — TLD、RIR、ASN 範囲に応じた適切なレジストリの RDAP サーバーを選択します。ブートストラップ JSON はメモリ内に 24 時間キャッシュされます
- Cloudflare と NextDNS 経由の DNS-over-HTTPS — タイプごとのルーティング(CAA には NextDNS、それ以外には Cloudflare)と自動フォールバックに対応した 2 プロバイダー構成です
- API キー不要 — すべてのデータソース(IANA、レジストリ RDAP エンドポイント、RIR RDAP、Cloudflare DoH、NextDNS DoH、オプションの RIPEstat Network Info)は公開されており、キーは不要です
エージェントに適した出力:
- カバレッジは 2 つの方法で示されます —
whois_check_availabilityとwhois_get_dossierはデータとしてrdap_coverage: falseを返し、同じケースでwhois_lookup_domainはrdap_no_coverageをスローします - プライバシーのリダクションは、レジストリで確認できる場合は
true、その証拠がない場合はnullです - 部分的な失敗を許容します —
whois_get_dossierは検索に失敗するとsource_errorフィールドを設定して処理を続行します。両方の検索が失敗した場合のみエラーになります - スコアではなく、事実に基づくシグナルです —
age_days、privacy_redacted、ns_provider、mx_providerは合成されたリスクスコアではなく、実データです
はじめに
API キーやアカウントは不要です。MCP クライアントの設定ファイルに以下を追加してください。
{
"mcpServers": {
"whois-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/whois-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"whois-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/whois-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使用する場合:
{
"mcpServers": {
"whois-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/whois-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://127.0.0.1:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
- API キーは不要です — すべてのデータソースは公開されています。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/whois-mcp-server.git
- ディレクトリに移動します:
cd whois-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# All vars are optional — defaults work for most use cases
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
RDAP_TIMEOUT_MS | RDAP リクエストの HTTP タイムアウト(ミリ秒)。 | 5000 |
DOH_TIMEOUT_MS | DNS-over-HTTPS リクエストの HTTP タイムアウト(ミリ秒)。 | 3000 |
RDAP_MAX_RETRIES | 一時的な RDAP エラー発生時の最大再試行回数。 | 2 |
DOH_MAX_RETRIES | 一時的な DoH エラー発生時の最大再試行回数。 | 2 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
OTEL_ENABLED | OpenTelemetry インストルメンテーションを有効にします。 | false |
オプションの上書き設定の全一覧は .env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
bun run rebuild bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t whois-mcp-server .
docker run --rm -p 3010:3010 whois-mcp-server
Dockerfile のデフォルト設定は、HTTP トランスポート、ステートレスセッションモード、および /var/log/whois-mcp-server へのログ出力です。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| パス | 目的 |
|---|---|
src/index.ts | エントリーポイント — アプリを起動します。 |
src/app.ts | createApp() のオプション — ツールを登録し、サービスを初期化して、セッションモードを宣言します。 |
src/config/ | サーバー固有の環境変数の解析と検証(Zod)。 |
src/services/rdap/ | RDAP クライアント — IANA ブートストラップキャッシュ、ドメイン/IP/ASN の検索、再試行。 |
src/services/doh/ | DNS-over-HTTPS クライアント — Cloudflare をプライマリ、NextDNS をフォールバックとして使用します。 |
src/services/routing/ | オプションの RIPEstat RIS ルーティング観測機能と、範囲を限定したエクスチェンジ。 |
src/mcp-server/tools/ | ツール定義(*.tool.ts)。 |
tests/ | src/ に対応する Vitest テスト。 |
docs/ | 設計および API リファレンス文書。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します — ツールロジック内で
try/catchを使用しないでください - リクエストスコープのログには
ctx.logを使用してください - 新しいツールは
src/app.tsのtools配列を通じて登録してください - 外部 API 呼び出しをラップします。生データを検証し、ドメイン型に正規化してから、出力スキーマに従って返してください。不足しているフィールドを捏造しないでください
貢献
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。