AdGuard Home MCP Server について
AdGuard Home MCP Serverは、AIクライアントからDNS、フィルタリング、クライアント、DHCPなどのAdGuard Home設定を確認・管理できます。監視用の読み取り専用モードを含め、ツールへのアクセスを設定できます。
主な機能
- 0116カテゴリにわたる65個のツール
- 02読み取り専用アクセスレベル
- 03カテゴリ・ツールのフィルタリング
- 04stdioとHTTPのトランスポート
- 052アーキテクチャ向けDockerイメージ
活用シーン
- 01DNSクエリログと統計の確認
- 02フィルタリストとルールの管理
- 03クライアントやDHCP設定の変更
- 04読み取り専用アクセスでの監視
MCP 対応
AdGuard Home APIの操作をMCPツールとして公開します。クライアントはstdioまたはStreamable HTTPで接続でき、アクセスレベルやフィルターに応じてツールが登録されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @samik081/mcp-adguard-homeADGUARD_URLURL of the AdGuard Home instance (e.g. http://192.168.1.1:3000)ADGUARD_USERNAMEシークレットAdGuard Home username (omit if authentication is disabled)ADGUARD_PASSWORDシークレットAdGuard Home password (omit if authentication is disabled)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP AdGuard Home
AdGuard Home 用の MCP サーバーです。Cursor、Claude Code、Claude Desktop で自然言語を使って、DNS フィルタリング、クライアント、DHCP、書き換えなどを管理できます。
特長
- 16 カテゴリーにわたる 65 個のツールで、AdGuard Home API 全体を網羅
ADGUARD_ACCESS_TIER=read-onlyによる読み取り専用モードで安全に監視ADGUARD_CATEGORIESによるカテゴリーの絞り込みで、必要なツールだけを公開- HTTP 依存関係ゼロ。ネイティブの
fetchを使用(Node.js 22 以降) - GHCR で
linux/amd64およびlinux/arm64向けの Docker イメージ - Streamable HTTP プロトコルを使用した HTTP トランスポート(
MCP_TRANSPORT=http)によるリモート MCP - 完全な型安全性を備えた TypeScript/ESM
API の互換性
AdGuard Home v0.107.76 でテスト済みです。
クイックスタート
npx でサーバーを直接実行します。
ADGUARD_URL="http://your-adguard-ip:3000" \
ADGUARD_USERNAME="your-username" \
ADGUARD_PASSWORD="your-password" \
npx -y @samik081/mcp-adguard-home
起動時にサーバーが AdGuard Home への接続を検証します。認証情報が不足しているか無効な場合は、明確なエラーを表示して直ちに終了します。
Docker
Docker で実行します(stdio トランスポート。npx と同じです)。
docker run --rm -i \
-e ADGUARD_URL=http://your-adguard-ip:3000 \
-e ADGUARD_USERNAME=your-username \
-e ADGUARD_PASSWORD=your-password \
ghcr.io/samik081/mcp-adguard-home
HTTP トランスポートを使ってリモート MCP サーバーとして実行するには、次のようにします。
docker run -d -p 3000:3000 \
-e MCP_TRANSPORT=http \
-e ADGUARD_URL=http://your-adguard-ip:3000 \
-e ADGUARD_USERNAME=your-username \
-e ADGUARD_PASSWORD=your-password \
ghcr.io/samik081/mcp-adguard-home
MCP エンドポイントは http://localhost:3000、ヘルスチェックは http://localhost:3000/health で利用できます。
設定
Claude Code CLI(推奨):
# Using npx
claude mcp add --transport stdio adguard-home \
--env ADGUARD_URL=http://your-adguard-ip:3000 \
--env ADGUARD_USERNAME=your-username \
--env ADGUARD_PASSWORD=your-password \
-- npx -y @samik081/mcp-adguard-home
# Using Docker
claude mcp add --transport stdio adguard-home \
--env ADGUARD_URL=http://your-adguard-ip:3000 \
--env ADGUARD_USERNAME=your-username \
--env ADGUARD_PASSWORD=your-password \
-- docker run --rm -i ghcr.io/samik081/mcp-adguard-home
# Using remote HTTP (connect to a running Docker container or HTTP server)
claude mcp add --transport http adguard-home http://localhost:3000
JSON 設定(Claude Code の .mcp.json、Claude Desktop の claude_desktop_config.json、Cursor の .cursor/mcp.json で使用できます):
{
"mcpServers": {
"adguard-home": {
"command": "npx",
"args": ["-y", "@samik081/mcp-adguard-home"],
"env": {
"ADGUARD_URL": "http://your-adguard-ip:3000",
"ADGUARD_USERNAME": "your-username",
"ADGUARD_PASSWORD": "your-password"
}
}
}
}
Docker(stdio):
{
"mcpServers": {
"adguard-home": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "ADGUARD_URL=http://your-adguard-ip:3000",
"-e", "ADGUARD_USERNAME=your-username",
"-e", "ADGUARD_PASSWORD=your-password",
"ghcr.io/samik081/mcp-adguard-home"
]
}
}
}
リモート MCP(実行中の Docker コンテナまたは HTTP サーバーに接続):
{
"mcpServers": {
"adguard-home": {
"type": "streamable-http",
"url": "http://localhost:3000"
}
}
}
アクセスティア
ADGUARD_ACCESS_TIER 環境変数を使って、利用可能なツールを制御します。
| ティア | ツール | 説明 |
|---|---|---|
full(デフォルト) | 65 | 読み取りと書き込み — すべてを制御 |
read-only | 29 | 読み取り専用 — 状態を変更せず安全に監視 |
- full:65 個すべてのツールを利用できます。設定変更、フィルターの追加・削除、ログの消去、すべての破壊的操作が含まれます。
- read-only:29 個のツールを利用できます。ステータス、設定の表示、クエリログの読み取りのみ可能です。状態は変更されません。
利用中のティアで使えないツールは、MCP サーバーに登録されません。AI ツールのツール一覧にも表示されないため、コンテキストをすっきり保てます。
環境変数
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
ADGUARD_URL | はい | -- | AdGuard Home のベース URL(例:http://192.168.1.1:3000) |
ADGUARD_USERNAME | いいえ | -- | 管理者ユーザー名。AdGuard Home で認証が無効になっている場合は、ADGUARD_PASSWORD とともに省略します |
ADGUARD_PASSWORD | いいえ | -- | 管理者パスワード。ADGUARD_USERNAME を設定する場合は、必ず設定する必要があります |
ADGUARD_ACCESS_TIER | いいえ | full | 読み取り専用ツールのみを使用する場合は read-only、すべてのツールを使用する場合は full |
ADGUARD_CATEGORIES | いいえ | (すべて) | カンマ区切りのカテゴリ許可リスト(例:dns,filtering,stats) |
ADGUARD_TOOL_BLACKLIST | いいえ | (なし) | 除外するツール名のカンマ区切りリスト(例:dns_clear_cache,stats_reset) |
ADGUARD_TOOL_WHITELIST | いいえ | (なし) | アクセス階層とカテゴリのフィルターを無視して、必ず含めるツール名のカンマ区切りリスト |
DEBUG | いいえ | false | stderr へのデバッグログ出力を有効にします |
MCP_TRANSPORT | いいえ | stdio | トランスポートモード:stdio(デフォルト)または http |
MCP_PORT | いいえ | 3000 | HTTP サーバーのポート(MCP_TRANSPORT=http の場合のみ使用) |
MCP_HOST | いいえ | 0.0.0.0 | HTTP サーバーのバインドアドレス(MCP_TRANSPORT=http の場合のみ使用) |
MCP_SESSION_IDLE_TIMEOUT | いいえ | 1800 | HTTP セッションを閉じてメモリを解放するまでの非アクティブ時間(秒単位。SSE ストリームに接続しているセッションは閉じられません)。0 にすると無効になります。MCP_TRANSPORT=http の場合のみ使用 |
MCP_EXCLUDE_TOOL_TITLES | いいえ | false | true に設定すると、登録時にツール名を省略します(トークンを節約できます) |
利用可能なカテゴリ
global、dns、querylog、stats、filtering、safebrowsing、parental、safesearch、clients、dhcp、rewrites、tls、blocked_services、access、install、mobile_config
ツール
mcp-adguard-home は、カテゴリ別に整理された 65 個のツールを提供します。各ツールのアクセス列には必要な最小アクセス階層が示されます。read-only は両方の階層で利用可能、full は full 階層が必要です。ヒント列にはツールの動作が示されます。read-only は状態を変更せず、destructive は既存の状態を変更し、idempotent は 2 回呼び出しても同じ結果になります。
グローバル(6 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
global_get_status | バージョン、DNS アドレス、保護状態、ポートを含むサーバーのステータスを取得します | read-only | read-only, idempotent |
global_get_profile | ユーザープロファイル(名前、言語、テーマ)を取得します | read-only | read-only, idempotent |
global_check_version | AdGuard Home の更新を確認し、現在のバージョンと比較します | read-only | read-only, idempotent |
global_set_protection | DNS 保護を全体で有効または無効にします。一時的に無効にする場合は、期間を指定できます | full | destructive, idempotent |
global_update_profile | ユーザープロファイルの設定(名前、言語、テーマ)を更新します | full | destructive, idempotent |
global_begin_update | AdGuard Home ソフトウェアの更新を開始します | full | destructive |
DNS(4 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
dns_get_info | アップストリーム、キャッシュ設定、ブロッキングモード、DNSSEC を含む DNS 設定全体を取得します | read-only | read-only, idempotent |
dns_test_upstream | アップストリーム DNS サーバー設定をテストし、サーバーに到達できることを確認します | read-only | read-only, idempotent |
dns_set_config | DNS サーバー設定を更新します(部分更新用の 23 個の任意フィールド。レート制限のサブネット長と許可リストを含む) | full | destructive, idempotent |
dns_clear_cache | DNS リゾルバーのキャッシュを消去します | full | destructive, idempotent |
クエリログ(4 ツール)
| ツール | 説明 | アクセス | ヒント | |------|-------------|--------|-------| | `querylog_get` | 理由や応答ステータスによる任意の絞り込み、検索語、`older_than` によるカーソルページネーションを使って DNS クエリログを検索します(結果が空の場合はページネーションのヒントを返します) | 読み取り専用 | 読み取り専用、冪等 | | `querylog_get_config` | クエリログの設定を取得します | 読み取り専用 | 読み取り専用、冪等 | | `querylog_set_config` | クエリログの設定(有効状態、間隔、匿名化)を更新します | フル | 破壊的、冪等 | | `querylog_clear` | DNS クエリログ全体を消去します | フル | 破壊的、冪等 |統計(4 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
stats_get | 上位ドメイン、ブロック数、クライアントのアクティビティなど、DNS の統計情報を取得します | 読み取り専用 | 読み取り専用、冪等 |
stats_get_config | 統計情報の設定を取得します | 読み取り専用 | 読み取り専用、冪等 |
stats_reset | すべての DNS 統計情報をリセットします | フル | 破壊的、冪等 |
stats_set_config | 統計情報の設定(有効状態、間隔、無視するドメイン)を更新します | フル | 破壊的、冪等 |
フィルタリング(8 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
filtering_get_status | ブロックリスト、許可リスト、ユーザールールなど、フィルタリング設定を取得します | 読み取り専用 | 読み取り専用、冪等 |
filtering_check_host | 現在のフィルタリングルールでホスト名がブロックされるかどうかをテストします | 読み取り専用 | 読み取り専用、冪等 |
filtering_set_config | 全体的なフィルタリング設定(有効状態と更新間隔)を更新します | フル | 破壊的、冪等 |
filtering_add_url | 新しいフィルター URL(ブロックリストまたは許可リスト)を追加します | フル | — |
filtering_remove_url | ブロックリストまたは許可リストからフィルター URL を削除します | フル | 破壊的 |
filtering_set_url | 既存のフィルター URL(名前の変更、URL の変更、有効化/無効化)を更新します | フル | 破壊的、冪等 |
filtering_refresh | 最新の更新を取得するため、フィルターリストを強制的に更新します | フル | 破壊的、冪等 |
filtering_set_rules | カスタムフィルタリングルールを設定します(既存のカスタムルールをすべて置き換えます) | フル | 破壊的、冪等 |
セーフブラウジング(2 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
safebrowsing_get_status | セーフブラウジング(マルウェア/フィッシング対策)のステータスを取得します | 読み取り専用 | 読み取り専用、冪等 |
safebrowsing_set | セーフブラウジング保護を有効または無効にします | フル | 破壊的、冪等 |
ペアレンタル(2 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
parental_get_status | ペアレンタルフィルタリングのステータスを取得します | 読み取り専用 | 読み取り専用、冪等 |
parental_set | ペアレンタルフィルタリング(コンテンツ制限)を有効または無効にします | フル | 破壊的、冪等 |
セーフサーチ(2 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
safesearch_get_status | エンジンごとの適用状況を示すセーフサーチ設定を取得します | 読み取り専用 | 読み取り専用、冪等 |
safesearch_set_settings | エンジンごとの設定(Bing、DuckDuckGo、Google、Pixabay、Yandex、YouTube)を指定して、セーフサーチ設定を更新します | フル | 破壊的、冪等 |
クライアント(5 ツール)
| ツール | 説明 | アクセス | ヒント | |------|-------------|--------|-------| | `clients_get` | 設定済みおよび自動検出されたすべてのクライアントと、その設定を取得します | 読み取り専用 | 読み取り専用、冪等 | | `clients_search` | ID(IP、MAC、CIDR、またはクライアント ID)で特定のクライアントを検索します | 読み取り専用 | 読み取り専用、冪等 | | `clients_add` | クライアントごとの設定を指定して、新しい永続クライアントを追加します | フル | — | | `clients_update` | 名前で既存の永続クライアントを更新します | フル | 破壊的、冪等 | | `clients_delete` | 名前で永続クライアントを削除します | フル | 破壊的 |DHCP(9 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
dhcp_get_status | DHCP サーバーの設定、静的リース、アクティブなリースを取得します | 読み取り専用 | 読み取り専用、冪等 |
dhcp_get_interfaces | DHCP サーバーのバインドに使用できるネットワークインターフェースを取得します | 読み取り専用 | 読み取り専用、冪等 |
dhcp_find_active | ネットワークインターフェース上で競合する DHCP サーバーをスキャンします | 読み取り専用 | 読み取り専用、冪等 |
dhcp_set_config | DHCP サーバーの設定(有効状態、インターフェース、IPv4/IPv6 設定)を更新します | フル | 破壊的、冪等 |
dhcp_add_static_lease | MAC アドレスを IP に割り当てる静的 DHCP リースを追加します | フル | — |
dhcp_remove_static_lease | 静的 DHCP リースを削除します | フル | 破壊的 |
dhcp_update_static_lease | 静的 DHCP リースを更新します(削除して追加する方式) | フル | 破壊的、冪等 |
dhcp_reset | DHCP 設定をデフォルトにリセットします | フル | 破壊的、冪等 |
dhcp_reset_leases | すべての DHCP リースをクリアします | フル | 破壊的、冪等 |
書き換え(6 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
rewrites_list | 設定済みのすべての DNS 書き換えルールを取得します | 読み取り専用 | 読み取り専用、冪等 |
rewrites_get_settings | DNS 書き換えモジュールの有効/無効状態を取得します | 読み取り専用 | 読み取り専用、冪等 |
rewrites_add | 新しい DNS 書き換えルールを追加します | フル | — |
rewrites_update | DNS 書き換えルールを更新します(削除して追加する方式) | フル | 破壊的、冪等 |
rewrites_delete | DNS 書き換えルールを削除します | フル | 破壊的 |
rewrites_set_settings | DNS 書き換えモジュールを有効または無効にします | フル | 破壊的、冪等 |
TLS(3 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
tls_get_status | TLS 設定と証明書の検証状態を取得します | 読み取り専用 | 読み取り専用、冪等 |
tls_validate | 変更を適用せずに TLS 設定を検証します | 読み取り専用 | 読み取り専用、冪等 |
tls_set_config | 証明書や HTTPS/DoH/DoT 設定など、TLS 設定を更新します | フル | 破壊的、冪等 |
ブロック対象サービス(3 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
blocked_services_get_all | ブロック可能なすべてのサービスをグループ別に整理して一覧表示します | 読み取り専用 | 読み取り専用、冪等 |
blocked_services_get | 現在ブロックされているサービスの一覧とスケジュールを取得します | 読み取り専用 | 読み取り専用、冪等 |
blocked_services_update | ブロックするサービスの一覧と、任意のスケジュールを更新します | フル | 破壊的、冪等 |
アクセス(2 ツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
access_get_list | アクセス制御リスト(許可されたクライアント、拒否されたクライアント、ブロックされたホスト)を取得します | 読み取り専用 | 読み取り専用、冪等 |
access_set_list | アクセス制御リスト(許可されたクライアント、拒否されたクライアント、ブロックされたホスト)を設定します | フル | 破壊的、冪等 |
インストール(3 ツール)
| ツール | 説明 | アクセス | ヒント | |------|-------------|--------|-------| | `install_get_addresses` | 初期設定のためにネットワークインターフェイスの詳細とポートを取得します | 読み取り専用 | 読み取り専用、べき等 | | `install_check_config` | 適用せずにインストール設定を検証します(Web/DNS のバインド、認証情報を確認します) | フル | 読み取り専用、べき等 | | `install_apply_config` | 初期設定(Web/DNS のバインドと管理者の認証情報)を適用します | フル | 破壊的 |モバイル設定(2 個のツール)
| ツール | 説明 | アクセス | ヒント |
|---|---|---|---|
mobile_config_get_doh | DNS-over-HTTPS 用の Apple .mobileconfig プロファイルを生成します | 読み取り専用 | 読み取り専用、べき等 |
mobile_config_get_dot | DNS-over-TLS 用の Apple .mobileconfig プロファイルを生成します | 読み取り専用 | 読み取り専用、べき等 |
動作を確認する
MCP クライアントの設定後、AI アシスタントに次のように尋ねます。
「AdGuard Home サーバーの状態を教えてください」
接続が機能している場合、アシスタントは global_get_status を呼び出し、サーバーのバージョン、DNS アドレス、保護状態、ポート設定を返します。
使用例
- 「現在の DNS 保護状態を教えてください」 --
global_get_statusを呼び出して、バージョン、アドレス、保護状態を表示します。 - 「すべての DNS 書き換えルールを表示してください」 --
rewrites_listを呼び出して、設定済みの DNS 書き換えをすべて表示します。 - 「local.example.com を 192.168.1.100 に向ける DNS 書き換えを追加してください」 --
rewrites_addを呼び出して、新しい書き換えルールを作成します。
トラブルシューティング
接続エラー
- MCP サーバーを実行しているマシンから
ADGUARD_URLにアクセスできることを確認してください - 標準以外のポートを使用する場合は、URL にポートが含まれていることを確認してください(例:
http://192.168.1.1:3000) - AdGuard Home が実行中で、アクセス可能であることを確認してください
認証エラー
ADGUARD_USERNAMEとADGUARD_PASSWORDが正しいことを確認してください- AdGuard Home で認証が無効になっている場合(ユーザーが設定されていない場合)は、両方の変数を未設定のままにしてください
- AdGuard Home でユーザーに管理者権限があることを確認してください
ツールが表示されない
ADGUARD_ACCESS_TIERの設定を確認してください。read-onlyモードでは読み取りツールのみが公開されますADGUARD_CATEGORIESを確認してください。登録されるのは、リストに記載されたカテゴリのツールのみです- stderr の出力を確認し、サーバーがエラーなく起動したことを確認してください
開発
# Install dependencies
npm install
# Build the project
npm run build
# Run in development mode (auto-reload)
npm run dev
# Open the MCP Inspector for interactive testing
npm run inspect
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。