nix-agent
nix-agent is a local MCP server that gives AI agents composable NixOS and Home Manager operations for building, inspecting, validating, activating, and rolling back your real configuration.
build — build the full system/HM closure without activating; returns the store path, or
failed_derivation{drv, log_tail}on failure.diff — build the new closure and diff it against the running system (package additions/removals/version changes) for a pre-switch preview.
switch — activate the config via
nixos-rebuild switch/home-manager switch, recordingrollback_generationfirst; returns a summary (units changed, derivations, package delta, systemd health), gen before/after, trimmed log,degradedstatus on newly failed units, optionalvalidategate, and aprivilegediagnosis on sudo auth failure.generations — list system/HM generations with dates and current marker, or roll back to the previous or a specified generation.
eval_config — evaluate the final merged value of one or many attributes in the actual config (e.g.
services.openssh.enable), with a size guard that truncates large values.locate_option — find which files declare and define an option and each contributed value, bridging from mcp-nixos discovery to the file to edit; supports integrated Home Manager queries.
check — validation ladder:
lint(statix + deadnix with structured findings),dry-build(evaluate and plan the closure), anddry-activate(NixOS-only preview of activation changes).All tools default to
mode='nixos'with an optionalflake_uri, and auto-resolve the flake/target when omitted.
Provides tools for inspecting local NixOS configuration files and applying patch sets to modify and rebuild NixOS or Home Manager configurations via nixos-rebuild or home-manager commands.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nix-agentApply the patch set to switch my Home Manager configuration."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A local MCP server that gives AI agents composable NixOS / Home Manager operations: build, diff, switch, and generations for the operational core, plus eval, locate, and check for config introspection.
It pairs with mcp-nixos. nix-agent
operates on your actual configuration, mcp-nixos handles package and option
discovery. Optional local usage logging (NIX_AGENT_USAGE_LOG=1) records
per-call byte accounting; run nix-agent usage to summarize.
The documented default is high trust: unprompted switch / generations
and passwordless sudo narrowed to this machine's flake. Lower trust (host
prompts, a sudo password) is an opt-down.
Experimental and a work in progress. Feedback and contributions welcome.
Install
Paste this to a coding agent (Codex, Claude Code, opencode, ...) and it does the install:
Read https://raw.githubusercontent.com/JEFF7712/nix-agent/main/docs/agent-install.md and follow every step to install nix-agent on this NixOS system, install the companion skills, and register nix-agent in my MCP settings for this machine.Or do it by hand, see docs/usage.md.
Related MCP server: Terminal MCP Server
Docs
docs/usage.md: install, MCP host config, tool surface, workflow, design notes
docs/agent-install.md: high-trust install guide for agents
docs/privileged-automation.md: default non-interactive dry-activate, switch, and rollback (opt-down for a sudo password)
skills/nix-agent/SKILL.md: companion workflow skill
skills/nix-agent-init/SKILL.md: repo onboarding skill
The published documentation pages are generated directly from these Markdown files.
The nix-agent logo adapts the Nix snowflake from NixOS/nixos-artwork, licensed CC-BY 4.0.
Available Tools
7 toolsbuildA
Start a persistent background build of the system/HM closure, without activation. Returns job_id promptly. Poll build(job_id=...) for bounded live log tails and status: running, ok, failed, or interrupted. Pass the previous poll's log_offset to receive only new stderr. Jobs survive MCP disconnects and server restarts; repeated starts for the same running target reuse its job. On success returns store_path; successful output is a short tail with log_truncated and full local log_paths. on build failure includes failed_derivation{drv, log_tail} when available.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nixos | |
| job_id | No | ||
| flake_uri | No | ||
| log_offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: jobs survive MCP disconnects and server restarts, polling returns bounded log tails, success includes store_path and truncated log details, and failures include failed_derivation when available. These are concrete operational traits beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well front-loaded, starting with the core action and then describing polling and return behavior. It is longer than ideal, but most sentences carry useful operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation tool with an output schema, the description covers the important lifecycle and return behavior: job_id, polling statuses, persistence, log offsets, success store_path, and failure derivation data. The main gap is that mode and flake_uri are not explained, which matters because schema coverage is 0%.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters. It explains job_id and log_offset behavior clearly, but does not explain mode or flake_uri semantics, leaving half the parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: start a persistent background build of the system/HM closure. It also scopes the operation by stating 'without activation,' which implicitly distinguishes it from the activation-oriented sibling switch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the start-then-poll workflow, including passing job_id to build and using the previous poll's log_offset. It also states that repeated starts for the same running target reuse the job, but it does not explicitly name when to use sibling tools like check or switch instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkA
Validation ladder for the configuration, fast to slow: level='lint' (statix+deadnix; returns a structured findings list), 'dry-build' (evaluate and plan the closure build), 'dry-activate' (NixOS only, shows what activation would change). Successful output is a short tail with log_truncated and full local log_paths; failures retain their capped diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nixos | |
| level | Yes | ||
| flake_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does disclose real behavior: which linters run, that lint returns a structured findings list, that dry-build/dry-activate are non-mutating previews, the tail-with-log_truncated plus local log_paths on success, and capped diagnostics on failure. It omits any mention of permissions or how long a dry-build may take, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph that leads with the tool's core purpose and then ordered level detail; every sentence adds information. It is somewhat long but not padded, and the output-behavior sentence earns its place given absent annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, level semantics, platform restriction, and success/failure output shape for a three-parameter tool with no annotations. The main gap is the silent treatment of 'mode' and 'flake_uri'; the output schema existing means return values need not be elaborated, so the added output note is a bonus rather than a necessity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums, yet the description supplies the critical semantics for 'level' by naming and explaining each of its three values. It says nothing about 'mode' (which defaults to nixos) or 'flake_uri', leaving two of three parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (validation of the configuration) and enumerates the three levels with concrete meaning: lint runs statix+deadnix, dry-build evaluates/plans the closure, dry-activate shows activation changes. It distinguishes the levels clearly but does not distinguish this tool from siblings like build or eval_config, which overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'fast to slow' ladder framing gives clear guidance on choosing a level (lint for quick checks, dry-build for closure evaluation, dry-activate for NixOS activation preview). However, there is no explicit statement of when to prefer this tool over siblings such as build, switch, or eval_config, and the NixOS-only restriction on dry-activate is only implied for the other levels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diffA
Build the new closure and diff it against the running system (nvd, falling back to nix store diff-closures): package additions, removals, version changes as structured packages plus closure_size; the raw diff text only when it does not parse. Include the changeset in the reply and switch unless the user asked only to preview or check. For hosts requiring coordinated fleet deployment, use the repository's deployment orchestrator.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nixos | |
| flake_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses the key side effect: it switches by default unless the user asked only to preview or check. It also explains the fallback diff mechanism (nvd, then nix store diff-closures) and when raw diff text is returned instead of structured packages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and output shape, then covers default switching and the fleet alternative. It is dense but every sentence carries operational information; the parenthetical fallback detail is useful rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and it does explain side effects and fallback output behavior. However, for a tool with two undocumented parameters at 0% schema coverage, the description leaves a meaningful gap about how mode and flake_uri control the closure being built and diffed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions the two parameters, mode or flake_uri, nor explains how they affect the build or diff. Because parameter coverage is low, the description should compensate, but here it adds no parameter meaning beyond the schema's bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: build the new closure and diff it against the running system, with structured package changes and closure_size. It also distinguishes the tool from preview/check behavior and fleet deployment via the orchestrator, so an agent can identify its role among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit default behavior ('Include the changeset in the reply and switch unless the user asked only to preview or check') and names the alternative for coordinated fleet deployment. This covers when to use it, when to avoid switching, and when to use a different orchestration path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eval_configA
Evaluate the final merged value of an attribute in the user's actual NixOS/Home Manager configuration via nix eval (e.g. attr='services.openssh.enable'). flake_uri and mode auto-resolve when omitted. Pass a list of attrs to batch several evals into one call, returning per-attr results and failed_count / succeeded_count. Mixed results have status='partial', all failed have status='failed'. Values above the size guard degrade to attr names / length / a head slice (truncated: true). Text fallback and truncation include a hint to request narrower leaf attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| attr | Yes | ||
| mode | No | nixos | |
| flake_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses substantial behavior: flake_uri/mode auto-resolution, batching multiple attrs into one call, per-attr results with failed_count/succeeded_count, status='partial'/'failed' semantics, and truncation via a size guard (truncated: true with a hint). It still omits cost/latency of `nix eval`, and read-only status is only implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and an example, then a compact sequence of behavioral facts (batching, status, truncation). Dense but every sentence adds an actionable detail; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is optional, yet the description still covers batch result fields, partial/failed status, and truncation — good coverage for a batch-capable eval tool. The remaining gap is the unexplained `mode` parameter and the absence of any guidance about evaluation cost.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain that `attr` accepts a single string or a list (batch), and that `flake_uri` and `mode` auto-resolve when omitted, which is meaningful beyond the schema. However, it never says what `mode` values mean (nixos vs. home-manager or similar), leaving one of three parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource: evaluate the final merged value of an attribute in the user's actual NixOS/Home Manager config via `nix eval`, with a concrete example (attr='services.openssh.enable'). This clearly distinguishes it from siblings like `locate_option` (find an option) or `check`/`build`/`switch` (act on the system).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'the user's actual ... configuration' suggests reading real merged state, but there is no explicit when-to-use vs. when-to-use-an-alternative guidance (e.g. use this instead of locate_option to see the resolved value). No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generationsA
action='list': enumerate system/HM generations with dates and current marker. NixOS entries include path when the profile link exists. action='rollback': revert to the previous generation, or pass generation= to activate that generation. Bare rollback is previous-only. Pass mode='home-manager' for HM generations.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nixos | |
| action | No | list | |
| generation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It details that list includes dates and current marker, NixOS entries include path when profile link exists, and rollback can target a specific generation or default to previous. This goes beyond a bare function statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, using a single paragraph with action-oriented sentences. Every sentence contributes meaningful information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the existence of an output schema, the description covers the main use cases adequately. It explains both list and rollback behaviors and parameter options. However, it omits potential edge cases like error handling or destructive consequences, but the core functionality is well documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the meaning and usage of all three parameters: 'action' values, 'generation' as id/path, and 'mode' for home-manager. This fully clarifies the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs two specific actions: listing generations and rolling back to a previous generation. It provides distinct verbs and resources, distinguishing it from sibling tools like build, switch, and diff, which handle other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the two actions and explaining when to use each (list to enumerate, rollback to revert). However, it does not explicitly compare to sibling tools or state when NOT to use this tool, leaving the selection guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locate_optionA
Where does this configuration set an option: files declaring it and every file defining it, with each contributed value (e.g. attr='services.openssh.enable'). The bridge from mcp-nixos discovery to editing the right file. For integrated Home Manager, query the NixOS config with attr='home-manager.users..'.
| Name | Required | Description | Default |
|---|---|---|---|
| attr | Yes | ||
| mode | No | nixos | |
| flake_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns files declaring and defining an option with contributed values, which is the primary behavior. It does not mention side effects (none expected) or permissions, but given the read-only nature implied (locating, not modifying), this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences and one parenthetical example. It is front-loaded with the main purpose and provides an example immediately. Every sentence adds value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, 1 required, and an output schema exists, the description covers the 'attr' parameter and return values implicitly. However, it omits 'mode' and 'flake_uri', which are important for context (e.g., NixOS vs Home Manager mode). The Home Manager mention partially addresses this but not fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It only explains the 'attr' parameter with an example and a special Home Manager syntax. The 'mode' and 'flake_uri' parameters are not mentioned, leaving their semantics undocumented. Thus, it only partially compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool locates where a configuration option is set, listing files and contributed values. It uses a specific verb ('locate') and resource ('option'), and the example attr='services.openssh.enable' clarifies the purpose. While it distinguishes itself from siblings like 'build' or 'check', it does not explicitly compare, so it's very clear but not perfect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for discovery and editing ('bridge from mcp-nixos discovery to editing the right file') and provides a special case for Home Manager. However, it does not explicitly state when not to use this tool versus alternatives like eval_config or inspect_flake, nor does it mention prerequisites or error conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switchA
Activate the configuration (sudo -n nixos-rebuild switch / home-manager switch). Records rollback_generation first. Returns a structured 'summary' (units changed, derivations built, package delta, systemd health, and a bounded warnings list from the captured switch log) plus gen before/after; on success the raw log is trimmed to a tail (pass full_log=True for all of it). Status is 'degraded' when activation succeeded but units newly failed. No implicit validation by default; pass validate=True to gate on check('dry-build') first. On a sudo auth failure returns a 'privilege' diagnosis. Local activation only; hosts requiring cluster cordon/drain and readiness gating must use their fleet orchestrator.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | nixos | |
| full_log | No | ||
| validate | No | ||
| flake_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses that rollback_generation is recorded first, that the raw log is trimmed to a tail unless full_log=True, that status becomes 'degraded' when units newly fail, and that sudo auth failure yields a 'privilege' diagnosis. These are behaviors an agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded — the core action and side effect (rollback generation) come first, then return shape, then the validate/privilege/local-only caveats. It is a single run-on paragraph, but essentially every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, yet the description still helpfully summarizes the return shape (summary fields, gen before/after) and degraded/privilege states. Combined with the mutation side effects and the local-only scope, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate: it explains full_log (default tail vs everything) and validate (gate on dry-build) with meaning beyond the bare types, and the two commands imply mode values. flake_uri is never addressed, leaving one of four parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Activate the configuration' — and names the concrete underlying commands (nixos-rebuild switch / home-manager switch). It also implicitly carves itself out from siblings like check and build by describing what activation does versus dry-run validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to pass validate=True (to gate on check('dry-build')) and when not to (no implicit validation by default), and gives a hard exclusion: hosts requiring cluster cordon/drain and readiness gating must use their fleet orchestrator instead. That is a clear when/when-not/alternative triple.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.14.0- Changed
build1 field changed- added
Input schema / properties / log_offsetAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +}
1 tool update
v0.13.0- Changed
build1 field changed- added
Input schema / properties / job_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
3 tool updates
v0.9.1- Removed
format - Changed
generations1 field changed- added
Input schema / properties / generationAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Removed
inspect_flake
3 tool updates
v0.7.2- Changed
eval_config2 fields changed- added
Input schema / properties / attr / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / attr / typeRemoved value: -"string"
- Added
inspect_flake - Added
locate_option
9 tool updates
v0.5.0- Removed
apply_patch_set - Added
build - Added
check - Added
diff - Added
eval_config - Added
format - Added
generations - Removed
inspect_state - Added
switch
2 tool updates
v0.4.0- First observed
apply_patch_set - First observed
inspect_state
TDQS
Scored across 7 tools
Each tool has a mostly distinct role in the Nix lifecycle: build, check, diff, switch, rollback/list generations, eval_config, and locate_option. Some overlap exists around building/validating closures (build vs. check dry-build vs. diff), but the descriptions clarify when each should be used.
Names are all lowercase snake_case and mostly action-oriented verbs, with multi-word tools following a verb_noun pattern. The main deviation is 'generations', a noun, but the overall convention is predictable and readable.
Seven tools is well-scoped for a Nix deployment agent. Each tool covers a meaningful operation, and there is no obvious filler or redundant surface.
The surface covers the core lifecycle: validation, build, diff, activation, rollback, generation listing, config evaluation, and option location. Direct config file editing/search is not included, but locate_option plus external discovery/editing tools make that a minor gap rather than a dead end.
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
The MCP server that vets MCP servers: identity, risk grade and per-tool risk before you install.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceLocal-first MCP server for repo-scoped development tasks like inspection, testing, documentation, and patching, designed to complement Cline with a structured local execution layer.-
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server for secure, session-based command execution, file manipulation, and system inspection via local terminal sessions.2 npmISC
- AlicenseAqualityAmaintenanceA secure, local-first MCP server for read-only inspection and troubleshooting of development environments, exposing narrow, typed, auditable capabilities for repository inspection, log summarization, Docker review, and security scanning without granting unrestricted machine access.8MIT
- AlicenseAqualityDmaintenanceA security-first MCP server for managing Whatbox slots with structured read-only inspection and approval-gated mutations, including storage, services, website deployment, and torrent control.30MIT