aniongithub

devcontainer-mcp

Community aniongithub
Updated

An MCP to allow Copilot and Claude Code to work directly with and inside of a devcontainer

devcontainer-mcp

CIWebsite

Give your AI agent its own dev environment โ€” not yours.

devcontainer-mcp is an MCP server that lets AI coding agents create, manage, and work inside dev containers across three backends: local Docker, DevPod, and GitHub Codespaces. The agent builds, tests, and ships code in an isolated container โ€” your laptop stays clean.

Works with GitHub Copilot, Claude, Cursor, and any MCP-compatible client.

The Problem

When AI agents write code, they need to run it somewhere. Today that means your host machine:

  • ๐Ÿ”ด Host contamination โ€” agents install packages, modify PATH, leave behind build artifacts
  • ๐Ÿ”ด "Works on my machine" โ€” agents assume your local toolchain matches production
  • ๐Ÿ”ด No isolation โ€” one project's dependencies break another
  • ๐Ÿ”ด Security risk โ€” agents run arbitrary commands with your user privileges
  • ๐Ÿ”ด Hardware constraints โ€” you're limited to your local machine's resources

The Solution

The devcontainer spec already defines reproducible, container-based dev environments. Every major project ships a .devcontainer/devcontainer.json. But AI agents can't use them โ€” until now.

devcontainer-mcp exposes 45 MCP tools that let any AI agent:

  1. Spin up a dev container from any repo โ€” locally, on a cloud VM, or in Codespaces
  2. Run commands inside the container โ€” builds, tests, linting, anything
  3. Manage the lifecycle โ€” stop, restart, delete when done
  4. Authenticate against cloud providers โ€” GitHub, AWS, Azure, GCP โ€” without ever seeing a raw token
Agent: "Let me build this project..."
  โ†’ auth_status("github") โ†’ picks account
  โ†’ codespaces_create(auth: "github-you", repo: "your/repo")
  โ†’ codespaces_ssh(auth: "github-you", codespace: "...", command: "cargo build")
  โ†’ โœ… Built in the cloud. Your laptop did nothing.

Quick Install

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/aniongithub/devcontainer-mcp/main/install.sh | bash

Windows (via WSL)

Invoke-RestMethod https://github.com/aniongithub/devcontainer-mcp/releases/latest/download/install.ps1 | Invoke-Expression

How it works: The binary runs inside WSL; MCP clients on Windows launch it via wsl ~/.local/bin/devcontainer-mcp serve. The stdio transport works transparently across the WSL boundary. WSL 2 is required โ€” install it with wsl --install if you haven't already.

Backend CLIs (devpod, devcontainer, gh) are detected at runtime โ€” if one is missing, the MCP server returns a helpful error with install instructions.

Binaries available for linux-x64, linux-arm64, darwin-x64, and darwin-arm64.

Architecture

graph TD
    A[AI Agent / MCP Client] -->|stdio JSON-RPC| B[devcontainer-mcp]
    
    subgraph "devcontainer-mcp"
        B --> C[33 MCP Tools]
        C --> D[Auth Broker]
        C --> E[devcontainer-mcp-core]
    end
    
    D -->|opaque handles| C
    E -->|subprocess| F[DevPod CLI]
    E -->|subprocess| G[devcontainer CLI]
    E -->|subprocess| H[gh CLI]
    E -->|bollard API| I[Docker Engine]
    
    F --> J[Docker / K8s / Cloud VMs]
    G --> K[Local Docker]
    H --> L[GitHub Codespaces]

Three Backends, One Interface

Backend Best for Requires Auth needed?
devcontainer CLI (devcontainer_*) Local Docker โ€” fast, simple @devcontainers/cli + Docker No
DevPod (devpod_*) Multi-cloud: Docker, K8s, AWS, Azure, GCP DevPod CLI Optional (cloud providers)
Codespaces (codespaces_*) GitHub-hosted cloud environments gh CLI Yes (auth handle)

Auth Broker

The agent never sees raw tokens. Instead:

  1. auth_status(provider) โ€” list available accounts and scopes
  2. auth_login(provider, scopes?) โ€” initiate login, opens browser, handles device codes
  3. auth_select(id) โ€” switch the active account
  4. auth_logout(id) โ€” revoke credentials

Codespaces tools require an auth handle (e.g. "github-aniongithub"). The MCP server resolves it to the real token on each call via the CLI's native keyring.

Supported providers: GitHub, AWS, Azure, GCP, Kubernetes

MCP Tools (45 total)

Auth (4 tools)

Tool Description
auth_status Check auth for a provider โ€” returns handles, accounts, scopes
auth_login Initiate login or refresh scopes โ€” browser + device code flow
auth_select Switch the active account for a provider
auth_logout Revoke credentials for an account

DevPod (19 tools)

Tool Description
devpod_up Create and start a workspace from a git URL, local path, or image
devpod_stop Stop a running workspace
devpod_delete Delete a workspace and its resources
devpod_build Build a workspace image without starting it
devpod_status Get workspace state (Running, Stopped, Busy, NotFound)
devpod_list List all workspaces with IDs, sources, providers, and status
devpod_ssh Execute a command inside a workspace via SSH
devpod_logs Get workspace logs
devpod_provider_list List all configured providers
devpod_provider_add Add a new provider
devpod_provider_delete Remove a provider
devpod_context_list List all contexts
devpod_context_use Switch to a different context
devpod_container_inspect Docker inspect โ€” labels, ports, mounts, state
devpod_container_logs Stream container logs via Docker API
devpod_file_read Read file content with optional line range
devpod_file_write Create or overwrite a file (auto-creates parent dirs)
devpod_file_edit Surgical string replacement โ€” old_str โ†’ new_str
devpod_file_list List directory contents (non-hidden, 2 levels deep)

devcontainer CLI (11 tools)

Tool Description
devcontainer_up Create and start a local dev container
devcontainer_exec Execute a command inside a running dev container
devcontainer_build Build a dev container image
devcontainer_read_config Read merged devcontainer configuration as JSON
devcontainer_stop Stop a dev container (via Docker API)
devcontainer_remove Remove a dev container and its resources
devcontainer_status Get dev container state by workspace folder
devcontainer_file_read Read file content with optional line range
devcontainer_file_write Create or overwrite a file (auto-creates parent dirs)
devcontainer_file_edit Surgical string replacement โ€” old_str โ†’ new_str
devcontainer_file_list List directory contents (non-hidden, 2 levels deep)

GitHub Codespaces (11 tools) โ€” require auth handle

Tool Description
codespaces_create Create a new codespace for a repository
codespaces_list List your codespaces with state and machine info
codespaces_ssh Execute a command inside a codespace via SSH
codespaces_stop Stop a running codespace
codespaces_delete Delete a codespace
codespaces_view View detailed codespace info (state, machine, config)
codespaces_ports List forwarded ports with visibility and URLs
codespaces_file_read Read file content with optional line range
codespaces_file_write Create or overwrite a file (auto-creates parent dirs)
codespaces_file_edit Surgical string replacement โ€” old_str โ†’ new_str
codespaces_file_list List directory contents (non-hidden, 2 levels deep)

MCP Server Configuration

Linux / macOS

{
  "mcpServers": {
    "devcontainer-mcp": {
      "command": "devcontainer-mcp",
      "args": ["serve"]
    }
  }
}

Windows (WSL bridge)

{
  "mcpServers": {
    "devcontainer-mcp": {
      "command": "wsl",
      "args": ["~/.local/bin/devcontainer-mcp", "serve"]
    }
  }
}

Prerequisites

Install backend CLIs as needed โ€” the MCP server detects them at runtime and returns helpful errors if missing:

  • devcontainer CLI: npm install -g @devcontainers/cli + Docker
  • DevPod: DevPod CLI + Docker (or another provider)
  • Codespaces: GitHub CLI โ€” auth is handled by the auth_login tool

Self-Healing

When devcontainer_up, devpod_up, or codespaces_create fails, the full build output (including errors) is returned to the agent. The agent can read the error, fix the Dockerfile or devcontainer.json, and retry โ€” making the dev environment a dynamic, agent-managed asset rather than a static prerequisite.

Development

This project eats its own dogfood โ€” development happens inside its own devcontainer.

# Using the devcontainer CLI
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . cargo build --workspace
devcontainer exec --workspace-folder . cargo test --workspace
devcontainer exec --workspace-folder . cargo build --release -p devcontainer-mcp

# Or using DevPod
devpod up . --id devcontainer-mcp --provider docker --open-ide=false
devpod ssh devcontainer-mcp --command "cd /workspaces/devcontainer-mcp && cargo build --workspace"

CI/CD

  • Pull Requests โ€” cargo check, cargo test, cargo clippy, cargo fmt run automatically
  • Releases โ€” Creating a GitHub release builds binaries for all 4 platforms

License

MIT

MCP Server ยท Populars

MCP Server ยท New

    HelpCode-ai

    AnythingMCP โ€” Self-Hosted MCP Server & API Gateway

    Self-hosted MCP gateway & API-to-MCP bridge. Convert REST/SOAP/WSDL/GraphQL/SQL APIs into MCP servers for Claude, ChatGPT, Gemini, Copilot, Cursor. OpenAPI/Postman/WSDL import, OAuth2, RBAC, audit log. 29 pre-built adapters (DHL, DATEV, Weclapp, Personio, Handelsregister, Shopware...). Source-available.

    Community HelpCode-ai
    aniongithub

    devcontainer-mcp

    An MCP to allow Copilot and Claude Code to work directly with and inside of a devcontainer

    Community aniongithub
    rahilp

    Second Brain โ€” MCP Server on Cloudflare Workers

    One memory layer, every AI tool. Store anything once โ€” recall it in Claude, ChatGPT, Cursor, or any MCP client. Self-hosted on Cloudflare's free tier.

    Community rahilp
    archetyx

    Telegram MCP Server

    Remote control AI coding assistants (Claude Code/Codex) via Telegram

    Community archetyx
    dtkmn

    MCP ZAP Server

    Give AI agents a safe, self-hosted OWASP ZAP operator for guided web security scans, findings, reports, and production guardrails.

    Community dtkmn