kconfig-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Answer configuration questions about Kconfig trees (Linux kernel, Zephyr, U-Boot, Buildroot, ...). Start with kconfig_load (Linux needs env={"SRCARCH": "x86", "ARCH": "x86"}; pass shell="dry" if the compiler isn't installed or on Windows). Then: kconfig_why_not explains every unmet dependency behind a symbol and proposes a VERIFIED minimal set of changes; kconfig_symbol shows one symbol; kconfig_set applies a change and reports what else changed; kconfig_save writes the .config. Symbol names work with or without the CONFIG_ prefix.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kconfig_loadA | Parse a Kconfig tree (and optionally a .config) into a session named kconfig_path is the top-level Kconfig file; its directory becomes srctree.
env supplies the variables the tree expands - Linux needs SRCARCH and ARCH
(e.g. {"SRCARCH": "x86", "ARCH": "x86_64"}); Zephyr needs ZEPHYR_BASE and
friends. Missing ones are named in the error.
shell: "run" executes the tree's $(shell,...) compiler probes with a POSIX sh,
as |
| kconfig_unloadC | Forget a loaded session. |
| kconfig_sessionsB | List loaded sessions. |
| kconfig_symbolB | Everything about one symbol: type, prompt, current value and why, help text, where it's defined, its dependencies, and what selects/implies it. |
| kconfig_why_notA | Explain why a symbol isn't (or can't be) at Walks every unmet |
| kconfig_what_selectsB | Who forces this symbol on (select), who suggests it (imply), and what it selects/implies itself - with current values and locations. |
| kconfig_searchB | Find symbols whose name, prompt or help text matches |
| kconfig_setA | Assign a value (y/m/n for bool/tristate; a number or string otherwise) as if in menuconfig, then report everything else that changed as a result. If the value doesn't stick (hidden prompt, unmet dependency, choice rules) it says so - use kconfig_why_not to see why. |
| kconfig_diffA | Compare the session's current values with another config file. A full .config lists every symbol that has a value, so a bool/tristate missing from it is n - that's the default. For a defconfig or a config fragment (only the interesting lines), pass fragment=True to compare just the symbols the file mentions. |
| kconfig_saveC | Write the current configuration. minimal=True writes a defconfig-style file with only the values that differ from defaults. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Each tool has a distinct role: load/unload/list sessions, search symbols, inspect one symbol, set a value, diagnose why a value cannot be set, inspect select/imply relationships, save, and diff. kconfig_set and kconfig_why_not are complementary rather than overlapping: set attempts an assignment and why_not explains failures and verified fixes.
All tools use a consistent kconfig_ prefix and snake_case, making the namespace predictable. Most names are action-oriented, though kconfig_sessions and kconfig_symbol are noun-based rather than verb-based, a minor deviation from the otherwise consistent convention.
Ten tools is well-scoped for a Kconfig exploration and configuration server. Each tool covers a meaningful part of the workflow without obvious redundancy or excessive granularity.
The surface covers the core lifecycle: loading a tree/session, searching and inspecting symbols, setting values, diagnosing failures, examining select/imply relationships, saving, and diffing configs. A minor gap is the lack of an explicit menu-structure or full-symbol-listing tool, though search and symbol inspection can work around this.