Ensemble CLI + MCP

Download Ensemble for your computer.

Install the CLI to sign in, share folders, run assigned tasks, and let your editor read Ensemble through MCP. Prefer no install? Use the hosted MCP URL with a read-only key.

Install

Pick the channel that fits your OS.

Homebrew, Scoop and the scripts install the full CLI and runner. The npm package is for login and MCP only.

Homebrew

Install
brew install ensemblework/tap/ensemble
Uninstall
brew uninstall ensemble

Install script

Install
curl -fsSL https://ensemblework.com/install.sh | sh
Uninstall
ensemble runner uninstall
rm -rf ~/.local/share/ensemble-cli ~/.local/bin/ensemble

npm (MCP and login only)

coming soon

Requires Node 20+. MCP and login only; no runner.

Install
npm install -g ensemblework
npx -y ensemblework mcp
Uninstall
npm uninstall -g ensemblework

PowerShell

Install
irm https://ensemblework.com/install.ps1 | iex
Uninstall
ensemble runner uninstall
Remove %LOCALAPPDATA%\Programs\Ensemble

Scoop

Install
scoop bucket add ensemblework https://github.com/ensemblework/scoop-bucket
scoop install ensemblework/ensemble
Uninstall
scoop uninstall ensemble

winget

coming soon

Coming soon (in review).

Install
winget install EnsembleWork.EnsembleCLI
Uninstall
winget uninstall EnsembleWork.EnsembleCLI

npm (MCP and login only)

coming soon

Requires Node 20+. MCP and login only; no runner.

Install
npm install -g ensemblework
npx -y ensemblework mcp
Uninstall
npm uninstall -g ensemblework

Install script

Install
curl -fsSL https://ensemblework.com/install.sh | sh
Uninstall
ensemble runner uninstall
rm -rf ~/.local/share/ensemble-cli ~/.local/bin/ensemble

Homebrew on Linux

Install
brew install ensemblework/tap/ensemble
Uninstall
brew uninstall ensemble

Debian / Ubuntu

Open the releases page and filter tags starting cli-v.

Install
Download ensemble-cli_<version>_amd64.deb (or arm64) from the latest CLI release
sudo apt install ./ensemble-cli_*_amd64.deb
Uninstall
sudo apt remove ensemble-cli

Fedora / RHEL

Install
sudo dnf install ./ensemble-cli-*.x86_64.rpm
Uninstall
sudo dnf remove ensemble-cli

openSUSE

Install
sudo zypper install ./ensemble-cli-*.x86_64.rpm
Uninstall
sudo zypper remove ensemble-cli

Arch AUR

coming soon

Coming soon.

Install
ensemble-cli-bin
Uninstall
Remove ensemble-cli-bin with your AUR helper

npm (MCP and login only)

coming soon

Requires Node 20+. MCP and login only; no runner.

Install
npm install -g ensemblework
npx -y ensemblework mcp
Uninstall
npm uninstall -g ensemblework

Manual downloads and checksums

Releases live on GitHub Releases. Filter tags starting cli-v, download the archive or package for your CPU, then verify it against SHA256SUMS.txt.

What it installs

The full CLI installs the ensemble command, a bundled Node runtime, the local runner sidecar, and a user-level runner service when you run ensemble runner install. It does not need sudo for script installs.

Run tasks

Sign in and let Ensemble use one folder.

Start with login. Then share a repo folder, add the model key this computer should use, and install or start the runner.

After install
ensemble login
ensemble folders add ~/code/my-repo
ensemble keys set google
ensemble runner install
Start without login service
ensemble runner start

Useful checks: ensemble status, ensemble doctor, and ensemble update.

MCP

Connect your editor with local or hosted MCP.

Local MCP uses ensemble mcp. Hosted MCP uses https://api.ensemblework.com/mcp with header Authorization: Bearer <ens_ key>. Keys come from the Connect page and use the read-only bridge scope.

VS Code

Config file: macOS ~/Library/Application Support/Code/User/mcp.json, Windows %APPDATA%\Code\User\mcp.json, Linux ~/.config/Code/User/mcp.json.

ensemble mcp setup vscode
Local CLI
{
  "servers": {
    "ensemble": {
      "type": "stdio",
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "servers": {
    "ensemble": {
      "type": "http",
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

Cursor

Config file: ~/.cursor/mcp.json, or %USERPROFILE%\.cursor\mcp.json on Windows.

ensemble mcp setup cursor
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "mcpServers": {
    "ensemble": {
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

Windsurf

Config file: ~/.codeium/windsurf/mcp_config.json.

ensemble mcp setup windsurf
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "serverUrl": "https://api.ensemblework.com/mcp",
  "headers": {
    "Authorization": "Bearer KEY"
  }
}

Claude Desktop

Use the absolute path printed by `ensemble mcp setup --print`, typically /opt/homebrew/bin/ensemble or ~/.local/bin/ensemble.

ensemble mcp setup claude-desktop
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "/opt/homebrew/bin/ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
Hosted URL is not supported yet for Claude Desktop custom connectors; they need OAuth. Use the CLI local server.

Claude Code

ensemble mcp setup claude-code
Local CLI
claude mcp add --scope user ensemble -- ensemble mcp
Hosted URL
claude mcp add --scope user --transport http ensemble https://api.ensemblework.com/mcp --header "Authorization: Bearer KEY"

Codex CLI / IDE

Config file: ~/.codex/config.toml.

ensemble mcp setup codex
Local CLI
[mcp_servers.ensemble]
command = "ensemble"
args = ["mcp"]
Hosted URL
export ENSEMBLE_TOKEN=KEY

[mcp_servers.ensemble]
url = "https://api.ensemblework.com/mcp"
bearer_token_env_var = "ENSEMBLE_TOKEN"

Gemini CLI

Config file: ~/.gemini/settings.json.

ensemble mcp setup gemini
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "mcpServers": {
    "ensemble": {
      "httpUrl": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

GitHub Copilot CLI

Config file: ~/.copilot/mcp-config.json.

ensemble mcp setup copilot-cli
Local CLI
{
  "type": "local",
  "command": "ensemble",
  "args": [
    "mcp"
  ],
  "tools": [
    "*"
  ]
}
Hosted URL
{
  "type": "http",
  "url": "https://api.ensemblework.com/mcp",
  "headers": {
    "Authorization": "Bearer KEY"
  },
  "tools": [
    "*"
  ]
}

Zed

Settings file: macOS/Linux ~/.config/zed/settings.json, Windows %APPDATA%\Zed\settings.json.

ensemble mcp setup zed
Local CLI
{
  "context_servers": {
    "ensemble": {
      "source": "custom",
      "command": "ensemble",
      "args": [
        "mcp"
      ],
      "env": {}
    }
  }
}
Hosted URL
{
  "context_servers": {
    "ensemble": {
      "source": "custom",
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

Visual Studio 2022 17.14+

Config file: %USERPROFILE%\.mcp.json.

ensemble mcp setup visual-studio
Local CLI
{
  "servers": {
    "ensemble": {
      "type": "stdio",
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "servers": {
    "ensemble": {
      "type": "http",
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

JetBrains IDEs

AI Assistant / Junie: Settings → Tools → AI Assistant → Model Context Protocol (MCP) → Add → As JSON.

ensemble mcp setup jetbrains --print
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "ensemble",
      "args": [
        "mcp"
      ]
    }
  }
}
Hosted URL
{
  "mcpServers": {
    "ensemble": {
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

Cline

MCP Servers → Configure → cline_mcp_settings.json.

ensemble mcp setup cline
Local CLI
{
  "mcpServers": {
    "ensemble": {
      "command": "ensemble",
      "args": [
        "mcp"
      ],
      "disabled": false
    }
  }
}
Hosted URL
{
  "mcpServers": {
    "ensemble": {
      "type": "streamableHttp",
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

Continue

Config file: ~/.continue/config.yaml.

ensemble mcp setup continue --print
Local CLI
mcpServers:
  - name: ensemble
    command: ensemble
    args: [mcp]
Hosted URL
mcpServers:
  - name: ensemble
    type: streamable-http
    url: https://api.ensemblework.com/mcp
    requestOptions:
      headers:
        Authorization: Bearer KEY

opencode

Config file: ~/.config/opencode/opencode.json.

ensemble mcp setup opencode
Local CLI
{
  "mcp": {
    "ensemble": {
      "type": "local",
      "command": [
        "ensemble",
        "mcp"
      ],
      "enabled": true
    }
  }
}
Hosted URL
{
  "mcp": {
    "ensemble": {
      "type": "remote",
      "url": "https://api.ensemblework.com/mcp",
      "headers": {
        "Authorization": "Bearer KEY"
      }
    }
  }
}

FAQ

Requirements and security.

What systems are supported?

macOS 13+ on Apple Silicon or Intel, Windows 10/11 x64, and Linux x64 or arm64 with glibc 2.35+ (Ubuntu 22.04+, Debian 12+, Fedora 36+). Git is needed for code tasks. The download is about 120 MB because it carries its own Node runtime and local database.

Where do keys live?

Model keys you save with ensemble keys set stay encrypted on your computer and are never sent to Ensemble. MCP is read-only: the ens_ key the CLI or the Connect page creates can read your Ensemble context and cannot change anything.

Where can tasks run?

Only in folders you share with ensemble folders add, and only while the runner is running. Remove a folder with ensemble folders remove. ensemble logout removes this computer from your account.

Will macOS or Windows warn about unsigned builds?

Not for Homebrew, Scoop, the install scripts, or the Linux packages: they do not mark the files as downloaded from the internet. A zip you download by hand in a browser may need “Open anyway” (macOS) or “Run anyway” (Windows) once.

What about the desktop app?

The desktop app is coming later. Use the CLI for runner and MCP setup today.