mcpField
K
kconfig-mcp

kconfig-mcp

ローカル
github.com/0xmortuex開発ツール03 週間前に更新

kconfig-mcp について

kconfig-mcpは、Linux、Zephyr、U-Boot、BuildrootなどのKconfigツリーを扱う開発者向けMCPサーバーです。シンボルが利用できない理由を追跡し、候補となる修正を実際のツリーで検証してから提示します。

主な機能

  1. 01依存関係をファイルと行番号付きで追跡
  2. 02最小の修正案を検索して検証
  3. 03シンボル値、デフォルト、選択関係を確認
  4. 04値を設定し、連動する変更を報告
  5. 05設定を比較し .config を保存

活用シーン

  1. 01設定項目を利用できない理由の特定
  2. 02目的のシンボルを有効にする変更の検証
  3. 03設定変更が他のシンボルに与える影響の確認

MCP 対応

MCPサーバーとして、Kconfigツリーの読み込み、照会、変更、保存に使うツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"0xmortuex-kconfig": {
"command": "uvx",
"args": [
"kconfig-mcp"
]
}
}
}
起動コマンドuvx kconfig-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypikconfig-mcp0.1.0

ツール

10

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
envanyいいえ
namestringはい
shellstringいいえ
config_pathanyいいえ
kconfig_pathstringはい

詳細

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 の引数
Linuxkconfig_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 と同様に POSIX sh で実行します。コンパイラーに依存するシンボルには、実際のツールチェーンが反映されます。
  • "dry" は何も実行しません。Linux の検出用イディオムには固定の結果が使われます。機能検出は「なし」として扱われ、ツールチェーンは GCC 13.2 として報告されます。$(error-if) チェックは警告になります。そのため結果には、CC_HAS_* などのコンパイラー依存シンボルが「なし」として扱われるという注記が付きます。

ツール

ツール説明
kconfig_loadツリー(および任意の .config)を解析し、名前付きセッションに読み込みます。未定義の変数と警告を報告します。
kconfig_why_notsymbol が y/m/n にならない未達条件を、ファイル名と行番号を含めて再帰的に示します。また、検証済みの最小限の修正とその副作用も示します。
kconfig_symbol型、プロンプト、値とその値になっている理由、設定可能な値、依存関係、デフォルト値、双方向の select/imply、ヘルプテキストを示します。
kconfig_what_selectsこのシンボルを select または imply するすべてのシンボルと、現在の値および有効なものを示します。
kconfig_search名前、プロンプト、ヘルプを正規表現で検索し、名前の一致を先に表示します。
kconfig_setmenuconfig と同様に値を設定し、変更されたほかのすべてのシンボルを報告します。設定が拒否された場合はその旨を示します。
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 ライセンスです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。