diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index bbe9662..4c01957 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,8 +1,8 @@ { "name": "docker-developer-tools", "displayName": "Docker Developer Tools", - "version": "1.0.0", - "description": "A Cursor plugin for Docker and container workflows - 17 skills, 10 rules, and 150 MCP tools for building, debugging, optimizing, and managing Docker containers, images, networks, and volumes. Includes a companion MCP server (docker-mcp) for live Docker CLI integration.", + "version": "1.1.0", + "description": "Docker and container workflows for Cursor, Claude Code, and MCP-compatible editors - 17 skills, 10 rules, and 150 MCP tools for building, debugging, optimizing, and managing Docker containers, images, networks, and volumes. Includes a companion MCP server (docker-mcp) for live Docker CLI integration.", "author": { "name": "TMHSDigital", "url": "https://github.com/TMHSDigital" @@ -27,7 +27,11 @@ "mcp" ], "category": "developer-tools", - "tags": ["docker", "containers", "devops"], + "tags": [ + "docker", + "containers", + "devops" + ], "logo": "assets/logo.png", "skills": "./skills/", "rules": "./rules/" diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d193fb5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,33 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/mcp-server" + schedule: + interval: "weekly" + day: "monday" + open-pull-requests-limit: 10 + labels: + - "dependencies" + commit-message: + prefix: "deps" + + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "monthly" + open-pull-requests-limit: 5 + labels: + - "dependencies" + commit-message: + prefix: "deps" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + open-pull-requests-limit: 10 + labels: + - "ci" + commit-message: + prefix: "ci" diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 4e35fc1..0c62359 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,46 +1,71 @@ name-template: "v$RESOLVED_VERSION" tag-template: "v$RESOLVED_VERSION" +template: | + ## What's Changed + + $CHANGES + + **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION categories: - - title: "Skills" + - title: "New MCP Tools" labels: - - "skill" - - title: "Rules" + - "new-tool" + - "mcp" + - title: "Skills & Rules" labels: + - "skill" - "rule" - - title: "MCP Tools" - labels: - - "mcp-tool" - - title: "Enhancements" - labels: - - "enhancement" - title: "Bug Fixes" labels: - "bug" + - "fix" - title: "Documentation" labels: - "documentation" - - title: "Maintenance" + - "docs" + - title: "CI / Infrastructure" labels: - - "maintenance" + - "ci" + - "infrastructure" - "dependencies" -change-template: "- $TITLE @$AUTHOR (#$NUMBER)" + - title: "Other Changes" + labels: + - "*" +change-template: "- $TITLE (#$NUMBER) @$AUTHOR" change-title-escapes: '\<*_&' version-resolver: major: labels: - "major" + - "breaking" minor: labels: - "minor" + - "feature" + - "new-tool" patch: labels: - "patch" + - "bug" + - "fix" + - "docs" default: patch -template: | - ## Changes - - $CHANGES - - ## Contributors - - $CONTRIBUTORS +exclude-labels: + - "skip-changelog" +autolabeler: + - label: "documentation" + files: + - "*.md" + - "docs/**" + - label: "ci" + files: + - ".github/**" + - label: "mcp" + files: + - "mcp-server/**" + - label: "skill" + files: + - "skills/**" + - label: "rule" + files: + - "rules/**" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4e7f87..b6cdc8f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,10 +17,10 @@ jobs: matrix: node-version: [20, 22] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} cache: npm diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..53243a5 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,37 @@ +name: CodeQL + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: "0 6 * * 1" + +permissions: + actions: read + contents: read + security-events: write + +jobs: + analyze: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + language: [javascript-typescript] + steps: + - uses: actions/checkout@v6 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v4 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v4 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v4 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000..31216ea --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,19 @@ +name: Dependency Review + +on: + pull_request: + branches: [main] + +permissions: + contents: read + pull-requests: write + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/dependency-review-action@v4 + with: + fail-on-severity: high + comment-summary-in-pr: always diff --git a/.github/workflows/label-sync.yml b/.github/workflows/label-sync.yml new file mode 100644 index 0000000..410a720 --- /dev/null +++ b/.github/workflows/label-sync.yml @@ -0,0 +1,59 @@ +name: Label PRs + +on: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + pull-requests: write + +jobs: + label: + name: Auto-label by path + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Get changed files + id: changed + run: | + FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only) + echo "files<> "$GITHUB_OUTPUT" + echo "$FILES" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Apply labels + run: | + LABELS="" + + if echo "$FILES" | grep -q "^skills/"; then + LABELS="$LABELS,skills" + fi + + if echo "$FILES" | grep -q "^rules/"; then + LABELS="$LABELS,rules" + fi + + if echo "$FILES" | grep -q "^mcp-server/"; then + LABELS="$LABELS,mcp-server" + fi + + if echo "$FILES" | grep -q "^docs/"; then + LABELS="$LABELS,documentation" + fi + + if echo "$FILES" | grep -q "^\.github/"; then + LABELS="$LABELS,ci" + fi + + LABELS="${LABELS#,}" + + if [ -n "$LABELS" ]; then + gh pr edit ${{ github.event.pull_request.number }} --add-label "$LABELS" + fi + env: + FILES: ${{ steps.changed.outputs.files }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index 7a351ed..a455de3 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -17,7 +17,7 @@ jobs: linkcheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check links uses: lycheeverse/lychee-action@v2 diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 35b8227..088ea2c 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -4,7 +4,11 @@ on: push: branches: [main] paths: - - "docs/**" + - "skills/**" + - "rules/**" + - "mcp-tools.json" + - "site.json" + - ".cursor-plugin/plugin.json" - "assets/**" workflow_dispatch: @@ -23,19 +27,32 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - name: Copy assets into docs - run: cp -r assets docs/assets + - uses: actions/checkout@v6 + with: + repository: TMHSDigital/Developer-Tools-Directory + path: _template + sparse-checkout: site-template + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install dependencies + run: pip install -r _template/site-template/requirements.txt + + - name: Build site + run: python _template/site-template/build_site.py --repo-root . --out docs - name: Configure Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v6 - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: path: docs - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4b1255d..9d631f4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: node-version: 22 registry-url: https://registry.npmjs.org diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 3cd8a2a..1f16903 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -7,13 +7,13 @@ on: types: [opened, reopened, synchronize] permissions: - contents: read + contents: write pull-requests: write jobs: update-release-draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v6 + - uses: release-drafter/release-drafter@v7 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..cf319d2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,124 @@ +name: Release + +on: + push: + branches: [main] + paths-ignore: + - ".github/**" + - "docs/**" + - "*.md" + - "LICENSE" + +permissions: + contents: write + +concurrency: + group: release + cancel-in-progress: false + +jobs: + version-and-release: + name: Bump version, tag, and release + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[skip ci]')" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get current version + id: current + run: | + version=$(python3 -c "import json; print(json.load(open('.cursor-plugin/plugin.json'))['version'])") + echo "version=$version" >> "$GITHUB_OUTPUT" + + - name: Determine bump type from commits + id: bump + run: | + last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + if [ -z "$last_tag" ]; then + commits=$(git log --oneline --format="%s") + else + commits=$(git log "$last_tag"..HEAD --oneline --format="%s") + fi + + bump="patch" + if echo "$commits" | grep -qiE "^(feat|feature)(\(.+\))?!:|BREAKING CHANGE"; then + bump="major" + elif echo "$commits" | grep -qiE "^(feat|feature)(\(.+\))?:"; then + bump="minor" + fi + + echo "bump=$bump" >> "$GITHUB_OUTPUT" + + - name: Compute new version + id: new + run: | + current="${{ steps.current.outputs.version }}" + bump="${{ steps.bump.outputs.bump }}" + IFS='.' read -r major minor patch <<< "$current" + case "$bump" in + major) major=$((major + 1)); minor=0; patch=0 ;; + minor) minor=$((minor + 1)); patch=0 ;; + patch) patch=$((patch + 1)) ;; + esac + echo "version=$major.$minor.$patch" >> "$GITHUB_OUTPUT" + + - name: Check if version changed + id: check + run: | + if [ "${{ steps.current.outputs.version }}" = "${{ steps.new.outputs.version }}" ]; then + echo "skip=true" >> "$GITHUB_OUTPUT" + else + echo "skip=false" >> "$GITHUB_OUTPUT" + fi + + - name: Update version files + if: steps.check.outputs.skip == 'false' + env: + NEW_VERSION: ${{ steps.new.outputs.version }} + OLD_VERSION: ${{ steps.current.outputs.version }} + run: | + python3 -c " + import json, os + + new_version = os.environ['NEW_VERSION'] + old_version = os.environ['OLD_VERSION'] + + path = '.cursor-plugin/plugin.json' + with open(path) as f: + data = json.load(f) + data['version'] = new_version + with open(path, 'w') as f: + json.dump(data, f, indent=2) + f.write('\n') + + readme = 'README.md' + with open(readme) as f: + content = f.read() + content = content.replace( + f'version-{old_version}-', + f'version-{new_version}-' + ) + with open(readme, 'w') as f: + f.write(content) + " + + - name: Commit and tag + if: steps.check.outputs.skip == 'false' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "chore: bump version to ${{ steps.new.outputs.version }} [skip ci]" + git tag "v${{ steps.new.outputs.version }}" + git push origin main --tags + + - name: Create GitHub Release + if: steps.check.outputs.skip == 'false' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create "v${{ steps.new.outputs.version }}" \ + --title "v${{ steps.new.outputs.version }}" \ + --generate-notes diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index fd1a86f..007d0ba 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v9 + - uses: actions/stale@v10 with: days-before-stale: 30 days-before-close: 14 diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 717db33..ca895df 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -10,7 +10,7 @@ jobs: validate: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Validate plugin.json run: python3 -c "import json; json.load(open('.cursor-plugin/plugin.json'))" @@ -48,7 +48,7 @@ jobs: done - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..9818fe9 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,91 @@ +# AGENTS.md + +Guidance for AI coding agents working on the Docker Developer Tools repository. + +## Repository overview + +A Cursor IDE plugin providing Docker and container workflows. 17 skills, 10 rules, and 150 MCP tools for building, debugging, optimizing, and managing Docker containers, images, networks, and volumes. Includes a companion MCP server (`@tmhs/docker-mcp`) for live Docker CLI integration. + +**Docs site:** https://tmhsdigital.github.io/Docker-Developer-Tools/ + +## Repository structure + +``` +Docker-Developer-Tools/ + .cursor-plugin/plugin.json # Plugin manifest (name, version, description) + skills/ # 17 skill directories, each with SKILL.md + rules/ # 10 rule files (.mdc) + mcp-server/ # Companion MCP server (Node.js/TypeScript) + src/ # Server source code + dist/ # Compiled output + mcp-tools.json # MCP tool catalog (150 tools, manually maintained) + site.json # GitHub Pages branding/config + docs/ # Generated GitHub Pages site (do not edit manually) + assets/ # Logo and images + tests/ # Test suite + .github/workflows/ # CI/CD (ci, codeql, dep-review, links, pages, publish, release-drafter, stale, validate) +``` + +## Branching and commit model + +- **Single branch:** `main` only +- **Conventional commits:** `feat:`, `fix:`, `chore:`, `docs:` + +## Skills + +Each skill lives in `skills//SKILL.md`. Every SKILL.md starts with YAML frontmatter: + +```yaml +--- +name: skill-name +description: One-line description of what the skill does +--- +``` + +The `name` and `description` fields are parsed by the site template build system to generate the GitHub Pages site. The body below the frontmatter contains the full skill content. + +When adding a new skill: +1. Create `skills//SKILL.md` with frontmatter +2. Update the `skills` count in `.cursor-plugin/plugin.json` +3. Use `feat:` commit prefix + +## Rules + +Rules are `.mdc` files in `rules/`. Each starts with YAML frontmatter containing `description` and `globs` fields. When adding a new rule, update the `rules` count in context references. + +## MCP Tools + +`mcp-tools.json` is a manually maintained JSON array of all MCP tools. Each entry has `name`, `description`, and `category` fields. This file is used by the GitHub Pages build system to render the tools catalog. When adding or removing tools from `mcp-server/`, update this file accordingly. + +## GitHub Pages + +The docs site is auto-generated. Do not edit `docs/index.html` directly. It is built by the shared template system from the Developer-Tools-Directory repo. + +Data sources: +- `.cursor-plugin/plugin.json` -- metadata (name, version, description) +- `site.json` -- branding (accent color, install steps, links) +- `skills/*/SKILL.md` -- parsed for name/description via frontmatter +- `rules/*.mdc` -- parsed for name/scope/description +- `mcp-tools.json` -- tool catalog + +The `pages.yml` workflow clones Developer-Tools-Directory, runs `build_site.py`, and deploys the output. Changes to skills, rules, mcp-tools.json, site.json, plugin.json, or assets trigger a rebuild. + +## CI/CD workflows + +- `ci.yml` -- runs tests on push/PR +- `validate.yml` -- validates plugin.json schema, checks docs +- `pages.yml` -- builds and deploys GitHub Pages via shared template +- `publish.yml` -- publishes MCP server to npm +- `codeql.yml` -- security scanning +- `dependency-review.yml` -- audits PR dependencies +- `release-drafter.yml` -- auto-drafts release notes +- `stale.yml` -- marks/closes inactive issues and PRs +- `links.yml` -- checks for broken links + +## Key conventions + +- No em dashes or en dashes -- use hyphens or rewrite +- No hardcoded credentials, tokens, or API keys +- Conventional commits required +- CC-BY-NC-ND-4.0 license +- All content written for public readership diff --git a/CLAUDE.md b/CLAUDE.md index 62194df..759a974 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,9 +4,11 @@ Project documentation for Claude Code and AI assistants working on this reposito ## Project Overview -Docker Developer Tools is a Cursor IDE plugin that integrates Docker and container workflows into Cursor's AI chat. It includes 17 skills, 10 rules, and a companion MCP server with 150 tools for live Docker CLI integration. +Docker Developer Tools integrates Docker and container workflows into AI-assisted development. It includes 17 skills, 10 rules, and a companion MCP server with 150 tools for live Docker CLI integration. -This is a monorepo - the Cursor plugin (skills and rules) and the companion MCP server live in the same repository. Docker's API is local (Docker Engine socket / CLI), so one repo is simpler for users to install and maintain. +**Works with:** Cursor (plugin), Claude Code (terminal and in-editor), and any MCP-compatible client. + +This is a monorepo - the skills, rules, and companion MCP server live in the same repository. Docker's API is local (Docker Engine socket / CLI), so one repo is simpler for users to install and maintain. **Version:** 1.0.0 **License:** CC-BY-NC-ND-4.0 diff --git a/README.md b/README.md index 7718591..e4579c5 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,31 @@

- Docker Developer Tools Logo + Docker Developer Tools Logo

Docker Developer Tools

- Expert Docker workflows, directly inside Cursor. + Expert Docker workflows for Cursor, Claude Code, and any MCP-compatible editor.

- CI - License - Version - npm - npm downloads - npm size - Stars - Last Commit - Cursor Plugin - Docker + Version + Release + npm + License + Docs +

+ +

+ CI + Validate + CodeQL +

+ +

+ Stars + Issues + Downloads

@@ -27,9 +34,22 @@ --- +## Compatibility + +This project works with any AI coding tool that supports skills, rules, or MCP: + +| Component | Cursor | Claude Code (terminal) | Claude Code in Cursor | Other MCP clients | +|---|:---:|:---:|:---:|:---:| +| **CLAUDE.md** context | Yes | Yes | Yes | - | +| **17 Skills** (SKILL.md) | Yes | Yes | Yes | - | +| **10 Rules** (.mdc) | Yes | Via CLAUDE.md | Yes | - | +| **150 MCP tools** | Yes | Yes | Yes | Yes | + +> **Claude Code** reads `CLAUDE.md` automatically and can reference skills. The MCP server works with any client that supports the MCP stdio transport. + ## Quick Start -Install the plugin, then ask Cursor anything about Docker: +Install the plugin, then ask anything about Docker: ```text "Write a production Dockerfile for my Node.js app with multi-stage builds" @@ -41,7 +61,7 @@ Install the plugin, then ask Cursor anything about Docker: ```mermaid flowchart LR - A[User asks Docker question] --> B[Cursor loads a Skill] + A[User asks Docker question] --> B[AI loads a Skill] B --> C[Skill guides the response] C --> D[MCP tools fetch live Docker data] D --> E[User gets expert help] @@ -100,7 +120,7 @@ flowchart LR ## Companion: Docker MCP Server -The MCP server gives Cursor live access to your local Docker environment. +The MCP server gives your AI assistant live access to your local Docker environment. Works with Cursor, Claude Code, and any MCP-compatible client.

npm version @@ -410,7 +430,7 @@ Add to your Cursor MCP config (`.cursor/mcp.json`):   -### Plugin +### Cursor (plugin + MCP) Symlink this repo into your Cursor plugins directory: @@ -426,7 +446,7 @@ New-Item -ItemType SymbolicLink ` ln -s /path/to/Docker-Developer-Tools ~/.cursor/plugins/docker-developer-tools ``` -### MCP Server +Build and configure the MCP server: ```bash cd mcp-server @@ -436,6 +456,26 @@ npm run build Then add the JSON config from the [MCP Server section](#companion-docker-mcp-server) to `.cursor/mcp.json`. +### Claude Code (terminal or in Cursor) + +Claude Code reads `CLAUDE.md` automatically when you open this repo. For the MCP server, register it with: + +```bash +cd mcp-server && npm install && npm run build +claude mcp add docker node ./mcp-server/dist/index.js +``` + +Or if installed globally via npm: + +```bash +npm install -g @tmhs/docker-mcp +claude mcp add docker -- npx @tmhs/docker-mcp +``` + +### Other MCP clients + +Any client supporting MCP stdio transport can use the Docker MCP server. Point it at `node ./mcp-server/dist/index.js` or the global `npx @tmhs/docker-mcp`. +

diff --git a/docs/assets/logo-64.png b/docs/assets/logo-64.png deleted file mode 100644 index ef23c23..0000000 Binary files a/docs/assets/logo-64.png and /dev/null differ diff --git a/docs/assets/logo-256.png b/docs/assets/logo.png similarity index 100% rename from docs/assets/logo-256.png rename to docs/assets/logo.png diff --git a/docs/assets/og-card.jpg b/docs/assets/og-card.jpg deleted file mode 100644 index ec9c11e..0000000 Binary files a/docs/assets/og-card.jpg and /dev/null differ diff --git a/docs/fonts/inter-bold.woff2 b/docs/fonts/inter-bold.woff2 new file mode 100644 index 0000000..b9e3cb3 Binary files /dev/null and b/docs/fonts/inter-bold.woff2 differ diff --git a/docs/fonts/inter-medium.woff2 b/docs/fonts/inter-medium.woff2 new file mode 100644 index 0000000..fdfdcc6 Binary files /dev/null and b/docs/fonts/inter-medium.woff2 differ diff --git a/docs/fonts/inter-regular.woff2 b/docs/fonts/inter-regular.woff2 new file mode 100644 index 0000000..2bcd222 Binary files /dev/null and b/docs/fonts/inter-regular.woff2 differ diff --git a/docs/fonts/jetbrains-mono-regular.woff2 b/docs/fonts/jetbrains-mono-regular.woff2 new file mode 100644 index 0000000..66c5467 Binary files /dev/null and b/docs/fonts/jetbrains-mono-regular.woff2 differ diff --git a/docs/index.html b/docs/index.html index c51aa92..e5af956 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,1119 +1,2107 @@ - - -Docker Developer Tools - Cursor Plugin - - - - - - - - - - - + /* SKILL DETAIL ROWS */ + details.skill-row { border-bottom: 1px solid rgba(48,54,61,0.5); } + details.skill-row > summary { display: flex; align-items: center; gap: 0.75rem; padding: 0.625rem 0.75rem; cursor: pointer; list-style: none; transition: background 0.15s; } + details.skill-row > summary::-webkit-details-marker { display: none; } + details.skill-row > summary::before { content: ''; display: inline-block; width: 0; height: 0; border-left: 5px solid var(--accent-light); border-top: 4px solid transparent; border-bottom: 4px solid transparent; transition: transform 0.2s; flex-shrink: 0; } + details.skill-row[open] > summary::before { transform: rotate(90deg); } + details.skill-row > summary:hover { background: var(--bg3); } + .skill-name { font-weight: 500; color: var(--text); white-space: nowrap; min-width: 140px; } + .skill-desc { color: var(--text-dim); font-size: 0.875rem; } + .skill-detail { padding: 0.5rem 0.75rem 1rem 1.75rem; } + .skill-detail-group { margin-bottom: 0.75rem; } + .skill-detail-group strong { display: block; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); margin-bottom: 0.35rem; } + .skill-detail-group ul { list-style: disc; padding-left: 1.25rem; font-size: 0.875rem; color: var(--text); } + .skill-detail-group li { margin-bottom: 0.2rem; } + .skill-tools { display: flex; flex-wrap: wrap; gap: 0.35rem; } + .skill-tools code { background: var(--bg3); padding: 0.15rem 0.5rem; border-radius: 4px; font-family: var(--font-mono); font-size: 0.8rem; color: var(--accent-light); } + .skill-category-label { display: inline-block; font-size: 0.6875rem; color: var(--text-dim); background: var(--bg3); padding: 0.1rem 0.5rem; border-radius: 10px; } + + /* QUICK START */ + .quick-start { position: relative; max-width: 640px; margin: 0 auto 2rem; } + .quick-start-title { font-size: 0.8125rem; color: var(--text-dim); text-align: center; margin-bottom: 0.5rem; font-weight: 500; } + .quick-start-block { position: relative; background: var(--bg2); border: 1px solid var(--border); border-radius: 8px; padding: 1rem 3rem 1rem 1.25rem; font-family: var(--font-mono); font-size: 0.9rem; color: var(--accent-light); overflow-x: auto; white-space: pre; line-height: 1.6; } + .quick-start-copy { position: absolute; top: 0.625rem; right: 0.625rem; background: var(--bg3); border: 1px solid var(--border); border-radius: 6px; color: var(--text-dim); cursor: pointer; padding: 0.3rem; display: flex; align-items: center; justify-content: center; transition: color 0.2s, border-color 0.2s; } + .quick-start-copy:hover { color: var(--accent-light); border-color: var(--accent); } + .quick-start-copy svg { width: 16px; height: 16px; } + + /* COMPATIBILITY BADGES */ + .compat-row { display: flex; justify-content: center; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 1.5rem; } + .compat-pill { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.25rem 0.75rem; background: color-mix(in srgb, var(--accent) 12%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); border-radius: 999px; font-size: 0.75rem; font-weight: 500; color: var(--accent-light); white-space: nowrap; } + .compat-pill svg { width: 14px; height: 14px; flex-shrink: 0; } + + /* CHANGELOG */ + .changelog-entry { margin-bottom: 1.25rem; } + .changelog-version { font-size: 1rem; font-weight: 700; color: var(--text); } + .changelog-date { font-size: 0.8125rem; color: var(--text-dim); margin-left: 0.5rem; } + .changelog-heading { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--accent-light); margin: 0.75rem 0 0.35rem; } + .changelog-items { list-style: disc; padding-left: 1.25rem; font-size: 0.875rem; color: var(--text-dim); } + .changelog-items li { margin-bottom: 0.2rem; } + .changelog-link { display: inline-block; margin-top: 0.75rem; font-size: 0.8125rem; } + + /* RELATED TOOLS */ + .related-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } + .related-card { display: flex; flex-direction: column; padding: 1rem 1.25rem; background: var(--bg3); border: 1px solid var(--border); border-radius: 8px; transition: border-color 0.2s, transform 0.15s; text-decoration: none; color: inherit; } + .related-card:hover { border-color: var(--accent); transform: translateY(-2px); color: inherit; } + .related-card-name { font-weight: 600; font-size: 0.9375rem; color: var(--text); display: flex; align-items: center; gap: 0.4rem; } + .related-card-name svg { width: 14px; height: 14px; color: var(--accent-light); flex-shrink: 0; } + .related-card-desc { font-size: 0.8125rem; color: var(--text-dim); margin-top: 0.35rem; } + + /* SR ONLY */ + .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; } + + /* REDUCED MOTION */ + @media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } + } + - - - - - - - -
- -

Docker Developer Tools

-

Expert Docker workflows, live container data, and real-time linting - all inside Cursor IDE.

-
- v1.0.0 - CC BY-NC-ND 4.0 - Cursor Plugin -
-
- - -
-
-
-
0
-
Skills
-
-
-
0
-
Rules
+ +
-
- - -
-
-

Who Is This For

-

Built for developers who ship with containers every day.

-
-
-
-

Backend Developers

-

Get Dockerfile best practices, multi-stage build guidance, and image optimization tips without leaving your editor. Debug container issues in seconds.

+ + + +
+
+ +

Docker Developer Tools

+

Docker and container workflows for Cursor, Claude Code, and MCP-compatible editors - 17 skills, 10 rules, and 150 MCP tools for building, debugging, optimizing, and managing Docker containers, images, networks, and volumes. Includes a companion MCP server (docker-mcp) for live Docker CLI integration.

+
+
0
Skills
+
0
Rules
+
0
MCP Tools
-
-
-

DevOps Engineers

-

Compose validation, CI/CD pipeline templates, registry workflows, and security hardening - all context-aware and tuned to your running environment.

+ +
+ + + + Cursor 0.49+ + + + + + + Windows / macOS / Linux + + + + + + Node 18+ + + + + + + Claude Code compatible + +
-
-
-

Full-Stack Developers

-

Spin up development environments, manage volumes and networks, and troubleshoot port conflicts without memorizing Docker CLI flags.

+ + + -
-
-
- -
-
-

How It Works

-

Three steps from question to answer.

-
-
-
1
-

Ask a Docker Question

-

Type your question in Cursor's AI chat - anything from Dockerfile syntax to debugging a crashing container.

- -
-
-
2
-

Cursor Loads a Skill

-

The plugin matches your query to one of 17 specialized skills, each loaded with Docker best practices and structured guidance.

- -
-
-
3
-

MCP Tools Fetch Live Data

-

The companion MCP server queries your local Docker engine in real time - containers, images, logs, networks, and more.

+ +
+
Get started in seconds
+
npm install -g @tmhs/docker-mcp
+
+
-
-
- - -
-
-

See It In Action

-

Real-time Docker debugging, right in your chat.

-
-
-
-
-
- Cursor AI Chat -
-
-
You: My container keeps restarting with exit code 137
-
Agent (container-debugging skill):
-
- Exit code 137 means the process was killed by SIGKILL (signal 9). This is almost always an Out-Of-Memory (OOM) kill - the container exceeded its memory limit and the kernel terminated it. -
-
- docker_inspectContainer({ "containerId": "webapp-prod" }) -
-
- Confirmed: OOMKilled: true, memory limit is set to 256MB but the process peaked at 312MB. -
-
- Recommendation: Increase the memory limit or optimize the application's memory usage.

- docker run --memory=512m --memory-swap=512m webapp:latest -
+
+ + +
+ + + +
+
+

Skills

+ 17 +
+
-
-
- - -
-
-

17 Skills, Organized

-

Each skill is a focused knowledge module loaded on demand.

-
- -
- -
-
- dockerfile-best-practices - docker-compose-helper - docker-troubleshooting +
+ Skills list +
+ +
+ + Container Debugging + Debug running containers with log analysis, shell access, state inspection, and network diagnostics. + +
+ +
+ Triggers +
  • A container is crashing, restarting, or stuck in a crash loop
  • Application logs need analysis to find errors
  • You need to inspect container state, environment, or mounts
  • Network connectivity between containers is broken
  • A container is being OOMKilled or running out of resources
  • Files need to be copied into or out of a running container
+
+ + + container-debugging
-
-
- -
- -
-
- image-optimization - docker-resource-management +
+ +
+ + Docker Advanced Workflows + Multi-stage pipelines, sidecar patterns, healthchecks, init containers, signal handling, and graceful shutdown. + +
+ +
+ Triggers +
  • Designing multi-stage build pipelines for production images
  • Implementing sidecar containers alongside a primary service
  • Configuring healthchecks for containers or compose services
  • Setting up init containers or entrypoint scripts
  • Handling process signals and graceful shutdown in containers
  • Copying files between containers and the host during development
  • Monitoring container resource usage in real time
  • Updating container resource limits without restarting
+
+ + + docker-advanced-workflows
- - - -
- -
-
- docker-networking - docker-volumes +
+ +
+ + Docker CI/CD + Use Docker in CI/CD pipelines with GitHub Actions, multi-platform builds, registry push, and layer caching strategies. + +
+ +
+ Triggers +
  • Setting up Docker builds in GitHub Actions or GitLab CI
  • Building multi-platform images (amd64, arm64)
  • Pushing images to Docker Hub, GHCR, ECR, or other registries
  • Optimizing CI build times with layer caching
  • Defining a tagging strategy for releases
  • Setting up Docker-in-Docker for CI environments
  • Automating image scanning in the build pipeline
+
+ + + docker-ci-cd
- - - -
- -
-
- docker-security - docker-image-signing +
+ +
+ + Docker Compose Helper + Write, debug, and optimize docker-compose.yml files with service definitions, networking, volumes, and healthchecks. + +
+ +
+ Triggers +
  • Writing a new `docker-compose.yml` or `compose.yml` from scratch
  • Adding services, volumes, or networks to an existing compose file
  • Debugging service startup order or dependency issues
  • Configuring healthchecks and depends_on conditions
  • Managing environment variables and `.env` files in compose
  • Setting up multi-environment compose configurations with profiles
+
+ + + docker-compose-helper
- - - -
- -
-
- docker-ci-cd - docker-registry - docker-development-env - docker-context-management +
+ +
+ + Docker Context Management + Manage Docker contexts for multi-host and remote Docker engine workflows + +
+ +
+ Triggers +
  • Asks about connecting to a remote Docker host
  • Wants to manage multiple Docker environments
  • Needs to set up SSH or TLS-based Docker access
  • Asks about switching between Docker contexts
  • Mentions "docker context", "remote Docker", or "multi-host"
+
+ + + docker-context-management
- - - -
- -
-
- container-debugging +
+ +
+ + Docker Development Environment + Set up development environments with Docker including hot reload, dev containers, bind mounts, and database containers. + +
+ +
+ Triggers +
  • Setting up a local development stack with Docker
  • Configuring hot reload / live code reload in containers
  • Creating dev vs production Dockerfiles or multi-stage builds
  • Running database containers (Postgres, MySQL, Redis, MongoDB) for development
  • Setting up VS Code or Cursor devcontainers
  • Managing environment variables across dev and prod
  • Debugging applications running inside containers
  • Creating docker-compose files for full-stack development
+
+ + + docker-development-env
- - - -
- -
-
- docker-advanced-workflows - docker-multi-platform +
+ +
+ + Docker Content Trust and Image Signing + Docker Content Trust - image signing, verification, key management, and CI/CD signing pipelines + +
+ +
+ Triggers +
  • Asks about Docker Content Trust or image signing
  • Wants to sign, verify, or revoke trust for Docker images
  • Needs to manage signing keys (generate, load, rotate)
  • Mentions "DCT", "notary", "image verification", or "content trust"
  • Asks about enforcing signed images in production
+
+ + + docker-image-signing
- - - -
- -
-
- docker-swarm +
+ +
+ + Docker Multi-Platform Builds + Multi-architecture builds, buildx builder configuration, manifest lists, platform targeting, and cross-compilation patterns. + +
+ +
+ Triggers +
  • Building Docker images for multiple CPU architectures (amd64, arm64, armv7, s390x)
  • Configuring buildx builders for multi-platform output
  • Creating or managing manifest lists for multi-arch image distribution
  • Setting up CI/CD pipelines that produce multi-platform images
  • Troubleshooting cross-compilation or platform-specific build failures
  • Optimizing build cache for multi-platform workflows
+
+ + + docker-multi-platform
- - - - - - - - -
-
-

10 Always-On Rules

-

Automatic linting and guardrails that catch issues before they ship.

-
-
-

dockerfile-lint

- **/Dockerfile* -

Flags Dockerfile antipatterns like running as root, missing health checks, and inefficient layer ordering.

-
-
-

docker-secrets

- Global (always active) -

Detects hardcoded passwords, API keys, and tokens. Recommends environment variables or Docker secrets.

-
-
-

compose-validation

- **/docker-compose*.yml -

Validates compose file structure, service dependencies, and network configurations.

-
-
-

docker-resource-limits

- Docker-related files -

Flags missing CPU and memory limits that could lead to resource exhaustion in production.

-
-
-

docker-image-pinning

- Dockerfiles, compose files -

Catches unpinned image tags like :latest that create non-reproducible builds.

-
-
-

docker-port-conflicts

- Dockerfiles, compose files -

Detects duplicate port mappings and common port conflicts across services.

-
-
-

docker-logging

- Dockerfiles, compose files -

Flags missing logging drivers and log rotation settings that can fill disks.

+
+ +
+ + Docker Networking + Configure container networking with bridge, host, and overlay drivers, port mapping, DNS resolution, and inter-container communication. + +
+ +
+ Triggers +
  • Creating custom Docker networks for multi-container apps
  • Configuring port mapping between host and container
  • Troubleshooting DNS resolution between containers
  • Choosing between bridge, host, overlay, or macvlan drivers
  • Setting up network aliases for service discovery
  • Isolating containers on separate networks for security
  • Debugging connectivity failures between containers
+
+ + + docker-networking +
+
+ +
+ + Docker Registry + Work with container registries including Docker Hub, GHCR, ECR, and ACR for pushing, pulling, and tag management. + +
+ +
+ Triggers +
  • Pushing or pulling images to/from Docker Hub, GHCR, ECR, ACR, or GCR
  • Setting up authentication for private registries
  • Choosing a tagging strategy (semver, SHA, branch-based)
  • Configuring credential helpers for automated workflows
  • Working with image digests and content-addressable references
  • Building and pushing multi-architecture manifests
  • Setting up a private or self-hosted registry
  • Migrating images between registries
+
+ + + docker-registry +
+
+ +
+ + Docker Resource Management + Configure resource limits and monitoring with CPU and memory constraints, cgroups, container stats, and OOM kill prevention. + +
+ +
+ Triggers +
  • Setting memory or CPU limits on containers
  • Diagnosing OOM (out of memory) kills
  • Monitoring container resource usage with `docker stats`
  • Configuring resource constraints in Docker Compose
  • Understanding cgroup v1 vs v2 behavior
  • Setting up Prometheus or cAdvisor for container monitoring
  • Tuning swap and memory reservation settings
  • Preventing a single container from starving others
+
+ + + docker-resource-management +
+
+ +
+ + Docker Security + Harden container security with rootless mode, read-only filesystems, capability management, secret handling, and image scanning. + +
+ +
+ Triggers +
  • Hardening containers for production deployment
  • Running containers as non-root users
  • Scanning images for vulnerabilities (CVEs)
  • Managing secrets without baking them into images
  • Configuring capability restrictions and security profiles
  • Setting up read-only root filesystems
  • Auditing existing container security posture
  • Implementing network segmentation between services
+
+ + + docker-security +
+
+ +
+ + Docker Swarm Orchestration + Docker Swarm mode orchestration - cluster management, service deployment, scaling, node administration, and rolling updates + +
+ +
+ Triggers +
  • Asks about Docker Swarm mode or cluster orchestration
  • Wants to initialize, join, or manage a Swarm cluster
  • Needs to create, update, scale, or rollback Swarm services
  • Asks about node management, promotion, demotion, or draining
  • Mentions "swarm init", "service create", "node ls", or "rolling update"
+
+ + + docker-swarm +
+
+ +
+ + Docker Troubleshooting + Diagnose and fix common Docker problems including port conflicts, permission errors, disk space, networking issues, and build failures. + +
+ +
+ Triggers +
  • A container fails to start or exits immediately
  • Port binding errors occur (address already in use)
  • Permission denied errors on the Docker socket or inside containers
  • Docker runs out of disk space
  • Image pulls fail with auth or network errors
  • DNS resolution fails inside containers
  • Build context is unexpectedly large or builds fail
  • Docker Compose services fail dependency checks
  • The Docker daemon won't start or is unresponsive
  • Containers can't communicate across networks
+
+ + + docker-troubleshooting +
+
+ +
+ + Docker Volumes + Manage data persistence with named volumes, bind mounts, tmpfs mounts, volume drivers, and backup strategies. + +
+ +
+ Triggers +
  • Persisting data across container restarts or recreations
  • Choosing between named volumes, bind mounts, and tmpfs
  • Backing up or restoring volume data
  • Debugging permission issues with mounted directories
  • Sharing data between multiple containers
  • Extracting files from containers with `docker cp`
  • Managing volume lifecycle (create, inspect, prune)
+
+ + + docker-volumes +
+
+ +
+ + Dockerfile Best Practices + Write and optimize Dockerfiles with multi-stage builds, layer caching, image size reduction, and security hardening. + +
+ +
+ Triggers +
  • Writing a new Dockerfile from scratch
  • Reviewing or optimizing an existing Dockerfile
  • Reducing image size or build time
  • Hardening a container image for production
  • Fixing layer caching issues that slow CI/CD builds
+
+ + + dockerfile-best-practices +
+
+ +
+ + Image Optimization + Reduce Docker image size with base image selection, layer consolidation, multi-stage patterns, and distroless builds. + +
+ +
+ Triggers +
  • A Docker image is too large for fast pulls or deployments
  • CI/CD pipelines are slow due to image size
  • Comparing base image options (Alpine vs slim vs distroless vs scratch)
  • Analyzing image layers to find bloat
  • Applying multi-stage build patterns to strip build-time dependencies
  • Using BuildKit features for more efficient builds
+
+ + + image-optimization +
+
+ -
-

buildx-best-practices

- Dockerfiles, compose files -

Flags multi-platform build issues, missing cache configuration, and architecture-specific hardcoding.

+ + + + + + +
+
+

Rules

+ 10 +
+
-
-

compose-scaling

- **/docker-compose*.yml -

Flags scaling blockers: container_name, fixed host ports, missing resource limits, missing restart policy.

+
+
+ Rules list +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameScopeDescription
Buildx Best PracticesFlag multi-platform build issues, missing cache configuration, and architecture-specific antipatterns in Dockerfiles and Compose files.
Compose ScalingFlag Docker Compose configurations that prevent or complicate service scaling
Compose ValidationFlag common docker-compose issues including missing healthchecks, privileged mode, host networking, and port conflicts.
Docker Image PinningFlag unpinned image tags in Dockerfiles and compose files. Suggest specific version tags or SHA digests for reproducible builds.
Docker LoggingFlag missing or misconfigured logging drivers and log rotation settings in Docker and Compose files.
Docker Port ConflictsFlag commonly conflicting port mappings in Docker configurations and suggest checking for conflicts before binding.
Docker Resource LimitsFlag missing memory and CPU limits in Docker configurations to prevent unbounded resource usage.
Docker SecretsFlag hardcoded passwords, tokens, and registry credentials in Docker configurations. Suggest environment variables or Docker secrets.
Dockerfile LintFlag common Dockerfile antipatterns including unpinned base images, running as root, missing cleanup, and ADD misuse.
Swarm SecurityFlag Docker Swarm security issues - missing autolock, unrotated certificates, unencrypted overlays, exposed ports, and missing resource limits
-
-

swarm-security

- Docker-related files -

Flags missing autolock, unrotated certificates, unencrypted overlay networks, and exposed management ports.

+
+
+ + + + +
+
+

MCP Tools

+ 150 + +
+
+
-
- - - -
-
-

150 MCP Tools

-

Live Docker data, container lifecycle, image pipeline, complete Compose V2, volume/network CRUD, resource cleanup, buildx, manifests, context management, Swarm orchestration, and more via the companion MCP server.

-
- - - / -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ToolDescription
docker_listContainersList running or all containers with status, ports, and names
docker_inspectContainerDetailed container info - config, state, mounts, networking
docker_containerLogsFetch recent container logs with tail and timestamp options
docker_listImagesList local images with tags, sizes, and creation dates
docker_inspectImageFull image metadata - layers, environment, entrypoint, labels
docker_listVolumesList Docker volumes with driver and mount point info
docker_listNetworksList networks with driver, scope, and connected containers
docker_systemInfoDocker engine info - version, OS, storage driver, resource totals
docker_diskUsageDisk usage breakdown by images, containers, volumes, and build cache
docker_searchHubSearch Docker Hub for images by keyword
Container Lifecycle
docker_runCreate and start a container from an image (ports, env, volumes, network)
docker_createCreate a container without starting it
docker_startStart a stopped container
docker_stopStop a running container with optional grace period
docker_restartRestart a container with optional grace period
docker_killSend a signal to a running container (default: SIGKILL)
docker_rmRemove a container (with optional force and volume removal)
docker_pausePause all processes in a running container
docker_unpauseUnpause a paused container
docker_execExecute a command in a running container
Image and Build
docker_pullPull an image or repository from a registry
docker_pushPush an image or repository to a registry
docker_buildBuild an image from a Dockerfile and context directory
docker_tagCreate a tag that refers to a source image
docker_rmiRemove one or more images
docker_commitCreate a new image from a container's changes
docker_saveSave one or more images to a tar archive
docker_loadLoad images from a tar archive
Compose
docker_composeUpCreate and start Compose services (detached, build, profiles)
docker_composeDownStop and remove containers, networks, volumes, and images
docker_composePsList containers for a Compose project
docker_composeLogsView logs for Compose services
docker_composeBuildBuild or rebuild Compose service images
docker_composeRestartRestart Compose services
docker_composePullPull images for Compose services
docker_composeExecExecute a command in a running Compose service container
docker_composeConfigValidate, resolve, and render a Compose file
docker_composeCpCopy files to/from a Compose service container
docker_composeCreateCreate service containers without starting
docker_composeEventsReal-time events from Compose containers
docker_composeImagesList images used by Compose services
docker_composeKillForce stop Compose service containers
docker_composeLsList running Compose projects
docker_composePausePause Compose services
docker_composeUnpauseUnpause Compose services
docker_composePortPrint public port for a service binding
docker_composeRmRemove stopped Compose service containers
docker_composeRunRun one-off command on a Compose service
docker_composeScaleScale Compose services to a replica count
docker_composeStartStart existing Compose service containers
docker_composeStopStop Compose services without removing
docker_composeTopRunning processes in Compose service containers
Volume Management
docker_volumeCreateCreate a named volume with optional driver and labels
docker_volumeRmRemove one or more volumes
docker_volumeInspectDisplay detailed volume information
docker_volumePruneRemove all unused volumes
Network Management
docker_networkCreateCreate a network (bridge, overlay, macvlan)
docker_networkRmRemove one or more networks
docker_networkConnectConnect a container to a network
docker_networkDisconnectDisconnect a container from a network
docker_networkInspectDisplay detailed network information
docker_networkPruneRemove all unused networks
Cleanup / Prune
docker_systemPruneRemove unused containers, networks, images, and optionally volumes
docker_containerPruneRemove all stopped containers
docker_imagePruneRemove dangling or unused images
Advanced / Observability
docker_cpCopy files or directories between container and host
docker_statsLive resource usage statistics (CPU, memory, network I/O)
docker_topShow running processes in a container
docker_eventsReal-time events from the Docker daemon
docker_updateUpdate container resource config (CPU, memory, restart policy)
docker_waitBlock until container stops and return exit code
Buildx
docker_buildxBuildMulti-platform builds with cache export, provenance, and push/load
docker_buildxLsList buildx builder instances
docker_buildxCreateCreate a new buildx builder instance
docker_buildxRmRemove a buildx builder instance
docker_buildxInspectInspect a buildx builder instance
docker_buildxUseSet the default buildx builder
docker_buildxImagetoolsInspect or create multi-platform manifest lists via buildx
docker_builderPruneRemove buildx build cache
Manifest
docker_manifestCreateCreate a local manifest list for multi-arch images
docker_manifestInspectDisplay an image manifest or manifest list
docker_manifestAnnotateAdd platform info to a manifest list entry
docker_manifestPushPush a manifest list to a registry
docker_manifestRmRemove local manifest lists
Container Gaps
docker_diffInspect filesystem changes in a container
docker_exportExport a container's filesystem as a tar archive
docker_portList port mappings for a container
docker_renameRename a Docker container
Image Gaps
docker_imageHistoryShow layer history of an image
docker_importImport a tarball to create a filesystem image
Context Management
docker_contextCreateCreate a context for remote Docker hosts
docker_contextLsList available Docker contexts
docker_contextInspectDetailed context information
docker_contextRmRemove Docker contexts
docker_contextUseSet the active Docker context
docker_contextShowPrint current context name
Registry Authentication
docker_loginAuthenticate to a container registry
docker_logoutLog out from a container registry
-
-
-

Swarm Cluster 8 tools

- - - - - - - - - -
ToolDescription
docker_swarmInitInitialize a new Swarm cluster
docker_swarmJoinJoin a Swarm as worker or manager
docker_swarmLeaveLeave the Swarm
docker_swarmJoinTokenDisplay or rotate join tokens
docker_swarmUpdateUpdate Swarm configuration
docker_swarmUnlockUnlock a locked Swarm manager
docker_swarmUnlockKeyDisplay or rotate the unlock key
docker_swarmCaDisplay and rotate root CA certificate
-
-
-

Swarm Services 9 tools

- - - - - - - - - - -
ToolDescription
docker_serviceCreateCreate a replicated or global service
docker_serviceUpdateUpdate a service
docker_serviceRmRemove services
docker_serviceLsList services
docker_serviceInspectInspect a service
docker_serviceLogsFetch service logs
docker_servicePsList tasks of a service
docker_serviceScaleScale services
docker_serviceRollbackRollback a service
-
-
-

Swarm Nodes 7 tools

- - - - - - - - -
ToolDescription
docker_nodeLsList nodes in the Swarm
docker_nodeInspectInspect a node
docker_nodePsList tasks on a node
docker_nodeRmRemove nodes
docker_nodeUpdateUpdate node metadata
docker_nodePromotePromote workers to managers
docker_nodeDemoteDemote managers to workers
-
-
-

Swarm Stacks 6 tools

- - - - - - - -
ToolDescription
docker_stackDeployDeploy or update a stack
docker_stackRmRemove stacks
docker_stackLsList stacks
docker_stackPsList tasks in a stack
docker_stackServicesList services in a stack
docker_stackConfigOutput merged stack config
-
-
-

Swarm Configs 4 tools

- - - - - -
ToolDescription
docker_configCreateCreate a Swarm config
docker_configInspectInspect a config
docker_configLsList configs
docker_configRmRemove configs
-
-
-

Swarm Secrets 4 tools

- - - - - -
ToolDescription
docker_secretCreateCreate a Swarm secret
docker_secretInspectInspect a secret (metadata only)
docker_secretLsList secrets
docker_secretRmRemove secrets
-
-
-

Docker Content Trust 4 tools

- - - - - -
ToolDescription
docker_trustInspectInspect trust data for an image
docker_trustSignSign an image
docker_trustRevokeRevoke trust for an image
docker_trustKeyManage signing keys
-
-
-

Utility 2 tools

- - - -
ToolDescription
docker_versionShow Docker client and server version info
docker_composeVersionShow Docker Compose version info
-
-
-

Compose Extras 1 tool

- - -
ToolDescription
docker_composeWatchWatch build context and auto-rebuild on file changes
+
+ + + / +
-
-

Docker Scout 3 tools

- - - - -
ToolDescription
docker_scoutQuickviewQuick overview of image vulnerabilities
docker_scoutCvesList CVEs found in an image
docker_scoutRecommendationsGet base image update recommendations
-
-
-

Plugin Management 4 tools

- - - - - -
ToolDescription
docker_pluginLsList installed Docker plugins
docker_pluginInstallInstall a Docker plugin from a registry
docker_pluginRmRemove one or more Docker plugins
docker_pluginEnableEnable a disabled Docker plugin
-
-
-
- - -
-
-

Get Started

-

Up and running in under two minutes.

-
- -
-
1
-
-

Clone the repository

-
- git clone https://github.com/TMHSDigital/Docker-Developer-Tools.git - -
+ + +
+ Buildx 8 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_builderPruneRemove Docker buildx build cache
docker_buildxBuildBuild images with buildx for multi-platform support
docker_buildxCreateCreate a new buildx builder instance
docker_buildxImagetoolsInspect or create multi-platform manifest lists
docker_buildxInspectInspect a buildx builder instance
docker_buildxLsList buildx builder instances
docker_buildxRmRemove a buildx builder instance
docker_buildxUseSet the default buildx builder
-
- -
-
2
-
-

Symlink into Cursor plugins

-

macOS / Linux:

-
- ln -s "$(pwd)" ~/.cursor/plugins/docker-developer-tools - -
-

Windows (PowerShell as Admin):

-
- New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.cursor\plugins\docker-developer-tools" -Target (Get-Location) - -
+ + +
+ Container Management 24 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_containerLogsFetch recent logs from a container
docker_containerPruneRemove all stopped containers
docker_cpCopy files between a container and the local filesystem
docker_createCreate a new container without starting it
docker_diffInspect filesystem changes in a container
docker_eventsStream real-time events from the Docker daemon
docker_execExecute a command in a running container
docker_exportExport a container's filesystem as a tar archive
docker_inspectContainerGet detailed information about a container
docker_killSend a signal to a running container
docker_listContainersList Docker containers with status, ports, and resource info
docker_pausePause all processes in a running container
docker_portList port mappings for a container
docker_renameRename a Docker container
docker_restartRestart a container with an optional grace period
docker_rmRemove a container
docker_runCreate and start a container from an image
docker_startStart a stopped container
docker_statsShow live resource usage statistics for containers
docker_stopStop a running container
docker_topShow running processes in a container
docker_unpauseUnpause a paused container
docker_updateUpdate resource configuration of a running container
docker_waitBlock until a container stops and return its exit code
-
- -
-
3
-
-

Install and build the MCP server

-
- cd mcp-server && npm install && npm run build - -
+ + +
+ Content Trust 4 +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_trustInspectInspect Docker Content Trust data for an image
docker_trustKeyManage Content Trust signing keys
docker_trustRevokeRevoke Content Trust for an image
docker_trustSignSign an image for Content Trust
-
- -
-
4
-
-

Or install globally via npm

-
- npm install -g @tmhs/docker-mcp - -
+ + +
+ Context 6 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_contextCreateCreate a Docker context for remote hosts
docker_contextInspectDisplay detailed info on a Docker context
docker_contextLsList available Docker contexts
docker_contextRmRemove Docker contexts
docker_contextShowPrint the current Docker context name
docker_contextUseSet the active Docker context
+
+
+ +
+ Docker Compose 26 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_composeBuildBuild or rebuild Compose service images
docker_composeConfigValidate and render a Compose file
docker_composeCpCopy files between a Compose service and the local filesystem
docker_composeCreateCreate Compose service containers without starting them
docker_composeDownStop and remove Compose containers and networks
docker_composeEventsReceive real-time events from Compose containers
docker_composeExecExecute a command in a running Compose service container
docker_composeImagesList images used by Compose services
docker_composeKillForce stop Compose service containers
docker_composeLogsView logs for Compose services
docker_composeLsList running Compose projects
docker_composePausePause Compose services
docker_composePortPrint the public port for a Compose service
docker_composePsList containers for a Compose project
docker_composePullPull images for Compose services
docker_composeRestartRestart Compose services
docker_composeRmRemove stopped Compose service containers
docker_composeRunRun a one-off command on a Compose service
docker_composeScaleScale Compose services to a specified replica count
docker_composeStartStart existing Compose service containers
docker_composeStopStop Compose services without removing containers
docker_composeTopDisplay running processes in Compose containers
docker_composeUnpauseUnpause Compose services
docker_composeUpCreate and start Compose services
docker_composeVersionShow Docker Compose version information
docker_composeWatchWatch build context and auto-rebuild on file changes
+
+
+ +
+ Docker Scout 3 +
+ + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_scoutCvesList CVEs found in an image using Docker Scout
docker_scoutQuickviewQuick overview of image vulnerabilities
docker_scoutRecommendationsGet base image update recommendations
+
+
+ +
+ Image Management 13 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_commitCreate a new image from a container's changes
docker_buildBuild a Docker image from a Dockerfile
docker_imageHistoryShow the layer history of a Docker image
docker_imagePruneRemove unused Docker images
docker_importImport a tarball to create a Docker filesystem image
docker_inspectImageGet detailed image metadata including layers and labels
docker_listImagesList local Docker images with tags and sizes
docker_loadLoad images from a tar archive
docker_pullPull an image from a registry
docker_pushPush an image to a registry
docker_rmiRemove one or more images
docker_saveSave images to a tar archive
docker_tagCreate a tag for a source image
+
+
+ +
+ Manifest 5 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_manifestAnnotateAdd platform info to a manifest list entry
docker_manifestCreateCreate a local manifest list for multi-arch images
docker_manifestInspectDisplay an image manifest or manifest list
docker_manifestPushPush a manifest list to a registry
docker_manifestRmRemove local manifest lists
+
+
+ +
+ Network 7 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_listNetworksList Docker networks
docker_networkConnectConnect a container to a network
docker_networkCreateCreate a Docker network
docker_networkDisconnectDisconnect a container from a network
docker_networkInspectDisplay detailed information about a network
docker_networkPruneRemove all unused Docker networks
docker_networkRmRemove one or more Docker networks
+
+
+ +
+ Plugins 4 +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_pluginEnableEnable a disabled Docker plugin
docker_pluginInstallInstall a Docker plugin from a registry
docker_pluginLsList installed Docker plugins
docker_pluginRmRemove Docker plugins
+
+
+ +
+ Registry 3 +
+ + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_loginAuthenticate to a container registry
docker_logoutLog out from a container registry
docker_searchHubSearch Docker Hub for images
+
+
+ +
+ Swarm Cluster 8 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_swarmCaDisplay and rotate the Swarm root CA certificate
docker_swarmInitInitialize a new Swarm cluster
docker_swarmJoinJoin an existing Swarm
docker_swarmJoinTokenDisplay or rotate join tokens
docker_swarmLeaveLeave the Swarm
docker_swarmUnlockUnlock a locked Swarm manager
docker_swarmUnlockKeyDisplay or rotate the Swarm unlock key
docker_swarmUpdateUpdate Swarm configuration
+
+ +
+ Swarm Config & Secrets 8 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_configCreateCreate a Swarm config
docker_configInspectDisplay detailed info on a Swarm config
docker_configLsList Swarm configs
docker_configRmRemove Swarm configs
docker_secretCreateCreate a Swarm secret
docker_secretInspectDisplay info on a Swarm secret (metadata only)
docker_secretLsList Swarm secrets
docker_secretRmRemove Swarm secrets
+
+
+ +
+ Swarm Nodes 7 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_nodeDemoteDemote Swarm manager nodes to worker
docker_nodeInspectDisplay detailed info on a Swarm node
docker_nodeLsList nodes in the Swarm
docker_nodePromotePromote Swarm workers to manager
docker_nodePsList tasks running on a Swarm node
docker_nodeRmRemove nodes from the Swarm
docker_nodeUpdateUpdate metadata on a Swarm node
+
+
+ +
+ Swarm Services 9 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_serviceCreateCreate a new Swarm service
docker_serviceInspectDisplay detailed info on a Swarm service
docker_serviceLogsFetch logs from a Swarm service
docker_serviceLsList Swarm services
docker_servicePsList tasks of a Swarm service
docker_serviceRmRemove Swarm services
docker_serviceRollbackRevert a Swarm service to previous config
docker_serviceScaleScale Swarm services
docker_serviceUpdateUpdate a Swarm service
+
+
+ +
+ Swarm Stacks 6 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_stackConfigOutput merged config for a Swarm stack
docker_stackDeployDeploy or update a stack from a compose file
docker_stackLsList Swarm stacks
docker_stackPsList tasks in a Swarm stack
docker_stackRmRemove Swarm stacks
docker_stackServicesList services in a Swarm stack
+
+
+ +
+ System 4 +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_diskUsageGet Docker disk usage breakdown
docker_systemInfoGet Docker system information
docker_systemPruneRemove unused containers, networks, and images
docker_versionShow Docker version information
+
+
+ +
+ Volume 5 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
docker_listVolumesList Docker volumes with driver info
docker_volumeCreateCreate a named Docker volume
docker_volumeInspectDisplay detailed information about a volume
docker_volumePruneRemove all unused Docker volumes
docker_volumeRmRemove one or more Docker volumes
+
+
+ + +
+ + + + +
+
+

Installation

+
+
-
- -
- - -
-
-

Try It

-

Paste any of these into Cursor's AI chat to see the plugin in action.

-
-
-
Write a multi-stage Dockerfile for my Node.js API with a production build
-
-
-
Why is my docker-compose networking not working between services?
-
-
-
Audit my Dockerfile for security issues
-
-
-
How can I reduce my Docker image from 1.2GB to under 200MB?
+
+ Installation steps +
+
    + +
  1. Clone the repository
  2. + +
  3. Open the folder in Cursor IDE
  4. + +
  5. Install MCP server: cd mcp-server && npm install
  6. + +
  7. Configure MCP in your editor settings
  8. + +
  9. Start using the AI skills and rules
  10. + +
-
-
List all running containers and show which ones are using the most memory
-
-
-
Set up a development environment with PostgreSQL, Redis, and my app in compose
+
+
+ + + + +
+
+

Changelog

+
+
- -
- - -
-
-

Roadmap

-

What's shipped and what's coming next.

-
- -
-
-

v0.1.0 Released

-

Foundation - 12 skills, 6 rules, 10 read-only MCP tools.

-
- -
-
-

v0.2.0 Released

-

Container Lifecycle - 10 tools: run, create, start, stop, restart, kill, rm, pause, unpause, exec.

-
- -
-
-

v0.3.0 Released

-

Image and Build - 8 new tools: pull, push, build, tag, rmi, commit, save, load. Complete image pipeline from registry to archive.

-
- -
-
-

v0.4.0 Released

-

Compose - 8 tools: up, down, ps, logs, build, restart, pull, exec. Full Docker Compose V2 management. Published to npm.

-
- -
-
-

v0.5.0 Released

-

Volumes, Networks, Cleanup - 13 tools: volume/network CRUD, system/container/image prune. Infrastructure management.

-
- -
-
-

v0.6.0 Released

-

Advanced and Observability - 6 tools: cp, stats, top, events, update, wait. Live monitoring and file transfer.

-
- -
-
-

v0.7.0 Released

-

Buildx, Manifests, and Registry - 13 tools: buildx build/inspect/use, manifest create/inspect/annotate/push, builder prune.

-
- -
-
-

v0.8.0 Released

-

Compose Completeness - 16 tools: config, cp, create, events, images, kill, ls, pause/unpause, port, rm, run, scale, start, stop, top.

-
- -
-
-

v0.9.0 Released

-

Container/Image Gaps, Context, Auth - 14 tools: diff, export, port, rename, history, import, context management, registry login/logout.

-
- -
-
-

v0.10.0 Released

-

Swarm Orchestration - 24 tools: swarm init/join/leave, service CRUD and scaling, node management and promotion.

+
+ Recent changelog +
+ +
+ v1.0.0 + 2026-03-29 + +
Changed
+
    +
  • `errorResponse` now includes error type prefix, the Docker command that failed, and actionable fix suggestions
  • Each error class (DockerNotFound, DockerNotRunning, ContainerNotFound, ImageNotFound, VolumeNotFound, NetworkNotFound, PermissionDenied) returns a targeted suggestion pointing to the relevant MCP tool or fix
  • Added mermaid workflow diagrams to `docker-context-management`, `docker-image-signing`, and `docker-swarm` skills
  • New integration test (`tool-exports.test.ts`) verifies all 150 tool files export a `register` function
  • Fixed skill count (15 to 17) and rule count (9 to 10) in README.md
  • Fixed tool count (140 to 150) in mcp-server/README.md
  • GH Pages site overhaul: removed all emojis, replaced with SVG icons and CSS; added tool search/filter with `/` keyboard shortcut; added back-to-top button; added active nav highlighting via IntersectionObserver; fixed skills accordion (added 5 missing skills); added `swarm-security` rule card; fixed all timeline release tags; updated all counts and version references
  • +
+ +
+ +
+ v0.12.0 + 2026-03-29 + +
Added
+
    +
  • `docker_version` - show Docker client and server version information (JSON format)
  • `docker_composeVersion` - show Docker Compose version information (JSON format)
  • `docker_composeWatch` - watch build context for Compose services and auto-rebuild on file changes (120s timeout)
  • `docker_scoutQuickview` - quick overview of image vulnerabilities using Docker Scout (requires Docker Desktop, 120s timeout)
  • `docker_scoutCves` - list CVEs found in an image with optional severity and only-fixed filters (120s timeout)
  • `docker_scoutRecommendations` - get base image update recommendations using Docker Scout (120s timeout)
  • `docker_pluginLs` - list installed Docker plugins (JSON format)
  • `docker_pluginInstall` - install a Docker plugin from a registry (grant-all-permissions, alias, 120s timeout)
  • `docker_pluginRm` - remove one or more Docker plugins (force option)
  • `docker_pluginEnable` - enable a disabled Docker plugin
  • +
+ +
Added
+
    +
  • `docker_version` - show Docker client and server version information (JSON format)
  • `docker_composeVersion` - show Docker Compose version information (JSON format)
  • `docker_composeWatch` - watch build context for Compose services and auto-rebuild on file changes (120s timeout)
  • `docker_scoutQuickview` - quick overview of image vulnerabilities using Docker Scout (requires Docker Desktop, 120s timeout)
  • `docker_scoutCves` - list CVEs found in an image with optional severity and only-fixed filters (120s timeout)
  • `docker_scoutRecommendations` - get base image update recommendations using Docker Scout (120s timeout)
  • `docker_pluginLs` - list installed Docker plugins (JSON format)
  • `docker_pluginInstall` - install a Docker plugin from a registry (grant-all-permissions, alias, 120s timeout)
  • `docker_pluginRm` - remove one or more Docker plugins (force option)
  • `docker_pluginEnable` - enable a disabled Docker plugin
  • +
+ +
+ + View full changelog on GitHub →
- -
-
-

v0.11.0 Released

-

Swarm Stacks, Configs, Secrets, Trust - 18 tools: stack deploy, config/secret CRUD, Docker Content Trust.

+
+
+ + + + + + + + + + +