返回市场
麦克佩服务器尼克斯

麦克佩服务器尼克斯

作者:natsukium155 星标更新:2025-11-24

项目介绍

mcp-servers-nix

基于Nix的配置框架,适用于Model Control Protocol (MCP)服务器,并提供开箱即用的包。

概述

此仓库提供了MCP服务器包以及用于配置和部署MCP服务器的Nix框架。它采用模块化方法来配置各种MCP服务器,并提供一致的接口。

特性

  • 模块化配置:定义并组合多个MCP服务器配置
  • 可重复构建:利用Nix实现可重复且声明式的服务器设置
  • 预配置模块:提供流行的MCP服务器类型的开箱即用配置
  • 安全聚焦:通过envFilepasswordCommand更好地处理凭证和敏感信息,并锁定服务器版本

快速开始

无需安装的快速使用

您可以直接运行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
  ];
}

模块使用

经典方式,不使用flakes

  1. 创建一个配置文件:
# 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;
    # 根据需要添加更多模块
  };
}
  1. 构建您的配置:
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

npins是一个简单的依赖锁定工具,允许您在不使用flakes的情况下保证可重复构建:

  1. 在项目中初始化npins:
npins init
  1. 将mcp-servers-nix作为依赖项添加:
npins add github natsukium mcp-servers-nix -b main
  1. 使用锁定版本创建您的配置:
# 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;
    # 根据需要添加更多模块
  };
}
  1. 构建您的配置:
nix-build config.nix

使用Flakes

  1. 创建一个配置文件:
# 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;
          };
        };
    };
}
  1. 构建您的配置:
nix build

示例

检查examples目录以获取完整的配置示例:

实际应用示例

查看GitHub搜索结果,了解其他人如何在其项目中使用mcp-servers-nix。

配置选项

每个模块都提供特定的配置选项,但所有模块都有一些通用选项可用:

全局选项

  • format:配置文件格式(jsonyamltoml-inline,默认值:json
  • flavor:配置文件类型(claudevscodecodex,默认值:claude
  • fileName:配置文件名(默认值:claude_desktop_config.json
  • settings:自定义设置,这些设置将与生成的配置合并

常见模块选项

每个启用的模块(使用programs.<module>.enable = true;)提供以下选项:

  • package:为此模块使用的包
  • type:服务器连接类型(ssestdio,默认值:null
  • args:传递给命令的参数数组(默认值:[]
  • env:服务器环境变量(默认值:{}
  • url:对于“sse”连接的服务器URL(默认值:null
  • envFile:加载附加环境变量的.env文件路径(默认值:null
  • passwordCommand:执行以检索秘密的命令。可以指定为输出格式为"KEY=VALUE"的字符串,该字符串将被导出为环境变量,也可以指定为键是环境变量名称、值是输出值的命令列表的属性集。适用于与密码管理器集成(默认值:null

安全说明

出于安全原因,请勿在env属性中硬编码认证凭据。/nix/store中的所有文件都可以被具有存储访问权限的人读取。始终使用envFilepasswordCommand代替。

系统会自动包装包,当设置了envFilepasswordCommand时,这允许安全地检索凭据而不将其暴露在Nix存储中。

可用模块

框架包括以下MCP服务器模块:

添加自定义服务器

您可以通过直接在settings.servers部分配置它们来添加自己的自定义MCP服务器。这对于集成未包含在此仓库中的MCP服务器非常有用。

示例:添加Obsidian集成

这是一个示例,展示如何添加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服务器

您可以通过添加包定义和模块配置来扩展mcp-servers-nix的新MCP服务器。

包结构

  1. 官方包放在pkgs/official/
  2. 参考实现放在pkgs/reference/
  3. 社区实现放在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文件