Thank you for your interest in contributing to Docker Developer Tools. This guide covers everything you need to get started.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/Docker-Developer-Tools.git cd Docker-Developer-Tools - Create a feature branch:
git checkout -b feature/your-feature-name
Symlink the repo to your Cursor plugins directory:
macOS/Linux:
ln -s "$(pwd)" ~/.cursor/plugins/docker-developer-toolsWindows (PowerShell as Admin):
New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.cursor\plugins\docker-developer-tools" -Target (Get-Location)cd mcp-server
npm install
npm run build
npm test
npm run dev # watch mode with tsxpip install -r requirements-test.txt
pytest tests/ -v --tb=shortDocker-Developer-Tools/
.cursor-plugin/
plugin.json # Plugin manifest
skills/
<skill-name>/
SKILL.md # One skill per directory
rules/
<rule-name>.mdc # Rule files
mcp-server/
src/
index.ts # MCP server entry point
tools/<tool-name>.ts # One file per MCP tool
utils/ # Shared helpers
- Create a new directory under
skills/with a kebab-case name - Create
SKILL.mdinside that directory - Use this template:
---
name: your-skill-name
description: One-line description of what this skill does.
---
# Your Skill Title
## Trigger
- When to activate this skill (bullet list)
## Required Inputs
- **Input name** - description of what's needed
## Workflow
1. Step-by-step workflow
2. Include code examples
3. Use practical, copy-pasteable code
## Key References
| Resource | URL |
|----------|-----|
| Docker Docs | https://docs.docker.com/relevant-page/ |
## Example Interaction
**User:** Example question a user might ask
**Agent:** Example response showing how the skill guides the answer
## MCP Usage
Describe which `docker_*` MCP tools this skill uses and how.
## Common Pitfalls
1. Common mistake and how to avoid it
2. Another common issue
## See Also
- Related Skill Name (use relative path: ../skill-name/SKILL.md)namein frontmatter must match the directory namedescriptionmust be at least 20 characters- Must include H1 heading
- Must include sections: Trigger, Required Inputs, Workflow, Example Interaction
- Must be at least 50 lines
- All relative links must resolve to existing files
- Create a
.mdcfile in therules/directory - Use this template:
Scoped rule (triggers on specific file patterns):
---
description: What this rule checks for.
alwaysApply: false
globs:
- "**/pattern*"
---
# Rule Title
## Patterns to Flag
- What to look for
## What to Do
- How to fix the flagged patterns
## Exceptions
- When the pattern is acceptableGlobal rule (always active):
---
description: What this rule checks for.
alwaysApply: true
---
# Rule Title
(body content)- Must have
descriptionandalwaysApplyin frontmatter - If
alwaysApply: false, must includeglobswith at least one pattern - Must include H1 heading
- Body must be at least 10 lines
- Create a new
.tsfile inmcp-server/src/tools/ - Follow this pattern:
import { z } from "zod";
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { execDocker, errorResponse } from "../utils/docker-api.js";
const inputSchema = {
paramName: z.string().min(1).describe("What this parameter does"),
};
export function register(server: McpServer): void {
server.tool(
"docker_toolName",
"What this tool does",
inputSchema,
async (args) => {
try {
const output = await execDocker(["command", "args"]);
const data = JSON.parse(output);
return {
content: [
{ type: "text" as const, text: JSON.stringify(data, null, 2) },
],
};
} catch (error) {
return errorResponse(error);
}
},
);
}- Register the tool in
src/index.ts - Add input validation tests in
src/tools/__tests__/input-validation.test.ts
- Ensure all tests pass:
cd mcp-server && npm run build && npm test pytest tests/ -v --tb=short
- Update
CHANGELOG.mdwith your changes - Fill out the PR template completely
- One approval required for merge
When cutting a new version, complete every step in order before merging to main:
- All MCP tools, skills, and rules listed for the milestone in
ROADMAP.mdare implemented - Input validation tests added for every new MCP tool (
input-validation.test.ts) - MCP server builds cleanly (
cd mcp-server && npm run build) - All Vitest tests pass (
cd mcp-server && npm test) - All pytest structure tests pass (
pytest tests/ -v --tb=short)
-
.cursor-plugin/plugin.json-versionfield and tool count indescription -
mcp-server/package.json-versionfield anddescription -
mcp-server/src/index.ts-versioninMcpServerconstructor -
README.md- version badge, tool count in tagline, tools table rows -
CLAUDE.md- version, tool count, tool tables, CLI quick reference table -
ROADMAP.md- mark new version(current), previous versionReleased, update Completed list
-
CHANGELOG.md- new version section with all Added/Changed/Fixed items and comparison link -
docs/index.html(GitHub Pages):- Meta description and
og:descriptiontool counts - Hero version pill
- Stats counter
data-targetfor MCP Tools - Tools table (add rows for new tools)
- Roadmap timeline (shift current marker, update planned items)
- Meta description and
- Re-run all tests after doc changes (some tests check docs consistency)
- Verify
docs/index.htmlrenders correctly in a browser
- Commit and push to
main - Create annotated tag:
git tag vX.Y.Z - Push tag:
git push origin vX.Y.Z - Create GitHub release:
gh release create vX.Y.Z --title "vX.Y.Z - Theme" --notes "..." - Update repo description:
gh repo edit --description "...new tool count..."
- No em dashes. Use regular dashes (-) or rewrite the sentence.
- No hardcoded credentials. Use environment variables or Docker secrets.
- Practical examples. Code should be copy-pasteable and realistic.
- Concise descriptions. No filler text.
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to uphold this code.