mcpField
M
MCP-NixOS - Because Your AI Assistant Shouldn't Hallucinate About Packages

MCP-NixOS - Because Your AI Assistant Shouldn't Hallucinate About Packages

ローカル
mcp-nixos.ioAI・エージェント8673 日前に更新

MCP-NixOS - Because Your AI Assistant Shouldn't Hallucinate About Packages について

MCP-NixOS は、NixOS のパッケージ、設定オプション、関連ドキュメントについて正確な情報を AI アシスタントに提供する MCP サーバーです。パッケージ名の誤生成を減らすことを目的としています。ローカルに Nix をインストールせず、オンライン API を照会するため、Windows、macOS、Linux で動作します。

主な機能

  1. 01NixOS パッケージと設定オプションの検索
  2. 02Home Manager や nix-darwin などのモジュールオプションの照会
  3. 03コミットハッシュ付きのパッケージ過去バージョンの取得
  4. 04パッケージのバイナリキャッシュ状況の確認
  5. 05STDIO と HTTP の両方のトランスポートに対応

活用シーン

  1. 01インストール前にパッケージ名の存在を AI アシスタントに確認させる
  2. 02NixOS オプションの設定記述を調べる
  3. 03再現可能なビルドのために過去のバージョンを調べる

MCP 対応

本プロジェクトは MCP サーバーであり、nix と nix_versions の 2 つのツールを通じて NixOS 関連データを MCP クライアントに提供します。

設定

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

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

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

パッケージ
pypimcp-nixos

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP-NixOS - AI にパッケージ名をでっち上げさせないために

MCP トップリスト

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

クイックスタート

🚨 Nix/NixOS は不要です! Windows、macOS、Linux など、どのシステムでも動作します。API に問い合わせるだけです。

オプション 1:uvx(推奨)

MCP サーバーをインストール

{
  "mcpServers": {
    "nixos": {
      "command": "uvx",
      "args": ["mcp-nixos"]
    }
  }
}
オプション 2:Nix

MCP サーバーをインストール

{
  "mcpServers": {
    "nixos": {
      "command": "nix",
      "args": ["run", "github:utensils/mcp-nixos", "--"]
    }
  }
}
オプション 3:Docker

MCP サーバーをインストール

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

これで AI は、情報をでっち上げる代わりに、実際の NixOS データを利用できます。どういたしまして。

オプション 4:HTTP(リモート MCP)

FastMCP は、このサーバーを URL 経由で HTTP 実行することをサポートしています(MCP エンドポイントのデフォルトは /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(デフォルト):

MCP_NIXOS_TRANSPORT=stdio mcp-nixos

カスタムパス:

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

ステートレス HTTP(クライアントごとのセッション状態を無効化):

MCP_NIXOS_TRANSPORT=http MCP_NIXOS_STATELESS_HTTP=1 mcp-nixos
オプション 5:Pi コーディングエージェント

Pi は MCP にネイティブ対応していません。サポートされている方法は 2 つあります。

A. pi-mcp-adapter(推奨 — MCP に対応し、単一の信頼できる情報源を使用):

pi install npm:pi-mcp-adapter

次に、~/.pi/agent/mcp.json に追加します。

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

B. プロジェクトローカルの拡張機能(クローンして実行): このリポジトリには .pi/extensions/mcp-nixos.ts が含まれており、クローンしたリポジトリ内で pi を実行すると自動的に読み込まれます。任意で、エディターの型解決のために cd .pi && npm install を実行してください。どちらの場合も Pi が実行します。

これは何ですか?

以下について、正確なリアルタイム情報を提供する MCP サーバーです。

  • NixOS パッケージ - 実際に存在する 130K 以上のパッケージ
  • NixOS オプション - システムを設定する 23K 以上の方法
  • Home Manager - dotfile 愛好家向けの 5K 以上のオプション
  • nix-darwin - Apple が文書化していない 1K 以上の macOS 設定
  • Nixvim - NuschtOS search 経由で Neovim を設定する 5K 以上のオプション
  • NVF - 公開されている unstable ドキュメントから取得した 2.4K 以上の Neovim オプション
  • FlakeHub - FlakeHub.com レジストリにある 600 以上の flake
  • Noogle - noogle.dev 経由で、型シグネチャ付きの 2K 以上の Nix 関数
  • NixOS Wiki - wiki.nixos.org のコミュニティドキュメントとガイド
  • nix.dev - nix.dev の公式 Nix チュートリアルとガイド
  • パッケージのバージョン - NixHub.io 経由で、コミットハッシュ付きの過去のバージョン
  • バイナリキャッシュの状態 - パッケージが cache.nixos.org にキャッシュされているかどうかを、ダウンロードサイズとともに確認
  • ローカルの flake 入力 - Nix ストアからピン留めされた flake の依存関係を直接確認(Nix が必要です)

ツール

ツールは 2 つだけです。AI のコンテキストウィンドウは無限ではないため、17 個のツールを 2 個に統合しました。

合計約 1,030 トークンです。 それだけです。他の MCP サーバーがブラックフライデーのようにコンテキストを占領している間、私たちは片隅でミニマリストなお茶を楽しんでいます。余計なものを増やさずに、AI に NixOS のスーパーパワーを与えます。

nix - 統合クエリツール

すべてを統べる 1 つのツールです。

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

version と system は action="cache" の場合にのみ使用されます。

アクション機能
searchパッケージ、オプション、プログラム、flake を検索します
infoパッケージまたはオプションの詳細情報を取得します
stats件数とカテゴリを取得します
browseプレフィックスで Home Manager、Darwin、Nixvim、NVF、Noogle を閲覧します(旧エイリアス:options)
channels利用可能な NixOS チャネルを一覧表示します
flake-inputsNix ストアからローカルの flake 入力を確認します
cacheパッケージのバイナリキャッシュ状態を確認します
store明示的に指定した /nix/store パスのファイルを読み込むか、ディレクトリを一覧表示します(Nix が必要です)
ソース検索対象
nixosパッケージ、オプション、プログラム
home-managerHome Manager のオプション
darwinnix-darwin のオプション
flakesコミュニティの flake(search.nixos.org)
flakehubFlakeHub レジストリ(flakehub.com)
nixvimNixvim の Neovim 設定オプション
nvfNVF の Neovim 設定オプション(最新の unstable ドキュメント)
noogleNix 関数のシグネチャとドキュメント(noogle.dev)
wikiNixOS Wiki の記事(wiki.nixos.org)
nix-devNix の公式ドキュメント(nix.dev)
nixhubパッケージのメタデータとストアパス(nixhub.io)

NVF の結果では、正規の vim.* オプションパスが使用されます。クエリでは、省略形の programs.nvf.vim.* または NixOS/Home Manager モジュールパスの programs.nvf.settings.vim.* も使用できます。どちらも自動的に正規化されます。

例:

# 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 - パッケージのバージョン履歴

nixpkgs のコミットハッシュ付きで、過去のバージョンを検索できます。出力には以下が含まれます。

  • 利用可能な場合、パッケージのメタデータ(ライセンス、ホームページ、プログラム)
  • バージョンごとのプラットフォーム対応状況(Linux/macOS)
  • 再現可能なビルドのための nixpkgs コミットハッシュ
  • Nix 式の属性パス
nix_versions(package, version, limit)

例:

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

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

インストール

Nix をインストールする必要はありません。 Python が動作する環境ならどこでも実行できます。

# Run directly (no install)
uvx mcp-nixos

# Or install
pip install mcp-nixos

Nix ユーザー向け:

nix run github:utensils/mcp-nixos
nix profile install github:utensils/mcp-nixos
宣言型インストール(NixOS / Home Manager / nix-darwin)

mcp-nixos は 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 ];

または、提供されているオーバーレイを使ってフレークを直接利用できます。

# 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 が追加するのは pkgs.mcp-nixos のみです。このパッケージには独自の FastMCP 4 / MCP SDK 2 スタック(nix/fastmcp4.nix を参照)が含まれており、FastMCP が必要とする 1.0.1 以上のセキュリティ基準を満たす starlette も含まれています。そのため、Python パッケージセット内の ほかのパッケージには変更がありません。FastMCP 3 を提供している nixpkgs チャネルでも同様です。 pkgs.python3Packages.fastmcp 自体もセット全体でアップグレードしたい場合は、追加で mcp-nixos.overlays.fastmcp4 を適用してください。

開発

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

謝辞

  • NixHub.io - パッケージのバージョン履歴
  • search.nixos.org - NixOS 公式検索
  • FlakeHub - Determinate Systems によるフレークレジストリ
  • Jetify - Devbox と NixHub の開発元
  • Noogle - Nix 関数検索エンジン
  • NuschtOS - Nixvim サポートを支える静的オプション検索インフラストラクチャ
  • Nixvim - Nix 用 Neovim 設定フレームワーク
  • NVF - Neovim 設定フレームワークと公開オプションカタログ

ライセンス

MIT - 共有は思いやりです。


James Brink が作成。Nix を楽しむ̶マ̶ゾ̶ヒ̶ス̶ト̶愛好家がメンテナンスしています。

コメント

MCP は初めてですか?

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

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