{
  "markdown": "<div align=\"center\">\n\n# 🦎 Komodo MCP Server\n\n**Model Context Protocol Server for [Komodo](https://github.com/moghtech/komodo)**\n\nManage your Docker or Podman deployments through Komodo with AI assistants and automation tools.\n\nKomodo MCP Server enables seamless interaction between AI assistants (like Claude, GitHub Copilot) and Komodo (Container Management Platform) for efficient container management, server orchestration, and deployment operations. The MCP-Server gives you the ability to control your Komodo-managed infrastructure by using natural language or automated workflows.\n\n[![GitHub Release](https://img.shields.io/github/v/release/MP-Tool/komodo-mcp-server?logo=github)](https://github.com/MP-Tool/komodo-mcp-server/releases) [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](LICENSE.txt) [![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white)](https://github.com/MP-Tool/komodo-mcp-server/pkgs/container/komodo-mcp-server) [![npm](https://img.shields.io/npm/v/komodo-mcp-server?logo=npm&logoColor=white)](https://www.npmjs.com/package/komodo-mcp-server) [![MCP Registry](https://img.shields.io/badge/MCP_Registry-Listed-green?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNUg5di02aDJ2NnptNC0ySDEzdi00aDJ2NHoiLz48L3N2Zz4=)](https://registry.modelcontextprotocol.io) [![MCP](https://img.shields.io/badge/MCP-Compliant-green)](https://modelcontextprotocol.io)\n\n[![GitHub Issues](https://img.shields.io/github/issues/MP-Tool/komodo-mcp-server?logo=github)](https://github.com/MP-Tool/komodo-mcp-server/issues) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/MP-Tool/komodo-mcp-server/badge)](https://securityscorecards.dev/viewer/?uri=github.com/MP-Tool/komodo-mcp-server) [![Build Status](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/release.yml/badge.svg)](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/release.yml) [![CodeQL](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/codeql.yml/badge.svg)](https://github.com/MP-Tool/komodo-mcp-server/actions/workflows/codeql.yml)\n\n[Features](#features) • [Quick Start](#quick-start) • [Authentication](#authentication) • [Documentation](#documentation)\n\n</div>\n\n---\n\n## Features\n\n### 🛠️ Complete Infrastructure Control\n\n- **88 Tools, 20 Categories** — Full lifecycle management for containers, stacks, deployments, servers, builds, repos, procedures, actions, alerters, Docker Swarms (Komodo v2), variables, resource syncs, update history, Docker image/network/volume introspection, builders, tags and TOML export — from listing and inspecting to deploying, building, scaling and destroying.\n- **Remote Terminal Access** — Execute commands on servers, containers, deployments, and stack services with real-time output streaming, exit codes, and progress reporting.\n- **Log Search & Analysis** — Pattern-based log search across containers with configurable tail limits and match counting.\n\n### 🔌 Deploy Anywhere\n\n- **Multi-Transport** — Streamable HTTP (stateful), HTTPS with TLS, legacy SSE, and stdio. Same server, any client.\n- **Multi-Platform Docker** — Production-ready images for `amd64`, `arm64`, `arm/v7`, and `arm/v6` (Raspberry Pi). Non-root, multi-stage builds with tini init.\n- **Works with Any MCP Client** — Claude Desktop, VS Code / GitHub Copilot, or any MCP-compatible tool. Runs via Docker, npx, or native Node.js.\n\n### 🔐 Security & Authentication\n\n- **Three Auth Methods** — API Key/Secret (recommended), username/password, or JWT token. All support Docker secrets via `*_FILE` variants.\n- **Auth Enabled by Default** — Per-user local login in HTTP mode unless explicitly disabled. The global `[komodo]` connection is configured once at startup (or via env vars) and used only for stdio or auth-disabled deployments.\n- **Confirmation for Destructive Actions** — Deletes, destroys, prunes, and shell execution ask the human operator for explicit approval first (MCP elicitation with a confirm checkbox). Fail-closed on clients that can't prompt; tunable via `MCP_CONFIRM_DESTRUCTIVE` / `MCP_CONFIRM_FALLBACK`.\n- **Hardened by Default** — Input validation (Zod), rate limiting, DNS rebinding protection, security headers via Helmet, and central fail-closed secret redaction: every tool result (including exec output and retrieved logs) passes the framework's scrub boundary before it reaches the client transcript — see [Secret Redaction](config/README.md#secret-redaction).\n\n### ⚡ Reliability & Operations\n\n- **Live Progress & Cancellation** — Long-running operations (deploy, start, stop) report real-time progress. Cancel any operation mid-flight via AbortSignal.\n- **Auto-Reconnection** — Connection monitoring with automatic recovery and exponential backoff. Auth failures stop retries immediately.\n- **Health & Readiness** — Kubernetes-ready `/health` and `/ready` endpoints. `komodo_health_check` reports server version, connectivity, and auth status.\n\n*Built on [mcp-server-framework](https://github.com/MP-Tool/mcp-server-framework) — a production-ready TypeScript MCP server framework with structured logging, OpenTelemetry, and session management.*\n\n\n## Available Tools (69)\n\n| Category | Tools |\n|----------|-------|\n| **Configuration** | `komodo_health_check` |\n| **Containers** | `komodo_container_list`, `komodo_container_inspect`, `komodo_container_logs`, `komodo_container_search_logs`, `komodo_container_action` *(start/stop/restart/pause/unpause)* |\n| **Servers** | `komodo_server_list`, `komodo_server_info`, `komodo_server_stats`, `komodo_server_apply` *(create/update)*, `komodo_server_delete`, `komodo_server_action` *(start_all/restart_all/pause_all/unpause_all/stop_all\\_containers, prune\\_\\*, delete\\_network/image/volume)* |\n| **Stacks** | `komodo_stack_list`, `komodo_stack_info`, `komodo_stack_apply` *(create/update)*, `komodo_stack_delete`, `komodo_stack_action` *(deploy/pull/start/restart/pause/unpause/stop/destroy)* |\n| **Deployments** | `komodo_deployment_list`, `komodo_deployment_info`, `komodo_deployment_apply` *(create/update)*, `komodo_deployment_delete`, `komodo_deployment_action` *(deploy/pull/start/restart/pause/unpause/stop/destroy)* |\n| **Builds** | `komodo_build_list`, `komodo_build_info`, `komodo_build_action` *(run/cancel)*, `komodo_build_logs`, `komodo_build_apply` *(create/update)*, `komodo_build_delete` |\n| **Repos** | `komodo_repo_list`, `komodo_repo_info`, `komodo_repo_action` *(clone/pull/build/cancel_build)*, `komodo_repo_apply` *(create/update)*, `komodo_repo_delete` |\n| **Procedures** | `komodo_procedure_list`, `komodo_procedure_info`, `komodo_procedure_action` *(run)*, `komodo_procedure_apply` *(create/update)*, `komodo_procedure_delete` |\n| **Actions** | `komodo_action_list`, `komodo_action_info`, `komodo_action_action` *(run/cancel)*, `komodo_action_apply` *(create/update)*, `komodo_action_delete` |\n| **Alerters** | `komodo_alerter_list`, `komodo_alerter_info`, `komodo_alerter_apply` *(create/update)*, `komodo_alerter_delete` |\n| **Swarms** | `komodo_swarm_list`, `komodo_swarm_info`, `komodo_swarm_apply` *(create/update)*, `komodo_swarm_delete`, `komodo_swarm_nodes_list`, `komodo_swarm_services_list`, `komodo_swarm_action` *(update_node/remove_nodes/remove_services/remove_stacks)* |\n| **Resource Syncs** | `komodo_resource_sync_list`, `komodo_resource_sync_info`, `komodo_resource_sync_action` *(run/refresh)*, `komodo_resource_sync_apply` *(create/update)*, `komodo_resource_sync_delete` |\n| **Variables** | `komodo_variable_list`, `komodo_variable_info`, `komodo_variable_apply` *(create/update — value/description/is_secret)*, `komodo_variable_delete` |\n| **Updates** | `komodo_update_list` *(filterable, paginated)*, `komodo_update_info` |\n| **Terminal** | `komodo_exec` *(target: server / container / deployment / stack_service)* |\n| **API Keys** | `komodo_user_list_api_keys`, `komodo_user_create_api_key`, `komodo_user_delete_api_key` |\n| **Docker** | `komodo_docker_image_list`, `komodo_docker_image_inspect`, `komodo_docker_image_history`, `komodo_docker_network_list`, `komodo_docker_network_inspect`, `komodo_docker_volume_list`, `komodo_docker_volume_inspect` |\n| **Builders** | `komodo_builder_list`, `komodo_builder_info`, `komodo_builder_apply` *(create/update)*, `komodo_builder_copy`, `komodo_builder_rename`, `komodo_builder_delete` |\n| **Tags** | `komodo_tag_list`, `komodo_tag_info`, `komodo_tag_apply` *(create/update)*, `komodo_tag_delete` |\n| **TOML Export** | `komodo_toml_export_all`, `komodo_toml_export_resources` |\n\n> **Tip:** Every tool carries `_meta.category` (one of `config`, `container`, `server`, `stack`, `deployment`, `build`, `repo`, `procedure`, `action`, `alerter`, `swarm`, `resource_sync`, `variable`, `update`, `terminal`, `user`, `docker`, `builder`, `tag`, `toml`) and a `requiredScopes` array (`komodo:read` / `komodo:operate` / `komodo:admin`), so MCP clients and gateways can filter or gate tools by category and three-tier RBAC.\n>\n> **Limit the tool surface (server-side).** To keep a client's tool list - and its token cost - small, prune what the server registers with three optional env vars: `MCP_TOOLS_ALLOWED_CATEGORIES` (category allowlist; unset -> all), `MCP_TOOLS_EXCLUDED_CATEGORIES` (drop whole categories), and `MCP_TOOLS_EXCLUDED_TOOLS` (drop tools by name, e.g. `komodo_exec`). Use the exact category strings above. Pruned tools are absent from `tools/list` and not callable. This is purely subtractive - it never exposes more and never bypasses authentication or the read-only-when-open behavior.\n>\n> List/info/logs tools support **cursor pagination** via `{ cursor, page_size }` (1–100, default 25) and emit `_meta.page.next_cursor` when more items are available. `inspect`, `info`, `logs`, and `search_logs` responses also include a session-scoped `ephemeral://...` resource link so large payloads can be fetched out-of-band via `resources/read`; pass `inline_full: true` to force inlining.\n\n\n## Quick Start\n\n### Docker Compose (Recommended for HTTP)\n\nDeploy as a persistent HTTP server — connect from any MCP client.\n\n```bash\nmkdir komodo-mcp && cd komodo-mcp\ncurl -O https://raw.githubusercontent.com/MP-Tool/komodo-mcp-server/main/docker/compose.yaml\ncurl -O https://raw.githubusercontent.com/MP-Tool/komodo-mcp-server/main/docker/docker.env\ncp docker.env .env  # Edit with your credentials\ndocker compose up -d\n```\n\n-> **[Full Docker Guide](docker/README.md)**\n\n### Claude Desktop\n\nAdd to your `claude_desktop_config.json` (Settings -> Developer -> Edit Config):\n\n```json\n\"komodo-mcp-server\": {\n  \"command\": \"docker\",\n  \"args\": [\n    \"run\", \"-i\", \"--rm\",\n    \"-e\", \"KOMODO_URL=https://komodo.example.com:9120\",\n    \"-e\", \"KOMODO_API_KEY=api-key\",\n    \"-e\", \"KOMODO_API_SECRET=api-secret\",\n    \"ghcr.io/mp-tool/komodo-mcp-server:latest\"\n  ]\n}\n```\n\n-> **[Full Claude Guide](examples/claude/README.md)**\n\n### VS Code / GitHub Copilot\n\nAdd to `.vscode/mcp.json` in your workspace:\n\n```json\n{\n  \"servers\": {\n    \"Komodo MCP Server\": {\n      \"type\": \"stdio\",\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"KOMODO_URL=https://komodo.example.com:9120\",\n        \"-e\", \"KOMODO_API_KEY=api-key\",\n        \"-e\", \"KOMODO_API_SECRET=api-secret\",\n        \"ghcr.io/mp-tool/komodo-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\n-> **[Full VS Code Guide](examples/vscode/README.md)** · **[Node.js / npx (no Docker)](examples/node/README.md)** · **[All Integrations](examples/README.md)**\n\n## Use\n\nOnce connected, ask Claude, Copilot, or any MCP-compatible assistant in plain language — it picks the tools. The tool each prompt drives is shown on the right:\n\n| Prompt | Tool(s) called |\n|--------|----------------|\n| \"List all my Komodo servers\" | `komodo_server_list` |\n| \"Show containers on production-server\" | `komodo_container_list` |\n| \"Start the nginx container\" | `komodo_container_action` *(start)* |\n| \"Deploy my-app to staging\" | `komodo_deployment_action` *(deploy)* |\n| \"Get stats for dev-server\" | `komodo_server_stats` |\n| \"Why did the last deploy fail?\" | `komodo_update_list` -> `komodo_update_info` |\n| \"Tail the logs for the api container\" | `komodo_container_logs` |\n\n### Testing with MCP Inspector\n\n```bash\nnpx @modelcontextprotocol/inspector --url http://localhost:8000/mcp\n```\n\nUse `/mcp` for Streamable HTTP or `/sse` for legacy SSE transport (if enabled). Adjust host and port to match your setup.\n\n## Authentication\n\nThere are two distinct layers - don't confuse them:\n\n**1. Connecting to Komodo** - how the server itself talks to Komodo Core. Choose one method:\n\n| Method | Environment Variables | Best For |\n|--------|----------------------|----------|\n| **API Key** (recommended) | `KOMODO_API_KEY` + `KOMODO_API_SECRET` | Service accounts, automation |\n| **Username / Password** | `KOMODO_USERNAME` + `KOMODO_PASSWORD` | Interactive users |\n| **JWT Token** | `KOMODO_JWT_TOKEN` | Browser-based SSO (OIDC, GitHub, Google OAuth) |\n\n`KOMODO_URL` is always required. All credentials also support Docker secrets via `*_FILE` variants\n(e.g. `KOMODO_API_KEY_FILE`). This shared connection is used for stdio and for open (auth-disabled)\nHTTP mode.\n\n**2. Users signing in to the MCP server** (HTTP/HTTPS) - **on by default** since 1.5.0. Each person\nlogs in with their own Komodo username and password and gets their own session with their own\npermissions. Turn it off with `MCP_AUTH_ENABLED=false` (an open network server is then read-only);\n`stdio` is local and never authenticated.\n\nFor the full configuration reference (env vars, config files, Docker secrets), see the **[Configuration Guide](config/README.md)**.\n\n## Troubleshooting\n\n**Connection refused / the server can't reach Komodo.** Check `KOMODO_URL` — it needs the scheme, host, and Komodo Core port (e.g. `https://komodo.example.com:9120`). From inside Docker, `localhost` points at the container, not the host — use the host's IP or a Docker network alias. Confirm nothing (firewall, reverse proxy) blocks the port.\n\n**401 Unauthorized when a client connects (HTTP).** Since 1.5.0, authentication defaults **on** for HTTP/HTTPS, so clients must sign in (browser login against your Komodo username/password). Either complete the login, or set `MCP_AUTH_ENABLED=false` to run without it. A 401 *after* login usually means the Komodo credentials are wrong or the account is disabled. (stdio is local and never requires this.)\n\n**Tools are missing from the list.** Two causes, both by design:\n- **Read-only mode.** If you disabled auth (`MCP_AUTH_ENABLED=false`) on an HTTP/HTTPS transport, the server is read-only for anonymous callers — every write/exec/delete tool (incl. `komodo_exec`) is hidden and rejected. Enable `[auth]` (per-user login) to get them back. Startup logs a `READ-ONLY` notice when this is active.\n- **Tool-surface filter.** `MCP_TOOLS_ALLOWED_CATEGORIES`, `MCP_TOOLS_EXCLUDED_CATEGORIES`, or `MCP_TOOLS_EXCLUDED_TOOLS` prune the registered set. Unset all three to expose everything. A bad category name is ignored with a startup warning listing the valid categories.\n\n## Disclaimer\n\nAI tools (GitHub Copilot, Claude) are used as part of the development workflow — for code generation, architecture exploration, and documentation drafting. Every line of code and documentation is manually reviewed to ensure quality, correctness, and compliance with established engineering standards.\n\nThis software is provided under the [GPL-3.0 License](LICENSE.txt). If you find bugs or have ideas, [issues](https://github.com/MP-Tool/komodo-mcp-server/issues) and [contributions](CONTRIBUTING.md) are always welcome.\n\n## Contributing\nContributions are welcome! See our [Contributing Guide](CONTRIBUTING.md) for details.\n\n- 🐛 [Report bugs](https://github.com/MP-Tool/komodo-mcp-server/issues)\n- 💡 [Request features](https://github.com/MP-Tool/komodo-mcp-server/issues)\n- 🔧 [Submit PRs](https://github.com/MP-Tool/komodo-mcp-server/pulls)\n\n### Development\n\n```bash\n# Clone and install\ngit clone https://github.com/MP-Tool/komodo-mcp-server.git\ncd komodo-mcp-server\nnpm install\n\n# Build and run\nnpm run build\nnpm start\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| **[Configuration](config/README.md)** | All environment variables, config file formats, priority chain, Docker secrets |\n| **[Docker Deployment](docker/README.md)** | Docker Compose setup, health checks, production deployment |\n| **[Client Integrations](examples/README.md)** | Claude Desktop, VS Code, Node.js/npx setup guides |\n| **[Contributing](CONTRIBUTING.md)** | Development setup, coding standards, PR guidelines |\n| **[Security](SECURITY.md)** | Vulnerability reporting, security best practices |\n| **[Changelog](CHANGELOG.md)** | Version history and release notes |\n\n### License\nGPL-3.0 License - see [LICENSE](LICENSE.txt) for details.\n\n### Requirements\n\n- **Komodo** v2 (Komodo Core 2.x; the server refuses version-sensitive tools like `komodo_exec` on older cores)\n- **Docker** (for containerized deployment) or **Node.js 22+** (for native installation)\n- **Valid Komodo credentials** (API Key/Secret, Username/Password, or JWT Token)\n\n## Security\nReport security vulnerabilities via GitHub's Private Vulnerability Reporting (see [SECURITY.md](SECURITY.md)).\n\n**Destructive-action confirmation:** By default, destructive tools (all `*_delete` tools, `komodo_exec`, stack/deployment `destroy`, server `stop_all`/`prune_*`/`delete_*`, swarm `remove_*`, and procedure/action/resource-sync `run`) require the human operator to approve an MCP elicitation prompt — \"accept\" plus a ticked confirm checkbox — before anything executes. Clients that cannot prompt (no elicitation support, or stateless HTTP mode) are refused by default. Tune with `MCP_CONFIRM_FALLBACK=allow` (execute with a warning on such clients) or `MCP_CONFIRM_DESTRUCTIVE=false` (disable the feature) — relevant for stdio setups whose client lacks elicitation support.\n\n**Secret redaction:** Tool results are persisted to the MCP client transcript and forwarded to the model provider, so every tool result passes the framework's central, fail-closed scrub boundary before it leaves the process — structured resource config (env blocks, `webhook_secret`, `passkey`), alerter webhook URLs, exec output, and container/build/update logs, for inline payloads and offloaded resource links alike. On top, `is_secret` variable values are always masked and stacks drop the post-interpolation `deployed_config`/`deployed_contents`. Best-effort defence-in-depth: heuristics catch deterministic secret shapes, not arbitrary material. Intended exception: `komodo_user_create_api_key` returns its one-time secret unredacted. See [Secret Redaction](config/README.md#secret-redaction).\n\n**Best practices:**\n- Never commit credentials\n- Use environment variables\n- Keep dependencies updated\n- Run as non-root user (default in Docker)\n\n## Links\n\n- **[Komodo](https://github.com/moghtech/komodo)** — Container management platform\n- **[Komodo Docs](https://komo.do/docs)** — Official documentation\n- **[MCP Specification](https://modelcontextprotocol.io)** — Model Context Protocol\n- **[MCP Registry](https://registry.modelcontextprotocol.io)** — MCP server registry\n\n---\n\n<div align=\"center\">\n\n**Built with ❤️ for the Komodo community 🦎**\n\n[Report Bug](https://github.com/MP-Tool/komodo-mcp-server/issues) · [Request Feature](https://github.com/MP-Tool/komodo-mcp-server/issues) · [Discussions](https://github.com/MP-Tool/komodo-mcp-server/discussions)\n\n</div>\n",
  "bytes": 19686,
  "sha": "2333f5f4e818fe9c9168785729c98734a3ed14dab72b0aafaedc414490d0a701",
  "repo_slug": "mp-tool/komodo-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_mp_tool_komodo_mcp_server_c47f4c4d/readme"
}