MCP-NixOS

Um servidor para pesquisar recursos do NixOS, Home Manager e nix-dar

Documentação

MCP-NixOS — Porque Sua IA Não Deveria Alucinar Nomes de Pacotes

MCP Toplist

CI codecov PyPI FlakeHub Python 3.11+ CodeRabbit Pull Request Reviews Built with Claude

Início Rápido

🚨 Nix/NixOS Não é Necessário! Funciona em qualquer sistema — Windows, macOS, Linux. Você está apenas consultando APIs.

Opção 1: uvx (Recomendado)

Install MCP Server

{
  "mcpServers": {
    "nixos": {
      "command": "uvx",
      "args": ["mcp-nixos"]
    }
  }
}

Opção 2: Nix

Install MCP Server

{
  "mcpServers": {
    "nixos": {
      "command": "nix",
      "args": ["run", "github:utensils/mcp-nixos", "--"]
    }
  }
}

Opção 3: Docker

Install MCP Server

{
  "mcpServers": {
    "nixos": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "ghcr.io/utensils/mcp-nixos"]
    }
  }
}

Sua IA agora tem acesso a dados reais do NixOS em vez de inventar coisas. De nada.

Opção 4: HTTP (MCP Remoto)

FastMCP suporta executar este servidor via HTTP em uma URL (o endpoint MCP padrão é /mcp).

# Run an HTTP MCP server at http://127.0.0.1:8000/mcp
MCP_NIXOS_TRANSPORT=http MCP_NIXOS_HOST=127.0.0.1 MCP_NIXOS_PORT=8000 mcp-nixos

STDIO (padrão):

MCP_NIXOS_TRANSPORT=stdio mcp-nixos

Caminho personalizado:

MCP_NIXOS_TRANSPORT=http MCP_NIXOS_PATH=/api/mcp mcp-nixos

HTTP sem estado (desativa o estado de sessão por cliente):

MCP_NIXOS_TRANSPORT=http MCP_NIXOS_STATELESS_HTTP=1 mcp-nixos

Opção 5: Agente de Codificação Pi

Pi não fala MCP nativamente. Dois caminhos suportados:

A. pi-mcp-adapter (recomendado — fala MCP, fonte única de verdade):

pi install npm:pi-mcp-adapter

Depois adicione a ~/.pi/agent/mcp.json:

{
  "mcpServers": {
    "nixos": {
      "command": "uvx",
      "args": ["mcp-nixos"],
      "lifecycle": "lazy"
    }
  }
}

B. Extensão local do projeto (clone + execute): este repositório inclui .pi/extensions/mcp-nixos.ts, carregado automaticamente quando você executa pi no repositório clonado. Opcional: cd .pi && npm install para resolução do tipo de editor. O Pi executa de qualquer forma.

O Que É Isso?

Um servidor MCP que fornece informações precisas e em tempo real sobre:

  • Pacotes NixOS — 130 mil+ pacotes que realmente existem
  • Opções NixOS — 23 mil+ formas de configurar seu sistema
  • Home Manager — 5 mil+ opções para entusiastas de dotfiles
  • nix-darwin — 1 mil+ configurações do macOS que a Apple não documenta
  • Nixvim — 5 mil+ opções para configuração do Neovim via busca NuschtOS
  • NVF — 2,4 mil+ opções do Neovim a partir da sua documentação instável publicada
  • FlakeHub — 600+ flakes do registro FlakeHub.com
  • Noogle — 2 mil+ funções Nix com assinaturas de tipo via noogle.dev
  • Wiki NixOS — Documentação e guias da comunidade em wiki.nixos.org
  • nix.dev — Tutoriais e guias oficiais do Nix em nix.dev
  • Versões de pacotes — Versões históricas com hashes de commit via NixHub.io
  • Status do cache binário — Verifique se os pacotes estão em cache em cache.nixos.org com tamanhos de download
  • Entradas locais de flakes — Explore suas dependências fixadas de flakes diretamente do store do Nix (requer Nix)

As Ferramentas

Apenas duas. Consolidamos 17 ferramentas em 2 porque a janela de contexto da sua IA não é infinita.

~1.030 tokens no total. É isso. Enquanto outros servidores MCP estão monopolizando seu contexto como se fosse Black Friday, nós estamos tomando chá minimalista no canto. Sua IA ganha superpoderes NixOS sem o inchaço.

nix — Ferramenta de Consulta Unificada

Uma ferramenta para governar todas:

nix(action, query, source, type, channel, limit, version, system)

version e system são usados apenas por action="cache".

AçãoO que faz
searchBusca pacotes, opções, programas ou flakes
infoObtém informações detalhadas sobre um pacote ou opção
statsObtém contagens e categorias
browseNavega por Home Manager, Darwin, Nixvim, NVF ou Noogle por prefixo (alias legado: options)
channelsLista canais NixOS disponíveis
flake-inputsExplora entradas locais de flakes do store do Nix
cacheVerifica o status do cache binário para pacotes
storeLê arquivos ou lista diretórios em um caminho /nix/store explícito (requer Nix)
FonteO que consulta
nixosPacotes, opções, programas
home-managerOpções do Home Manager
darwinOpções do nix-darwin
flakesFlakes da comunidade (search.nixos.org)
flakehubRegistro FlakeHub (flakehub.com)
nixvimOpções de configuração do Neovim via Nixvim
nvfOpções de configuração do Neovim via NVF (docs instáveis mais recentes)
noogleAssinaturas e documentação de funções Nix (noogle.dev)
wikiArtigos da Wiki NixOS (wiki.nixos.org)
nix-devDocumentação oficial do Nix (nix.dev)
nixhubMetadados de pacotes e caminhos de store (nixhub.io)

Os resultados do NVF usam caminhos de opção canônicos vim.*. As consultas também podem usar a forma abreviada programs.nvf.vim.* ou o caminho de módulo NixOS/Home Manager programs.nvf.settings.vim.*; ambos são normalizados automaticamente.

Exemplos:

# Search NixOS packages
nix(action="search", query="firefox", source="nixos", type="packages")

# Get package info
nix(action="info", query="firefox", source="nixos", type="package")

# Search Home Manager options
nix(action="search", query="git", source="home-manager")

# Browse darwin options
nix(action="browse", source="darwin", query="system.defaults")

# Search Nixvim options
nix(action="search", query="telescope", source="nixvim")

# Get Nixvim option info
nix(action="info", query="plugins.telescope.enable", source="nixvim")

# Search NVF options
nix(action="search", query="vim.languages.nix", source="nvf")

# Get NVF option info using a module wrapper path
nix(action="info", query="programs.nvf.settings.vim.languages.nix.enable", source="nvf")

# Browse NVF options below a prefix
nix(action="browse", query="programs.nvf.vim.languages.nix", source="nvf")

# Search FlakeHub
nix(action="search", query="nixpkgs", source="flakehub")

# Get FlakeHub flake info
nix(action="info", query="NixOS/nixpkgs", source="flakehub")

# Search Noogle for Nix functions
nix(action="search", query="mapAttrs", source="noogle")

# Get Noogle function info
nix(action="info", query="lib.attrsets.mapAttrs", source="noogle")

# Browse Noogle function categories
nix(action="browse", source="noogle", query="lib.strings")

# Search NixOS Wiki
nix(action="search", query="nvidia", source="wiki")

# Get Wiki page info
nix(action="info", query="Flakes", source="wiki")

# Search nix.dev documentation
nix(action="search", query="packaging tutorial", source="nix-dev")

# Search NixHub for package metadata
nix(action="search", query="nodejs", source="nixhub")

# Get detailed package info from NixHub (license, homepage, store paths)
nix(action="info", query="python", source="nixhub")

# Check binary cache status
nix(action="cache", query="hello")

# Check cache for specific version
nix(action="cache", query="python", version="3.12.0")

# Check cache for specific system
nix(action="cache", query="firefox", system="x86_64-linux")

# Get stats
nix(action="stats", source="nixos", channel="stable")

# List local flake inputs (requires Nix)
nix(action="flake-inputs", type="list")

# Browse files in a flake input
nix(action="flake-inputs", type="ls", query="nixpkgs:pkgs/by-name")

# Read a file from a flake input
nix(action="flake-inputs", type="read", query="nixpkgs:flake.nix")

# List or read a store path directly (requires Nix)
nix(action="store", type="ls", query="/nix/store/<hash>-<name>")
nix(action="store", type="read", query="/nix/store/<hash>-<name>/flake.nix")

nix_versions — Histórico de Versões de Pacotes

Encontre versões históricas com hashes de commit do nixpkgs. A saída inclui:

  • Metadados do pacote (licença, homepage, programas) quando disponíveis
  • Disponibilidade de plataforma por versão (Linux/macOS)
  • Hash de commit do nixpkgs para builds reproduzíveis
  • Caminho de atributo para expressões Nix
nix_versions(package, version, limit)

Exemplos:

# List recent versions with metadata
nix_versions(package="python", limit=5)

# Find specific version
nix_versions(package="nodejs", version="20.0.0")

Instalação

Você NÃO precisa ter o Nix instalado. Isso roda em qualquer lugar onde o Python roda.

# Run directly (no install)
uvx mcp-nixos

# Or install
pip install mcp-nixos

Para usuários de Nix:

nix run github:utensils/mcp-nixos
nix profile install github:utensils/mcp-nixos

Instalação Declarativa (NixOS / Home Manager / nix-darwin)

mcp-nixos está disponível em nixpkgs:

# NixOS (configuration.nix)
environment.systemPackages = [ pkgs.mcp-nixos ];

# Home Manager (home.nix)
home.packages = [ pkgs.mcp-nixos ];

# nix-darwin (darwin-configuration.nix)
environment.systemPackages = [ pkgs.mcp-nixos ];

Ou use o flake diretamente com o overlay fornecido:

# flake.nix
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    mcp-nixos.url = "github:utensils/mcp-nixos";
  };

  outputs = { self, nixpkgs, mcp-nixos, ... }: {
    # Example: NixOS configuration
    nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [{
        nixpkgs.overlays = [ mcp-nixos.overlays.default ];
        environment.systemPackages = [ pkgs.mcp-nixos ];
      }];
    };

    # Example: Home Manager standalone
    homeConfigurations.myuser = home-manager.lib.homeManagerConfiguration {
      pkgs = import nixpkgs {
        system = "x86_64-linux";
        overlays = [ mcp-nixos.overlays.default ];
      };
      modules = [{
        home.packages = [ pkgs.mcp-nixos ];
      }];
    };
  };
}

overlays.default apenas adiciona pkgs.mcp-nixos. O pacote carrega sua própria pilha FastMCP 4 / MCP SDK 2 (veja nix/fastmcp4.nix), incluindo um starlette em ou acima do piso de segurança 1.0.1 que o FastMCP exige, então nada mais no seu conjunto de pacotes Python muda, mesmo em canais nixpkgs que ainda enviam FastMCP 3. Se você também quiser pkgs.python3Packages.fastmcp atualizado em todo o conjunto, aplique mcp-nixos.overlays.fastmcp4 adicionalmente.

Desenvolvimento

nix develop          # Enter dev shell
nix build            # Build package
pytest tests/        # Run tests
ruff check .         # Lint
ruff format .        # Format
mypy mcp_nixos/      # Type check

Agradecimentos

  • NixHub.io — Histórico de versões de pacotes
  • search.nixos.org — Busca oficial do NixOS
  • FlakeHub — Registro de flakes da Determinate Systems
  • Jetify — Criadores do Devbox e NixHub
  • Noogle — Mecanismo de busca de funções Nix
  • NuschtOS — Infraestrutura de busca estática de opções que alimenta o suporte ao Nixvim
  • Nixvim — Framework de configuração do Neovim para Nix
  • NVF — Framework de configuração do Neovim e catálogo de opções publicado

Licença

MIT — Porque compartilhar é se importar.


Criado por James Brink. Mantido por entusiastas mass̶o̶c̶h̶i̶s̶t̶a̶s̶ que gostam de Nix.