mcp-servers-nixを導入した

Table of Contents

Introduction

natsukium謹製の natsukium/mcp-servers-nixtakeokunn/nixos-configuration に導入したのでメモしておく。

変更点

Before

  • Orgファイルから org-babel-tangle~/Library/Application\ Support/Claude/claude_desktop_config.json を出力
  • 必要なpackageは node2nix 経由で入れる
  • 秘密鍵はOrgファイルで org-encrypt して管理

After

作業内容

MCPサーバーの設定をセキュアでGit friendlyにする - Zenn を事前に読む。

1. sops-nixに登録

sops/password.yml に以下を登録する。

brave-api-token: BRAVE_API_KEY=xxxx

sops/default.nix で読み込めるようにする。

{
  sops = {
    defaultSopsFile = ./password.yaml;
    secrets = {
      brave-api-token = { };
    };
  };
}

2. mcp-serversを記述する

envFile = config.sops.secrets.brave-api-token.path; のように環境変数を渡す。

{
  pkgs,
  config,
  mcp-servers-nix,
  nodePkgs,
}:
let
  programs = {
    fetch.enable = true;
    playwright.enable = true;
    brave-search = {
      enable = true;
      envFile = config.sops.secrets.brave-api-token.path;
    };
  };
in
[
  {
    home.file."Library/Application\ Support/Claude/claude_desktop_config.json" = {
      source = mcp-servers-nix.lib.mkConfig pkgs {
        inherit programs;
      };
    };
  }
]

3. home-managerに組込み

home-manager/advanced.niximports で登録すればよい。

{
  config,
  system,
  nixpkgs,
  org-babel,
  emacs-overlay,
  mcp-servers-nix,
  ...
}:
let
  # --- 中略 ---
  pkgs = import nixpkgs {
    inherit system;
    config.allowUnfree = true;
    overlays = basicOverlay ++ advancedOverlay;
  };
  nodePkgs = pkgs.callPackage ../node2nix { inherit pkgs; };

  # mcp servers
  mcpServers = import ./mcp-servers {
    inherit pkgs nodePkgs;
    inherit config mcp-servers-nix;
  };
in
{
  imports =  mcpServers;
}

作業結果

正常に動くことを確認できた。

$ cat ~/Library/Application\ Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "brave-search": {
      "args": [],
      "command": "/nix/store/ycnnbcc78f826p1qv1ishw51i7kizvpn-mcp-server-brave-search/bin/mcp-server-brave-search",
      "env": {}
    },
    "fetch": {
      "args": [],
      "command": "/nix/store/bygbip4rxvmpyrcccznv69ssvg65985m-mcp-server-fetch-2025.3.28/bin/mcp-server-fetch",
      "env": {}
    },
    "playwright": {
      "args": [
        "--executable-path",
        "/nix/store/97prd65kac7lms777bigyjq56igmx2jq-google-chrome-135.0.7049.42/bin/google-chrome-stable"
      ],
      "command": "/nix/store/xp3hby1vl5ppf1xpmlnzj9b8lpnf94q1-playwright-mcp-0.0.9/bin/mcp-server-playwright",
      "env": {}
    }
  }
}

終わりに

sopsに雑にパスワードを登録してるのでもう少しオシャレに管理したい。

brave-api-token: BRAVE_API_KEY=xxxx