An MCP server for working with Conda commands, conda-build, and system information
CondaMCP shows mixed definition quality. Strengths: all 12 tools have descriptions and visible schemas with type information; naming generally follows verb_noun convention (cancel_command, get_command_status, list_environments, create, remove, build, etc.). Weaknesses: (1) parameter descriptions are generic and often lack actionable constraints, e.g., 'channels' param in create() says 'Channels to search for packages' without format, range, or examples of valid values; (2) no output schemas documented, tools return strings, ProcessStatus objects, or JSON but LLMs don't know what fields to expect in responses; (3) several tools have unused/unclear context parameters (ctx in async functions but rarely used for meaningful logging); (4) no error handling guidance, tools return bare exception strings like 'Failed to cancel command X: {e}' instead of actionable recovery steps; (5) overly complex schemas with 30+ optional parameters (create, build, remove) without clear dependency documentation, e.g., which combinations of name/prefix/clone are valid? (6) descriptions lack 'when to use' guidance and dependency hints; (7) no pagination or result-limiting documented despite async/process-tracking architecture suggesting long-running operations; (8) pid-based process tracking requires users/agents to manage process IDs across calls, increasing cognitive load.
Build a conda package from a recipe. This tool starts a conda build process and returns a process ID that can be used to check the status and logs using get_build_status() and get_build_log().
Cancel a running conda build.
Cancel a running conda command.
Create a new conda environment. This tool executes the conda create command to create a new conda environment with specified packages and configuration asynchronously. The environment can be created from a list of packages, an environment file, or by cloning an existing environment. After the command is executed, the function returns a ProcessStatus object for tracking the command's execution. Use get_command_status to get the status of a running command.
Get some or all of the log output from a conda build.
Get the status of a conda build.
No output schemas documented. Tools return ProcessStatus, JSON strings, or raw text, but LLMs have no visibility into response structure. This forces agents to guess field names and breaks tool chaining.
Overly complex parameter schemas (30+ optional params in create, build, remove) lack dependency documentation. No indication of which param combinations are valid, mutually exclusive, or required together. e.g., create() accepts both name and prefix, when does one apply over the other?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Get the output of an executed conda command. If as_json is True, the output is returned as a JSON string. Otherwise, the output is returned as a string. The command that created the output must have been run with the `as_json` flag set to True.
Get the status of an executed conda command.
Get detailed information about available NVIDIA GPUs. This tool uses GPUtil to get comprehensive information about all NVIDIA GPUs in the system, including their utilization and memory status.
Get detailed information about the system. This tool provides comprehensive information about the system's hardware, operating system, and resources.
List all conda environments. This tool displays all available conda environments in the system.
Remove packages from a conda environment. This tool executes the conda remove command to remove packages from the specified (or current) conda environment asynchronously. It can also remove all packages or the entire environment if requested. After the command is executed, the function returns a ProcessStatus object for tracking the command's execution. Use get_command_status to get the status of a running command.
Parameter descriptions are generic and lack actionable constraints. 'channels' is described as 'Channels to search for packages' with no format, examples, or valid values. 'solver' says 'Solver to use' without listing valid solvers (classic, libmamba, etc.).
Error handling returns bare exception strings ('Failed to cancel command X: {e}') instead of actionable recovery guidance. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
Process tracking via PID requires agents to manage process IDs across multiple calls (create → get_command_status → get_command_output). This is stateful reasoning that increases error likelihood. Consider returning structured process metadata inline.
No pagination or result-limiting documented for list_environments or similar discovery tools. If conda has hundreds of environments, returning all at once could exhaust context or cause performance issues.
Descriptions lack 'when to use' and dependency hints. e.g., create() description does not clarify when to use packages vs. file vs. clone, or mention that list_environments might need to be called first.
Context parameter (ctx) in async functions is not meaningfully used for logging or progress updates. Most tools define ctx but rarely log substantive progress info to guide the agent.