Nix工具集服务器

提供80+工具用于Nix生态操作和Clan基础设施管理的模型上下文协议(MCP)服务器,支持包管理、构建操作、代码质量检查等核心功能。

  • by brittonr
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 brittonr/nix-mcp

使用说明

Onix mcp

模型上下文协议(MCP)服务器为Nix生态系统运营和Clan基础设施管理提供了80多种工具。

特性

  • Nix包管理:搜索、检查、定位文件、预取URL
  • 构建操作:构建包、运行shell、执行二进制文件、分析日志
  • 代码质量:Rust、Python、Nix、Shell、TOML的Linter和格式化程序
  • 相关性分析:跟踪依赖关系、比较推导、测量闭包大小
  • 薄片管理:检查元数据,创建和迁移薄片
  • 部落基础设施:对等NixOS部署生命周期(机器、备份、机密、虚拟机)
  • 任务队列:通过Pueue进行异步作业管理
  • 过程控制:使用pexpect进行交互式会话管理

快速开始

构建

nix build

跑

nix run

发展

nix develop
nix develop -c cargo build
nix develop -c cargo nextest run

入门:您的第一个工作流程

让我们在5分钟内让您使用onix mcp高效工作!本指南显示了演示服务器功能的常见工作流。

第一步:搜索包裹(30秒)

询问您的MCP客户(例如Claude):

“在nixpkgs中搜索ripgrep”

服务器将使用 search_packages 工具和显示:

Found packages matching 'ripgrep':

Package: nixpkgs.ripgrep
Version: 14.1.0
Description: A search tool that combines the usability of ag with the raw speed of grep

步骤2:获取包裹详细信息(30秒)

问:

“解释ripgrep包”

服务器将使用 explain_package 工具和显示:

Package: ripgrep
Version: 14.1.0
License: MIT
Homepage: https://github.com/BurntSushi/ripgrep
Platforms: x86_64-linux, aarch64-linux, aarch64-darwin, x86_64-darwin
Description: A search tool that combines the usability of ag with the raw speed of grep

步骤3:不安装运行(1分钟)

问:

“使用逗号运行ripgrep--version”

服务器将使用 comma 工具:

ripgrep 14.1.0

刚才发生了什么?Nix临时下载了ripgrep,运行了它,并进行了清理——不需要永久安装!

常见工作流

以下是使用onix mcp最有用的工作流程:

目标 使用的工具 示例查询
查找包裹 search_packages → explain_package “查找并解释htop包”
安装前请尝试 comma 或 nix_run “用逗号运行cowsay”
调试构建失败 nix_build (干运行)→ get_build_log 显示构建firefox所需的内容,然后显示构建日志
了解依赖关系 why_depends → get_closure_size “为什么firefox依赖于libx11?总闭包大小是多少?”
设置开发环境 run_in_shell “在numpy和pandas可用的情况下运行我的Python脚本”
查找文件的包 nix_locate → get_package_info “哪个包提供bin/gcc?”
格式化Nix代码 format_nix → lint_nix “格式化并删除此Nix代码:{}”
创建薄片 generate_flake “为Rust项目生成flake.nix”

工具比较:何时使用什么?

对使用哪种工具感到困惑?这些比较矩阵可帮助您为任务选择合适的工具。

运行包:使用哪个工具?

针对不同需求的不同工具-根据您所知和所需进行选择:

场景 工具 何时使用 速度 示例
运行包的主二进制文件 nix_run 知道确切的包名称(例如。, nixpkgs#hello) 快速 nix_run nixpkgs#cowsay Hello
运行任何命令 comma 不知道是哪个包裹;需要自动发现 中等 comma cowsay Hello (自动查找包)
带有依赖关系的命令 run_in_shell 环境中需要多个包 中等 run_in_shell ["python3", "numpy"] "python script.py"
快速一次性测试 comma 最快的即席探索 中等 立即尝试不熟悉的命令
可重复自动化 run_in_shell CI/CD、脚本-显式依赖关系 中等 记录的环境要求
查找命令位置 find_command + nix_run 找到哪个包,然后运行它 慢 两步:找到然后执行

决策流:知道确切的包装吗? → nix_run需要自动发现吗? → comma多个包裹? → run_in_shell.

构建与分析:了解你的包

根据您是想构建还是只是理解来选择:

目标 工具 功能 速度 最适合
预览构建计划 nix_build (dry_run) 显示将要构建/下载的内容 快速 构建前检查影响
实际构建 nix_build 构建包,返回存储路径 缓慢 测试构建,获取二进制文件
跟踪依赖关系 why_depends 显示完整的依赖链A→B→C 快速 理解为什么包X需要Y
测量总尺寸 get_closure_size 大小与所有依赖关系 快速 规划磁盘空间,优化映像
比较软件包 diff_derivations 两个版本之间的差异 快速 了解版本更改
调试构建失败 get_build_log 完成构建输出和错误 快速 排除编译问题
检查推导 show_derivation 原始派生属性和路径 快速 深入调试,理解构建

决策流:构建失败? → get_build_log想要尺寸吗? → get_closure_size.为什么依赖X? → why_depends.建造前→ nix_build --dry-run.

代码质量:格式化和换行

用于不同质量检查的不同工具:

任务 工具 它检查什么 自动修复 何时使用
格式化Nix代码 format_nix 代码样式一致性 ✅ 是 提交Nix代码之前
格式化整个项目 nix_fmt 项目中的所有Nix文件 ✅ 是 批量格式化
Lint Nix代码 lint_nix 反模式,死代码 ❌ 否 代码审查、质量检查
验证语法 validate_nix 解析错误,基本语法 ❌ 否 快速语法验证
运行所有检查 pre_commit_run 格式+线头+自定义挂钩 ✅ 部分 在git提交之前
检查挂钩状态 check_pre_commit_status 钩子配置运行状况 N/A 设置验证

决策流:快速语法检查? → validate_nix.发现问题? → lint_nix。是否修复格式? → format_nix 或 nix_fmt一下子? → pre_commit_run.

包裹发现:找到你需要的东西

寻找包裹的不同策略:

目标 工具 工作原理 最适合
按名称/描述搜索 search_packages 在nixpkgs中进行全文搜索 大致了解您想要什么
查找文件提供程序 nix_locate 哪个套餐提供 /bin/gcc? 有文件路径,需要包
获取包裹详细信息 get_package_info 版本、许可证、平台等。 深入了解特定套餐
解释包装 explain_package 人性化包装概述 快速概述
查找命令 find_command 哪个包裹有 gcc 命令? 只知道命令名

决策流:知道名字吗? → search_packages。有文件路径吗? → nix_locate.有命令名吗? → find_command想了解详情吗? → get_package_info.

薄片操作:现代Nix工作流程

根据您使用薄片的方式进行选择:

任务 工具 目的 输出
检查薄片 flake_metadata 输入、输出、描述 JSON元数据
显示薄片结构 flake_show 所有输出(包、应用程序等) 树形结构
预取URL哈希 prefetch_url 获取fetchurl/fetchgit的哈希值 SHA256/SRI哈希值
计算表达式 nix_eval 测试Nix表达式 评估结果

决策流:明白了吗? → flake_metadata 或 flake_show需要URL哈希值吗? → prefetch_url.测试表达式? → nix_eval.

快速提示

缓存是自动的:服务器缓存结果以加快速度。包搜索、元数据查找和构建查询都受益于智能缓存。

验证是内置的:所有输入都经过验证,以防止命令注入和其他安全问题。您可以安全地将用户输入传递给工具。

强制超时:长时间运行的操作会自动超时,以防止资源耗尽。

审计日志:出于安全和调试目的,记录所有操作。

安装

先决条件

  • 启用薄片的Nix包装管理器
  • 支持stdio传输的MCP客户端(Claude Desktop、Continue等)

从克隆本地安装

  1. 构建项目:
cd /path/to/onix-mcp
nix build
  1. 使用构建的二进制文件的绝对路径配置MCP客户端:
{
  "mcpServers": {
    "onix-mcp": {
      "command": "/absolute/path/to/onix-mcp/result/bin/onix-mcp"
    }
  }
}

注: 替换 /absolute/path/to/onix-mcp 带有克隆的实际绝对路径。

MCP客户端配置位置

常见的MCP客户端配置文件位置:

  • 克劳德桌面版: ~/.config/claude/claude_desktop_config.json (Linux/macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows)
  • 继续: .continue/config.json 在您的项目或主目录中
  • 其他客户:请参阅MCP客户的文档

验证安装

配置MCP客户端后,重新启动它以加载服务器。你应该看看 onix-mcp 使用工具:

  • Nix包管理和搜索
  • 建造和开发公用设施
  • 部落基础设施管理
  • 代码质量工具

故障排除

如果服务器未出现:

  1. 验证是否安装了Nix: nix --version
  2. 确保在Nix配置中启用薄片
  3. 检查MCP客户端日志中的连接错误
  4. 对于本地构建,请验证二进制文件是否存在: ls result/bin/onix-mcp
  5. 手动测试服务器: nix run . -- --version (来自repo目录)

更新中

提取最新更改并重新生成:

git pull
nix build

可用工具

包管理

搜索包 -在nixpkgs中搜索软件包

  • query (string):搜索包名称或描述
  • limit (数字,可选):返回的最大结果数(默认值:10)

get_package_info -获取有关包裹的详细信息

  • package (string):包属性路径(例如,“nixpkgs#ripgrep”)

nix_locate -查找哪个包提供文件

  • path (string):要搜索的文件路径
  • limit (数字,可选):最大结果(默认值:10)

解释包 -获取包裹的详细说明

  • package (string):包属性路径

prefetch_url -下载URL并生成Nix哈希

  • url (字符串):预取URL
  • hash_format (字符串,可选):“sha256”或“sri”(默认值:“sri)

建设与发展

nix_build -构建Nix包

  • package (string):要构建的包或薄片引用
  • show_trace (布尔值,可选):显示详细的错误跟踪
  • keep_going (布尔值,可选):尽管失败,仍继续构建

nix_develople -输入薄片的开发shell

  • flake_ref (字符串,可选):Flake引用(默认:当前目录)

nixrun -运行包二进制文件

  • package (string):要运行的包
  • args (数组,可选):传递给程序的参数

run_in_shell -使用包在nixshell中运行命令

  • packages (array):要提供的包列表
  • command (string):要执行的命令

get_build_log -获取包的构建日志

  • package (string):用于获取构建日志的包

nix_log -使用grep搜索构建日志

  • package (string):包派生或存储路径
  • pattern (字符串,可选):搜索Grep模式

代码质量

format_nix -格式化Nix代码

  • code (string):要格式化的Nix代码

validate_nix -验证Nix语法

  • code (string):要验证的Nix代码

lint_nix -Lint Nix代码问题

  • code (string):Nix代码到lint
  • linter (字符串,可选):“static”、“deadnix”或“both”(默认值:“both)

薄片

flake_元数据 -显示薄片元数据

  • flake_ref (string):薄片参考

flake_show -显示薄片输出

  • flake_ref (string):薄片参考

发电机_薄片 -生成新的flake.nix

  • language (string):程序设计语言
  • description (字符串,可选):项目描述

迁移片 -将项目迁移到薄片

  • current_setup (string):当前设置的描述

分析

搜索选项 -搜索NixOS选项

  • query (string):搜索查询

nix_eval -计算Nix表达式

  • expression (string):要计算的Nix表达式

为什么取决于 -显示为什么一个包依赖于另一个包

  • package (string):要分析的包
  • dependency (string):要跟踪的依赖项

show_derivation -显示衍生详细信息

  • package (string):包属性路径

get_closure_size -获取包裹封口的总尺寸

  • package (string):要分析的包
  • human_readable (布尔值,可选):以人类可读的形式格式化大小

差异_差异 -比较两个推导

  • derivation1 (string):一阶导数路径
  • derivation2 (string):二阶导数路径

find_命令 -按描述查找nix命令

  • query (string):搜索查询

Clan.rol工具

clan_machine_create -创建新的部落机器

  • machine_name (string):机器的名称
  • flake_dir (字符串,可选):Flake目录路径

clan_machine_list -列出所有部落机器

  • flake_dir (字符串,可选):Flake目录路径

clan_machine_update -更新部落计算机配置

  • machine_name (string):要更新的机器
  • flake_dir (字符串,可选):Flake目录路径

clan_machine_delete -删除部落机器(破坏性)

  • machine_name (string):要删除的机器
  • flake_dir (字符串,可选):Flake目录路径

clan_machine_install -将部落机器安装到硬件上(破坏性)

  • machine_name (string):要安装的机器
  • target_host (字符串,可选):目标主机

clan_backup_create -为部落计算机创建备份

  • machine_name (string):要备份的机器
  • provider (字符串,可选):备份提供程序

clan_backup_list -列出计算机的备份

  • machine_name (string):机器名称
  • provider (字符串,可选):备份提供程序

clan_backup_restore -恢复备份(破坏性)

  • machine_name (string):要还原的机器
  • backup_id (string):要还原的备份

clan_flake_create -创建新的部落薄片

  • directory (string):创建flake的目录
  • template (字符串,可选):要使用的模板

clan_secrets_list -列出机器的秘密

  • machine_name (string):机器名称
  • flake_dir (字符串,可选):Flake目录

clan_vm_create -创建并运行VM进行测试

  • machine_name (string):要为其创建VM的机器
  • flake_dir (字符串,可选):Flake目录

clan_machine_build -在本地构建Clan机器配置以进行测试

  • machine (string):要构建的机器名
  • flake (字符串,可选):Flake目录路径
  • use_nom (boolean,可选):使用nom以获得更好的构建输出

nixos构建 -从flake构建NixOS机器配置

  • machine (string):机器配置名称
  • flake (字符串,可选):薄片参考
  • use_nom (boolean,可选):使用nom以获得更好的构建输出

clan_analyze_secrets -分析跨机器的部落秘密(ACL)所有权

  • flake (字符串,可选):Flake目录路径
  • 注意:使用本地flake中的包或回退到github:onixcomputer/onix-core

clan_analyze_vars -分析跨机器的Clan变量所有权

  • flake (字符串,可选):Flake目录路径
  • 注意:使用本地flake中的包或回退到github:onixcomputer/onix-core

clan_analyze_tags -分析部落机器标签

  • flake (字符串,可选):Flake目录路径
  • 注意:使用本地flake中的包或回退到github:onixcomputer/onix-core

clan_analyze_roster -分析部落用户名册配置

  • flake (字符串,可选):Flake目录路径
  • 注意:使用本地flake中的包或回退到github:onixcomputer/onix-core

任务队列(Pueue)

puue_add -将任务添加到队列

  • command (string):排队命令
  • label (字符串,可选):任务标签

出生日期 -获取队列状态

puue_log -获取任务日志

  • task_id (数字,可选):特定任务ID

普韦特 -等待任务完成

  • task_ids (数组,可选):要等待的任务ID

puue_remove -从队列中删除任务

  • task_id (number):要删除的任务ID

puue_clean -清理已完成的任务

puue_pause -暂停队列

puue_start -启动/恢复队列

交互过程(Pexpect)

pexpect_start -启动交互过程

  • command (string):运行命令
  • timeout (数字,可选):超时秒数

pexpect_send -向流程发送输入

  • session_id (string):来自pexpect_start的会话ID
  • input (string):要发送的文本

pexpect_close -关闭交互过程

  • session_id (string):要关闭的会话ID

公用事业

setup_dev_环境 -设置开发环境

  • language (string):程序设计语言
  • features (阵列,可选):附加功能

故障排除_构建 -诊断构建失败

  • error_message (string):生成错误输出

optimize_closure -建议减小闭合尺寸的方法

  • package (string):要分析的包

提示

完成 -获取代码完成建议

  • code (string):代码上下文
  • language (string):程序设计语言
  • cursor_position (数字,可选):光标位置

初始化 -初始化新项目

  • language (string):程序设计语言
  • features (数组,可选):要包含的功能

资源

列表_资源 -列出可用的文档资源

read_resource -阅读特定的文档资源

  • uri (string):资源URI

list_resource_templates -列出可用模板

安全

所有工具均执行:

  • 输入验证以防止命令注入
  • 防止资源耗尽的超时保护
  • 所有操作的审计日志记录
  • 安全注释(只读、破坏性、幂等)

看 安全.md 获取详细的安全文档。

演出

服务器包括用于昂贵操作的主动缓存:

  • 套餐搜索:10分钟TTL
  • 包装信息:30分钟TTL
  • nix_locate:5分钟TTL
  • URL预取:24小时TTL

看 性能.md 用于性能基准测试。

建筑

  • 使用rmcp MCP SDK用Rust编写
  • 使用tokio异步运行时
  • 用验证和缓存包装Nix CLI工具
  • 包括用于NixOS部署的Clan.rol工具

许可证

AGPL-3.0