mcp-podman-crunchtools
# mcp-podman-crunchtools
<!-- mcp-name: io.github.crunchtools/podman -->
MCP server for Podman container management via the Podman REST API. Manages containers, images, pods, networks, volumes, and system info. Supports both rootful and rootless Podman.
## Installation
```bash
# uvx (zero-install)
uvx mcp-podman-crunchtools
# pip
pip install mcp-podman-crunchtools
# Container
podman run -v /run/podman/podman.sock:/run/podman/podman.sock:z \
--security-opt label=type:container_runtime_t \
quay.io/crunchtools/mcp-podman
```
## Configuration
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `PODMAN_SOCKET` | No | Auto-detect | Unix socket path |
| `PODMAN_SOCKET_FILE` | No | — | File containing socket path |
| `PODMAN_TIMEOUT` | No | 30 | Request timeout in seconds |
Socket auto-detection order:
1. `$XDG_RUNTIME_DIR/podman/podman.sock` (rootless)
2. `/run/user/$UID/podman/podman.sock` (rootless fallback)
3. `/run/podman/podman.sock` (rootful)
## Claude Code Integration
```bash
claude mcp add mcp-podman-crunchtools \
--env PODMAN_SOCKET=/run/podman/podman.sock \
-- uvx mcp-podman-crunchtools
```
## Tools (30)
### Containers (12)
| Tool | Description |
|------|-------------|
| `container_list` | List containers |
| `container_inspect` | Get container details; environment values are redacted, names kept |
| `container_start` | Start a container |
| `container_stop` | Stop a container |
| `container_restart` | Restart a container |
| `container_kill` | Send signal to container |
| `container_rm` | Remove a container |
| `container_logs` | Get container logs |
| `container_top` | List processes |
| `container_stats` | Resource usage |
| `container_create` | Create a container |
| `container_prune` | Remove stopped containers |
### Images (5)
| Tool | Description |
|------|-------------|
| `image_list` | List images |
| `image_inspect` | Get image details |
| `image_pull` | Pull from registry |
| `image_rm` | Remove an image |
| `image_prune` | Remove unused images, with the options of `podman image prune` (`all`, `external`, `build_cache`, `filters`) |
### Pods (7)
| Tool | Description |
|------|-------------|
| `pod_list` | List pods |
| `pod_inspect` | Get pod details |
| `pod_start` | Start a pod |
| `pod_stop` | Stop a pod |
| `pod_restart` | Restart a pod |
| `pod_rm` | Remove a pod |
| `pod_create` | Create a pod |
### Networks (2)
| Tool | Description |
|------|-------------|
| `network_list` | List networks |
| `network_inspect` | Get network details |
### Volumes (2)
| Tool | Description |
|------|-------------|
| `volume_list` | List volumes |
| `volume_inspect` | Get volume details |
### System (2)
| Tool | Description |
|------|-------------|
| `system_info` | Podman system info |
| `system_df` | Disk usage |
## License
AGPL-3.0-or-later
TDQS
Scored across 30 tools
Each tool is clearly scoped by resource prefix (container_, image_, pod_, network_, volume_, system_) and a distinct action suffix. Overlaps such as list vs inspect occur only across clearly different resources, so an agent can reliably choose the right tool.
All tools follow the same predictable snake_case pattern: <resource>_<action>_tool. Minor abbreviations like rm and df are still consistent with the established convention and do not create confusion.
With 30 tools, the surface is heavy for a single MCP server and exceeds the typical well-scoped range. While Podman naturally has many operations, the count feels inflated because several resources expose only list/inspect while others expose extensive lifecycle actions.
Container lifecycle is fairly complete, including create, start, stop, restart, kill, remove, logs, stats, and top. However, major gaps exist for images (no build/push/tag), networks (no create/remove/connect/disconnect), volumes (no create/remove/prune), and pods (no pause/unpause or logs).