A complete MCP server for Nix*
Features
- Search Nixpkgs and read package derivations
- Broad options coverage
- NixOS
- Home Manager
- Nix Darwin
- Nixvim
- Impermanence
- MicroVM.nix
- nix-nomad
- simple-nixos-mailserver
- sops-nix
- nixos-hardware
- disko
- Search the nix standard library and read function definitions
- Find versions of nixpkgs in which a package exists
Installation
Use the following configuration to add the MCP server to your client:
Using uvx:
{
"mcpServers": {
"nix": {
"command": "uvx",
"args": ["mcp-nix"]
}
}
}
Using nix run:
{
"mcpServers": {
"nix": {
"command": "nix",
"args": ["run", "github:felixdorn/mcp-nix"]
}
}
}
Declaratively:
Add the flake input:
{
inputs.mcp-nix.url = "github:felixdorn/mcp-nix";
}
Then reference the package:
{
command = "${inputs.mcp-nix.packages.${system}.default}/bin/mcp-nix";
}
Tools
| Tool | Description |
|---|---|
search_nixpkgs | Search Nixpkgs packages |
read_derivation | Read package source code |
search_options | Search options for many projects |
list_versions | List available versions for a project |
show_option_details | Get option details or list children |
read_option_declaration | Read option source code |
find_nixpkgs_commit_with_package_version | Get nixpkgs commit for a version, shows available versions if not found (NixHub) |
search_nix_stdlib | Search Nix stdlib functions (Noogle) |
help_for_stdlib_function | Get help for a stdlib function (Noogle) |
Excluding Tools
Use --exclude to disable specific tools:
{
"mcpServers": {
"nix": {
"command": "uvx",
"args": ["mcp-nix", "--exclude=read_derivation,read_option_declaration"]
}
}
}
Contributing
Read CONTRIBUTING.md
Acknowledgments
Thanks to the NixOS Search Team, ExtraNix, NüschtOS, nix-nomad, NixHub, Noogle for maintaining the backends and pipeline this server uses and for the Nix community for making any of this possible.
License
GPLv3: License
<!-- mcp-name: io.github.felixdorn/mcp-nix -->