基于Nix的配置框架,适用于Model Control Protocol (MCP)服务器,并提供开箱即用的包。
此仓库提供了MCP服务器包以及用于配置和部署MCP服务器的Nix框架。它采用模块化方法来配置各种MCP服务器,并提供一致的接口。
envFile和passwordCommand更好地处理凭证和敏感信息,并锁定服务器版本您可以直接运行MCP服务器包而无需安装它们:
# 使用nix-shell
nix-shell -p "(import (builtins.fetchTarball \"https://github.com/natsukium/mcp-servers-nix/archive/main.tar.gz\") {}).mcp-server-fetch" --run mcp-server-fetch
# 使用flakes
nix run github:natsukium/mcp-servers-nix#mcp-server-fetch
有几种方式可以安装并使用此仓库提供的包:
您可以直接安装单个MCP服务器包:
# 不使用flakes
nix-env -f https://github.com/natsukium/mcp-servers-nix/archive/main.tar.gz -iA mcp-server-fetch
# 使用flakes
nix profile install github:natsukium/mcp-s-ervers-nix#mcp-server-fetch
您可以使用提供的覆盖层将所有MCP服务器包添加到您的pkgs中:
# 在您的configuration.nix或home.nix中
{
nixpkgs.overlays = [
# 经典方式
(import (builtins.fetchTarball "https://github.com/natsukium/mcp-servers-nix/archive/main.tar.gz")).overlays.default
# 或使用flakes
# mcp-servers-nix.overlays.default
];
# 然后您可以通过`pkgs`安装包
environment.systemPackages = with pkgs; [
mcp-server-fetch
];
}
# config.nix
let
pkgs = import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-unstable.tar.gz") { };
mcp-servers = import (builtins.fetchTarball "https://github.com/natsukium/mcp-servers-nix/archive/refs/heads/main.tar.gz") { inherit pkgs; };
in
mcp-servers.lib.mkConfig pkgs {
programs = {
filesystem = {
enable = true;
args = [ "/path/to/allowed/directory" ];
};
fetch.enable = true;
# 根据需要添加更多模块
};
}
nix-build config.nix
// 结果
{
"mcpServers": {
"fetch": {
"args": [],
"command": "/nix/store/dbx03yjf6h14h5rvdppzj2fyhfjpx99g-mcp-server-fetch-2025.3.28/bin/mcp-server-fetch",
"env": {}
},
"filesystem": {
"args": [ "/path/to/allowed/directory" ],
"command": "/nix/store/i0v4ynavmz3iilr27c7iqg4dc3xxnygb-mcp-server-filesystem-2025.3.28/bin/mcp-server-filesystem",
"env": {}
}
}
}
npins是一个简单的依赖锁定工具,允许您在不使用flakes的情况下保证可重复构建:
npins init
npins add github natsukium mcp-servers-nix -b main
# config.nix
let
sources = import ./npins;
pkgs = import sources.nixpkgs {};
mcp-servers = import sources.mcp-servers-nix {};
in
mcp-servers.lib.mkConfig pkgs {
programs = {
filesystem = {
enable = true;
args = [ "/path/to/allowed/directory" ];
};
fetch.enable = true;
# 根据需要添加更多模块
};
}
nix-build config.nix
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
mcp-servers-nix.url = "github:natsukium/mcp-servers-nix";
};
outputs =
{
self,
nixpkgs,
mcp-servers-nix,
}:
{
packages.x86_64-linux.default =
let
pkgs = import nixpkgs { system = "x86_64-linux"; };
in
mcp-servers-nix.lib.mkConfig pkgs {
programs = {
filesystem = {
enable = true;
args = [ "/path/to/allowed/directory" ];
};
fetch.enable = true;
};
};
};
}
nix build
检查examples目录以获取完整的配置示例:
claude-desktop.nix:Claude Desktop的基本配置vscode.nix:VS Code集成设置librechat.nix:LibreChat集成配置codex.nix:Codex CLI与MCP服务器集成vscode-workspace:VS Code工作区配置示例查看GitHub搜索结果,了解其他人如何在其项目中使用mcp-servers-nix。
每个模块都提供特定的配置选项,但所有模块都有一些通用选项可用:
format:配置文件格式(json、yaml或toml-inline,默认值:json)flavor:配置文件类型(claude、vscode或codex,默认值:claude)fileName:配置文件名(默认值:claude_desktop_config.json)settings:自定义设置,这些设置将与生成的配置合并每个启用的模块(使用programs.<module>.enable = true;)提供以下选项:
package:为此模块使用的包type:服务器连接类型(sse或stdio,默认值:null)args:传递给命令的参数数组(默认值:[])env:服务器环境变量(默认值:{})url:对于“sse”连接的服务器URL(默认值:null)envFile:加载附加环境变量的.env文件路径(默认值:null)passwordCommand:执行以检索秘密的命令。可以指定为输出格式为"KEY=VALUE"的字符串,该字符串将被导出为环境变量,也可以指定为键是环境变量名称、值是输出值的命令列表的属性集。适用于与密码管理器集成(默认值:null)出于安全原因,请勿在env属性中硬编码认证凭据。/nix/store中的所有文件都可以被具有存储访问权限的人读取。始终使用envFile或passwordCommand代替。
系统会自动包装包,当设置了envFile或passwordCommand时,这允许安全地检索凭据而不将其暴露在Nix存储中。
框架包括以下MCP服务器模块:
您可以通过直接在settings.servers部分配置它们来添加自己的自定义MCP服务器。这对于集成未包含在此仓库中的MCP服务器非常有用。
这是一个示例,展示如何添加mcp-obsidian服务器以集成Obsidian:
mcp-servers.lib.mkConfig pkgs {
format = "yaml";
fileName = "config.yaml";
# 配置内置模块
programs = {
filesystem = {
enable = true;
args = [ "/path/to/allowed/directory" ];
};
};
# 添加自定义MCP服务器
settings.servers = {
mcp-obsidian = {
command = "${pkgs.lib.getExe' pkgs.nodejs "npx"}";
args = [
"-y"
"mcp-obsidian"
"/path/to/obsidian/vault"
];
};
};
}
这种方法允许您将任何兼容MCP的服务器集成到您的配置中,而无需创建专用模块。
参考modules/目录中的各个模块源文件以获取模块特定的配置选项。
您可以通过添加包定义和模块配置来扩展mcp-servers-nix的新MCP服务器。
pkgs/official/pkgs/reference/pkgs/community/在pkgs/official/new-mcp-server/default.nix中创建一个新的包定义:
{
lib,
fetchFromGitHub,
buildNpmPackage,
}:
buildNpmPackage rec {
pname = "new-mcp-server";
version = "0.1.0";
src = fetchFromGitHub {
owner = "new-mcp-server";
repo = "new-mcp-server";
tag = "v${version}";
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
};
npmDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
meta = {
description = "新MCP服务器";
homepage = "https://github.com/new-mcp-server/new-mcp-server";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ username ];
mainProgram = "new-mcp-server";
};
}
然后在pkgs/default.nix中注册它:
{
# ... 已存在的包 ...
# 新服务器
new-mcp-server = pkgs.callPackage ./official/new-mcp-server { };
}
在modules/new-mcp-server.nix中创建一个新的模块:
{ mkServerModule, ... }:
{
imports = [
(mkServerModule {
name = "new-mcp-server";
packageName = "new-mcp-server";
})
];
}
mkServerModule函数提供了创建模块配置的框架,具有一致的选项。有关可用功能的详细信息,请参阅其实现。
除了mkServerModule提供的常见选项外,您还可以为您的模块定义自定义选项。这允许您公开服务器特定的配置,用户可以设置这些配置。
{ config, pkgs, lib, mkServerModule, ... }:
let
cfg = config.programs.new-mcp-server;
in
{
imports = [
(mkServerModule {
name = "new-mcp-server";
packageName = "new-mcp-server";
})
];
# 为此模块定义自定义选项
options.programs.new-mcp-server = {
customOption = lib.mkOption {
type = lib.types.str;
default = "default-value";
description = ''
自定义选项的描述
'';
};
binaryPath = lib.mkOption {
type = lib.types.path;
default = lib.getExe pkgs.some-package;
description = ''
服务器所需的二进制文件路径
'';
};
};
# 使用自定义选项修改服务器配置
config.settings.servers = lib.mkIf cfg.enable {
new-mcp-server = {
args = [
"--option"
cfg.customOption
"--binary-path"
cfg.binaryPath
];
};
};
}
对于更复杂的服务器,您可以参考pkgs/和modules/目录中的现有实现作为参考。
此仓库包括自动化测试,以验证框架的功能。您可以使用以下命令运行测试:
# 不使用flakes
nix-build tests
# 使用flakes
nix flake check
本项目根据Apache许可证2.0发布 - 详情请参阅LICENSE文件。