使用说明
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等)
从克隆本地安装
- 构建项目:
cd /path/to/onix-mcp
nix build
- 使用构建的二进制文件的绝对路径配置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包管理和搜索
- 建造和开发公用设施
- 部落基础设施管理
- 代码质量工具
故障排除
如果服务器未出现:
- 验证是否安装了Nix:
nix --version - 确保在Nix配置中启用薄片
- 检查MCP客户端日志中的连接错误
- 对于本地构建,请验证二进制文件是否存在:
ls result/bin/onix-mcp - 手动测试服务器:
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(字符串):预取URLhash_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代码到lintlinter(字符串,可选):“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的会话IDinput(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