kconfig-mcp について
kconfig-mcpは、Linux、Zephyr、U-Boot、BuildrootなどのKconfigツリーを扱う開発者向けMCPサーバーです。シンボルが利用できない理由を追跡し、候補となる修正を実際のツリーで検証してから提示します。
主な機能
- 01依存関係をファイルと行番号付きで追跡
- 02最小の修正案を検索して検証
- 03シンボル値、デフォルト、選択関係を確認
- 04値を設定し、連動する変更を報告
- 05設定を比較し .config を保存
活用シーン
- 01設定項目を利用できない理由の特定
- 02目的のシンボルを有効にする変更の検証
- 03設定変更が他のシンボルに与える影響の確認
MCP 対応
MCPサーバーとして、Kconfigツリーの読み込み、照会、変更、保存に使うツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
10掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| env | any | いいえ | |
| name | string | はい | |
| shell | string | いいえ | |
| config_path | any | いいえ | |
| kconfig_path | string | はい |
詳細
kconfig-mcp
「CONFIG_X を有効にできないのはなぜ?」に、ファイル名と行番号、そして検証済みの修正で答えます。
kconfig-mcp は、Linux カーネル、Zephyr、U-Boot、Buildroot などで使われている設定システム、Kconfig について AI エージェントが推論できるようにする MCP サーバーです。
カーネルを設定したことがある人なら、誰もがこんな経験をしたことがあるでしょう。欲しいオプションが menuconfig に見当たらない、あるいは表示されていてもグレーアウトしており、その理由をたどるには別のディレクトリにある depends on を 5 つも先まで追う必要があります。kconfig-mcp がその依存関係をたどります。さらに、そのオプションを有効にできる最小限の変更セットを探し、実際のツリーに適用して動作を検証してから提示します。
実際の出力例
これは、現在の Linux ツリー(シンボル数 18,913)で x86 を対象にした実際の出力です。
> kconfig_why_not X86_X2APIC
X86_X2APIC = n (default), needs y - bool at arch/x86/Kconfig:463
its prompt (arch/x86/Kconfig:463) is visible only if
X86_LOCAL_APIC && X86_64 && (IRQ_REMAP || HYPERVISOR_GUEST), which is n:
needs any one of (2 options, all currently too low):
IRQ_REMAP = n (default), needs y - bool at drivers/iommu/Kconfig:201
its prompt is visible only if X86_64 && X86_IO_APIC && PCI_MSI && ACPI && IOMMU_SUPPORT:
PCI_MSI = n (default), needs y - bool at drivers/pci/Kconfig:44
its prompt is visible only if PCI, which is n:
PCI = n (default) - set PCI=y directly.
HYPERVISOR_GUEST = n (default), needs y - bool at arch/x86/Kconfig:787
its prompt is visible - set HYPERVISOR_GUEST=y directly.
Verified fix (2 change(s)): HYPERVISOR_GUEST=y, X86_X2APIC=y
HYPERVISOR_GUEST: arch/x86/Kconfig:787
X86_X2APIC: arch/x86/Kconfig:463
Unverified alternatives: PCI=y, PCI_MSI=y, IRQ_REMAP=y, X86_X2APIC=y
> kconfig_set HYPERVISOR_GUEST y
CONFIG_HYPERVISOR_GUEST: 'n' -> 'y'.
1 other symbol(s) changed as a consequence: X86_X2APIC n->y
32 ビットビルド(ARCH=i386)で同じ質問をすると、シンボルの変更では到達できないことがわかります。その場合、ツールは修正をでっち上げず、その旨を伝えます。
64BIT = n (default), needs y - bool at arch/x86/Kconfig:3
requires "i386" = "x86", which compares two constants and is always false here.
One side was probably expanded from an environment variable (like $(ARCH)) when
the tree was loaded: no symbol change can fix this - reload with a different env.
No verified fix: every route ends in something no assignment can change.
このように作られている理由
- 修正は推測ではなく、検証済みです。 Kconfig には多くの特殊ケースがあります。tristate の
mにはMODULESが必要で、bool はmをyに昇格させ、choice は他のメンバーの選択を解除し、selectはdepends onを上書きし、default yは気付かれないまま有効になります。そのため、候補となるプランはすべて読み込んだツリーに適用して検証します。目標に実際に到達できるプランだけを修正案として提示し、あわせて副作用(select/imply/デフォルトによって有効または無効になる項目)も示します。 - 現行の Linux を解析できます。 Kconfiglib を基盤にしていますが、Kconfiglib は 2020 年以降リリースされておらず、Linux の新しい
modules、transitional、depends on X if Y構文を解析できません。kconfig-mcp はファイルを読み込む際に該当行を書き換え、行番号をすべて正確に維持します。depends on X if Yは、scripts/kconfig/expr.cのexpr_trans_compareを行単位で移植した処理によって変換するため、S がmの場合に kconfig が!Sをどう扱うかも含め、kconfig とまったく同じ動作になります。 - 環境の問題を明示します。 Linux は
arch/$(SRCARCH)/Kconfigを読み込みます。変数が未設定だと、何も通知されず""になります。kconfig-mcp は未定義変数を追跡し、arch//Kconfig not foundのようなエラーで終わらせず、エラーメッセージにその名前を表示します(undefined variable(s): SRCARCH (the arch/ directory to use, ...))。
インストール
pip install kconfig-mcp
claude mcp add kconfig -- kconfig-mcp
Python 3.10 以降が必要です。カーネルのビルド環境は必要ありません。Kconfig ファイルを含むソースツリーがあれば十分で、スパースチェックアウトでも構いません。
git clone --depth 1 --filter=blob:none --sparse https://github.com/torvalds/linux.git
cd linux && git sparse-checkout set --no-cone '/Kconfig' '**/Kconfig*' '/arch/*/configs/*'
ツリーの読み込み
| ツリー | kconfig_load の引数 |
|---|---|
| Linux | kconfig_path="linux/Kconfig"、env={"SRCARCH": "x86", "ARCH": "x86"}(または arm64/arm64、riscv/riscv など)。既存の設定を読み込む場合は config_path=".config" を追加します。 |
| Linux、コンパイラーなし/Windows | 同じ引数に shell="dry" を追加します |
| その他のツリー | トップレベルの Kconfig と、展開される変数を指定します。読み込みエラーには、見つからない変数がすべて示されます。 |
shell は、Linux がコンパイラーを検出するために使う、ツリー内の $(shell,...) 呼び出しを制御します。
"run"(デフォルト)は、make menuconfigと同様に POSIXshで実行します。コンパイラーに依存するシンボルには、実際のツールチェーンが反映されます。"dry"は何も実行しません。Linux の検出用イディオムには固定の結果が使われます。機能検出は「なし」として扱われ、ツールチェーンは GCC 13.2 として報告されます。$(error-if)チェックは警告になります。そのため結果には、CC_HAS_*などのコンパイラー依存シンボルが「なし」として扱われるという注記が付きます。
ツール
| ツール | 説明 |
|---|---|
kconfig_load | ツリー(および任意の .config)を解析し、名前付きセッションに読み込みます。未定義の変数と警告を報告します。 |
kconfig_why_not | symbol が y/m/n にならない未達条件を、ファイル名と行番号を含めて再帰的に示します。また、検証済みの最小限の修正とその副作用も示します。 |
kconfig_symbol | 型、プロンプト、値とその値になっている理由、設定可能な値、依存関係、デフォルト値、双方向の select/imply、ヘルプテキストを示します。 |
kconfig_what_selects | このシンボルを select または imply するすべてのシンボルと、現在の値および有効なものを示します。 |
kconfig_search | 名前、プロンプト、ヘルプを正規表現で検索し、名前の一致を先に表示します。 |
kconfig_set | menuconfig と同様に値を設定し、変更されたほかのすべてのシンボルを報告します。設定が拒否された場合はその旨を示します。 |
kconfig_diff | 別の .config、または fragment=True を指定して defconfig やフラグメントと比較します。 |
kconfig_save | .config、または minimal=True を指定して最小限の defconfig を書き込みます。 |
kconfig_sessions/kconfig_unload | 読み込み済みのツリーを管理します。 |
シンボル名は CONFIG_ の有無を問いません。誤記された名前には「次の名前のことですか:...」と表示されます。
制限事項
transitionalシンボルは常にnです。 実際の kconfig は、名前変更時に値を移行するため、古い.configから読み取ります。Kconfiglib にはこれに相当する機能がありません。- 修正の検索には上限があります。 シンボル自身のプロンプトから到達できない場合に限り、select とデフォルト値を調べます。また、検索には展開予算があります。検証済みの修正が見つからない場合は、予算を使い切ったのか、すべての経路が実際にブロックされているのかを結果に示します。
why_notが対応するのは bool と tristate のシンボルです。 int/hex/string のシンボルにはkconfig_symbolとkconfig_setを使用してください。- ドライモードではコンパイラのプローブに一般的な回答を返します(上記参照)。そのため、実際のツールチェーンで
shell="run"を指定した場合に限り、CC_HAS_*形式のシンボルを信頼してください。 - Kconfiglib 14.1.0 に依存しており、
compat.pyがその内部メソッドを2つフックするため、バージョンを固定しています。CI では毎週最新の Linux ツリーを解析するため、新しいキーワードが追加されると、誤った回答が黙って返されるのではなく、ビルド失敗として検出されます。
テスト
pip install ".[test]" "ruff==0.16.0" "mypy==2.3.0"
ruff check src tests && mypy --strict src
pytest tests # unit + stdio tests, fixture trees
LINUX_SRC=/path/to/linux pytest tests/test_linux_integration.py
tests/fixtures/tree のフィクスチャツリーでは、この解説ツールが扱うすべての構文(depends on、select、imply、choice、visible if、menuconfig/if ブロック、デフォルト値、tristate と modules、$(SRCARCH) で選択される arch ディレクトリ)を検証します。Linux のテストでは、x2APIC の依存関係、i386 で行き止まりになること、x86_64 の defconfig ですでに有効になっていることなど、実際の事実を検証します。CI では、現在のツリーのスパースチェックアウトに対してテストを実行します。
ライセンス
MIT です。Kconfiglib は ISC ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。