Skip to main content
Glama
README.md
# mcp-omnienv-nix

MCP server that spins up Nix-backed, polyglot ephemeral environments. It uses `nix shell` to build disposable toolchains for interpreted stacks (Python, Node.js, Ruby, R, Lua; extendable) and runs your command inside that shell. Package availability depends on `nixpkgs` (e.g., `python313Packages.requests`, `rPackages.misty`, `nodePackages.sloc`).

## Why
- Coding agents often need ad-hoc Python/Node/Ruby/R/Lua deps. Preloading everything is noisy; venvs clutter a system.
- With Nix on the host, this server asks for packages on demand, pulls them into the store, and leaves the rest of the environment clean—no venvs or global installs.
- Runs over MCP (stdio transport) so agent clients can call the tools directly.

## Tools
- `list_languages` — enumerate supported languages and their base Nix packages.
- `run_in_env(language, command, extra_packages?, timeout_seconds?)` — launch a `nix shell` with base + extras and execute `command`. Returns JSON: `stdout`, `stderr`, `exit_code`.

## Quick start
```bash
# Try it ad-hoc
nix shell github:StealthBadger747/mcp-omnienv-nix -c mcp-omnienv-nix
```

Hook into your MCP client (stdio transport). Example config shape:
```json
{
  "mcpServers": {
    "mcp-omnienv-nix": {
      "command": "mcp-omnienv-nix"
    }
  }
}
```

## Extending languages
- Edit `SUPPORTED_LANGUAGES` in `mcp_omnienv_nix/server.py` to add a language and its base packages.
- `run_in_env` validates extra packages against a simple regex and appends them to the `nix shell` invocation.

## Development
```bash
# Nix dev shell with deps + pytest
nix develop . -c pytest
# Run integration tests (hit nix shell for real package resolution)
MCP_OMNIENV_INTEGRATION=1 nix develop . -c pytest -m integration
```

## License
MIT.

TDQS

B3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: list_languages enumerates available options, while run_in_env_impl executes commands in a specific environment. There is no overlap or ambiguity between them.

Naming Consistency3/5

The naming is mixed: list_languages follows a verb_noun pattern, but run_in_env_impl uses a less conventional verb_in_noun_impl style. While readable, the inconsistency in naming conventions is noticeable.

Tool Count2/5

With only 2 tools, the server feels thin for its apparent scope of managing language environments in Nix. A typical server in this domain would include more operations like creating, updating, or inspecting environments, making this count borderline inadequate.

Completeness2/5

The toolset is severely incomplete for managing Nix language environments. It lacks essential operations such as creating, updating, or deleting environments, and provides no way to inspect or modify specific environment configurations, leaving significant gaps in coverage.

Maintenance

ActivityInactive
ResponsivenessNo issues