Connect a read-only conda server#

This tutorial installs conda-cli-mcp in an isolated environment, connects a generic stdio MCP client, and inspects the tools discovered from the target conda installation.

Prerequisites#

  • conda >=26.7,<27

  • an MCP client that can start a local stdio server

Prepare the server#

Install the server without modifying the target conda environment:

conda create --yes --name conda-cli-mcp --override-channels --channel jezdez --channel conda-forge "conda-cli-mcp>=0.2"
conda activate conda-cli-mcp

This installs from the jezdez channel on Anaconda.org. The version constraint prevents the incompatible 0.1.0 console command from being installed with this guide.

Confirm the server and target conda are available:

ccm --version
conda --version

Find the absolute executable paths that the MCP client will use.

python3 -c "import shutil; print(shutil.which('ccm'))"
python3 -c "import os, shutil; print(os.environ.get('CONDA_EXE') or shutil.which('conda'))"
py -c "import shutil; print(shutil.which('ccm'))"
py -c "import os, shutil; print(os.environ.get('CONDA_EXE') or shutil.which('conda.exe'))"

On Windows, select conda.exe. Batch launchers ending in .bat or .cmd are not supported.

Configure the MCP client#

Add a stdio server entry using the two paths from the previous step:

{
  "mcpServers": {
    "conda": {
      "command": "/absolute/path/to/ccm",
      "args": ["--conda-exe", "/absolute/path/to/conda"]
    }
  }
}

The surrounding configuration and restart procedure depend on the client. Keep the server arguments read-only for this first connection.

Inspect the discovered interface#

Start or restart the MCP client, then list the server’s tools. The list should contain generated tools such as conda_info. Exact tools depend on the target conda installation and its installed plugins.

Read the conda://capabilities resource. Confirm that:

  • target_executable is the selected conda path

  • conda_version is in the supported range

  • generated_tools contains the structured tool names

  • plugins describes external conda entry points visible at startup

The resource also contains the immutable startup command catalog and a discovery fingerprint.

Run a read-only tool#

Call conda_info with an empty input object:

{}

The result contains a short text summary and structured fields. A successful call has exit_code set to 0, preserves conda’s output in stdout, and sets parsed_json when stdout is exactly one complete JSON document.

Mutation tools can still appear in the list. The default policy rejects their execution before conda starts.

Next steps#