remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Integrations
Integrates with Codecov for tracking code coverage statistics from the project's test suite, with links to coverage reports.
Connects to the NixOS Elasticsearch API to query package information and system options with field-specific search boosts, multiple channel support, and error handling.
Offers specific integration for Firefox configuration in Home Manager, enabling access to Firefox profiles and settings information through dedicated search and info tools.
MCP-NixOS——因为你的人工智能助手不应该对软件包产生幻觉
⚠️ 积极开发:此软件包正在积极开发中。就像我的职业选择一样,它也在不断发展。
📢 已重命名:此软件包已从
nixmcp
重命名为mcp-nixos
并已在 0.2.0 版本中发布。请相应地更新您的参考资料,或继续沿用旧版本——您可以选择。
这是什么玩意?
MCP-NixOS 是一个模型上下文协议服务器,它可以阻止你的 AI 助手编造关于 NixOS 的内容。因为,让我们面对现实吧——唯一比混淆 NixOS 文档更糟糕的事情,就是 AI 自信地对它产生幻觉。
它提供以下实时访问:
- NixOS 软件包(是的,确实存在的软件包)
- 系统选项(您将花费数小时进行配置)
- 家庭管理器设置(当系统范围的混乱还不够时)
- nix-darwin macOS 配置(因为 Apple 用户也需要复杂性)
快速入门:针对长期不耐烦的人
听着,我们都知道你只会浏览一下这份 README 文件,然后遇到问题就抱怨。以下是入门的最低要求:
好了。现在你的 AI 助手可以真正地提供关于 NixOS 的正确信息,而不是再凭空想象出 2019 年的软件包名称了。不用客气。
环境变量(针对控制狂)
多变的 | 描述 | 默认 |
---|---|---|
MCP_NIXOS_LOG_LEVEL | 你有多想知道你的失败 | 信息 |
MCP_NIXOS_LOG_FILE | 在哪里记录上述失败 | (无处——你的秘密是安全的) |
MCP_NIXOS_CACHE_DIR | 在哪里存放你可能会忘记的东西 | 特定于操作系统的缓存位置* |
MCP_NIXOS_CACHE_TTL | 缓存失效多久会毁了你的一天 | 86400(24小时) |
MCP_NIXOS_CLEANUP_ORPHANS | 是否在启动时终止孤立的 MCP 进程 | 错误的 |
KEEP_TEST_CACHE | 保留测试缓存目录以供调试(仅限开发) | 错误的 |
ELASTICSEARCH_URL | NixOS Elasticsearch API URL | https://search.nixos.org/backend |
*默认缓存位置(您的千兆字节将悄悄消失到其中):
- Linux:
~/.cache/mcp_nixos/
(因为~/.cache 不够混乱) - macOS:
~/Library/Caches/mcp_nixos/
(埋在你永远不会看到的地方) - Windows:
%LOCALAPPDATA%\mcp_nixos\Cache\
(在 Windows 目录中丢失)
可能真正起作用的功能
- NixOS 资源:通过 Elasticsearch API 获取软件包和系统选项
- 多个渠道:不稳定(适合勇敢者)、稳定(适合无聊者)和特定版本
- 详细的软件包元数据,告诉你除了如何让它工作之外的一切
- Home Manager :通过解析文档的用户配置选项
- 您将花费周末配置的程序、服务和设置
- 当你想要获得极其具体的内容时,可以使用分层路径
- nix-darwin :针对“顺便说一下,我使用 NixOS”的 Apple 用户的 macOS 配置
- Apple 从未打算让你触碰的系统默认设置、服务和设置
- 以全新且令人兴奋的方式破解您的 Mac!
- 智能缓存:因为没有人愿意等待 Elasticsearch 查询
- 减少网络请求并缩短启动时间
- 缓存后即可离线工作(非常适合下次互联网中断时使用)
- 丰富的搜索:找到您需要的内容或足够接近的内容
- 快速的内存搜索引擎,出乎意料地还不错
- 当您不确定要查找什么时的相关选项
MCP 资源和工具:您不知道自己需要的强大工具
NixOS:让你感觉自己既聪明又愚蠢的操作系统
资源:
nixos://package/{name}
- 查找你确定存在的包nixos://search/packages/{query}
- 搜索可能存在的包nixos://search/options/{query}
- 搜索系统选项,你可能会配置错误nixos://option/{name}
- 获取你仍然会搞砸的选项信息nixos://search/programs/{name}
- 查找提供程序的软件包nixos://packages/stats
- 给你的书呆子朋友留下深刻印象的统计数据
工具:
nixos_search(query, type, channel)
- 您最常用的搜索功能nixos_info(name, type, channel)
- 获取包或选项详细信息nixos_stats(channel)
- 获取没人要求的 NixOS 统计数据
渠道:
unstable
(默认)——生活在边缘,没有什么是稳定的,包括你的理智stable
(24.11) - 适合那些喜欢按计划中断的人- 旧版本——当你怀念以前的失败时
家庭经理:因为系统范围的配置不够复杂
资源:
home-manager://search/options/{query}
- 搜索用户配置选项home-manager://option/{name}
- 稍后您将截取选项详细信息home-manager://options/prefix/{prefix}
- 前缀下的所有选项home-manager://options/{category}
- 类别选项(程序、服务等)
工具:
home_manager_search(query)
- 搜索配置选项home_manager_info(name)
-获取带有实际解释的选项详细信息home_manager_options_by_prefix(option_prefix)
- 通过前缀获取选项home_manager_list_options()
- 不堪重负时列出所有选项类别
nix-darwin:为渴望痛苦的 Mac 用户
资源:
darwin://search/options/{query}
- 搜索 macOS 选项darwin://option/{name}
- 您的 Apple 设备的选项详情darwin://options/prefix/{prefix}
- 前缀下的所有选项darwin://options/{category}
- 类别选项(系统、服务等)
工具:
darwin_search(query)
- 搜索 macOS 配置选项darwin_info(name)
- 获取 Apple 不想让你知道的选项详细信息darwin_options_by_prefix(option_prefix)
- 通过前缀获取选项darwin_list_options()
- 列出所有选项类别
工具使用示例(可复制/粘贴)
安装和配置:您可能会跳过的部分
安装它(选择你的毒药)
配置它(你肯定会搞砸的部分)
添加到您的 MCP 配置文件(例如~/.config/claude/config.json
):
对于使用源代码进行开发(对于那些喜欢惩罚的人):
缓存和通道:魔法发生和文件消失的地方
缓存系统:
- 5 分钟后你就会忘记的默认位置
- 存储 HTML 内容、序列化数据和搜索索引
- 缓存后可离线工作(这是您真正欣赏的唯一功能)
NixOS 频道:
unstable
:最新的 NixOS 不稳定版(适合冒险者)stable
:当前稳定版本(适合规避风险的用户)24.11
:特定版本参考(适合历史倾向者)
开发:对于那些不满足于仅仅使用物品的人
依赖关系(因为没有任何东西再独立存在)
该项目使用pyproject.toml
因为我们不是动物。
使用 Nix(当然有 Nix 开发环境)
测试(是的,我们确实这么做)
测试使用真实的 Elasticsearch API 调用而不是模拟,因为我们不惧怕现实世界:
代码覆盖率在Codecov上进行跟踪(我们假装关心 100% 的覆盖率)。
与 LLM 结合使用:本练习的重点
配置完成后,在 MCP 兼容型号的提示中使用 MCP-NixOS:
LLM 将通过 MCP 服务器获取信息,并且可能实际上会给你一次正确的信息。
实施细节:揭秘《纸牌屋》
代码架构:我们如何实现它(某种方式)
MCP-NixOS 采用模块化结构,尽管面临种种困难,但仍能正常工作:
mcp_nixos/cache/
- 缓存组件,节省带宽和理智mcp_nixos/clients/
- 与 Elasticsearch 通信并解析 HTML 文档的 API 客户端mcp_nixos/contexts/
- 上下文对象,防止一切崩溃mcp_nixos/resources/
- 所有平台的 MCP 资源定义mcp_nixos/tools/
- 执行实际工作的 MCP 工具实现mcp_nixos/utils/
- 实用功能,因为我们不是动物mcp_nixos/server.py
将这座纸牌屋粘合在一起的胶水
NixOS API 集成:外部连接
使用以下方式连接到 NixOS Elasticsearch API:
- 多渠道支持(不稳定、稳定/24.11)
- 特定字段搜索增强,提高相关性
- 错误处理,预期最坏的结果,但希望最好的结果(我的人生故事)
HTML 文档解析器:梦想消亡的地方
对于 Home Manager 和 nix-darwin 选项,我们对 HTML 解析犯下了罪行:
- 文档解析器:通过 BeautifulSoup 咒语、正则表达式黑魔法以及连续 72 小时盯着畸形 HTML 的决心来提取结构化数据。
- 搜索引擎:拼凑而成:
- 用于快速文本搜索的倒排索引(当它不会翻倒时)
- 用于分层查找的前缀树(凌晨 3 点时似乎是个好主意)
- 根据一种被称为“基于共鸣的排序”的算法对结果进行评分
- 缓存系统:因为解析 HTML 一次就已经够麻烦了:
- 存储 HTML 内容、处理后的数据结构和搜索索引
- 使用特定于平台的缓存位置,因此您不必考虑它
- 实现基于 TTL 的过期功能,以便在需要时刷新内容
- 当事情不可避免地出错时,能够优雅地退缩(与我的人际关系不同)
什么是模型上下文协议?
对于那些直接跳到结尾的人
模型上下文协议 (MCP)是一种开放协议,它使用 JSON 消息通过标准输入/输出 (stdin/stdout) 将 LLM 连接到外部数据和工具。本项目实现了 MCP,使 AI 助手能够访问 NixOS、Home Manager 和 nix-darwin 资源,这样它们就终于可以不再对你的操作系统进行胡编乱造了。
执照
麻省理工学院(因为我不是怪物)
NixOS 雪花徽标的使用已注明出处。详情请参阅出处信息。
由自称“恐怖修补匠”的詹姆斯·布林克 (James Brink) 创作,他不知何故设法让事情顺利进行。
You must be authenticated.
Tools
MCP-NixOS 是一个模型上下文协议服务器,它提供有关 NixOS 包、选项、Home Manager 和 nix-darwin 配置的实时、准确信息,防止 AI 助手对 NixOS 资源产生幻觉,并使其能够提供真实的系统配置指导。
- What The Hell Is This Thing?
- Quick Start: For the Chronically Impatient
- Features That Might Actually Work
- MCP Resources & Tools: The Power Tools You Didn't Know You Needed
- Installation & Configuration: The Part You'll Probably Skip
- Development: For Those Not Content With Just Using Things
- Using with LLMs: The Whole Point of This Exercise
- Implementation Details: The House of Cards Revealed
- What is Model Context Protocol?
- License