Thank you for your interest in contributing to Dockyard! This document helps you get started.
- Code of Conduct
- Reporting Security Vulnerabilities
- Ways to Contribute
- Adding an MCP Server
- Adding an Agent Skill
- Development Setup
- Pull Request Process
- Commit Message Guidelines
This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to code-of-conduct@stacklok.dev.
If you think you have found a security vulnerability in Dockyard, please DO NOT disclose it publicly until we've had a chance to fix it. Please don't report security vulnerabilities using GitHub issues; instead, follow the process in SECURITY.MD.
The most common contribution is adding a new MCP server to Dockyard. See Adding an MCP Server below.
You can also vendor an agent skill (your own, or a third-party one) as a Dockyard skill artifact. See Adding an Agent Skill below.
Use GitHub Issues to report bugs. Please include:
- Steps to reproduce the issue
- Expected vs actual behavior
- Container image name and version (if applicable)
We welcome feature suggestions! Open an issue describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
Documentation improvements are always welcome. See the docs/ directory.
To add your MCP server to Dockyard:
- Create a directory:
{protocol}/{server-name}/ - Add a
spec.yamlconfiguration file - Submit a pull request
Full guide: Adding MCP Servers
Quick example:
metadata:
name: my-server
description: "What my server does"
protocol: npx
spec:
package: "@my-org/mcp-server"
version: "1.0.0"To add an agent skill to Dockyard:
- Create a directory:
skills/{skill-name}/ - Add a
spec.yamlconfiguration file pointing at the skill's source repo, pinned commit, and path - Run
task validate-skill -- skills/{skill-name}andtask scan-skill -- skills/{skill-name}locally, triaging any security findings into the allowlist - Submit a pull request
Full guide: Adding Skills
Quick example:
metadata:
name: my-skill
description: "What my skill does"
spec:
repository: "https://github.com/my-org/my-skill-repo"
ref: "abc1234..." # pinned commit SHA
path: "skills/my-skill" # omit if SKILL.md is at repo root
version: "0.1.0"- Go 1.21+
- Docker or Podman
- Task (optional, for convenience)
go build -o build/dockhand ./cmd/dockhandgo test ./..../build/dockhand build -c npx/context7/spec.yaml./build/dockhand verify-provenance -c npx/context7/spec.yaml -v- Fork and clone the repository
- Create a branch for your changes
- Make your changes with clear, focused commits
- Test locally:
- If adding an MCP server:
task build -- {protocol}/{server-name} task scan -- {protocol}/{server-name} - If adding an agent skill:
task validate-skill -- skills/{skill-name} task scan-skill -- skills/{skill-name}
- If adding an MCP server:
- Submit a PR with a clear description
- All commits must include a Signed-off-by trailer (DCO)
- CI checks must pass (security scan, build, etc.)
- One approval from a maintainer is required
Include in your PR description:
- What the MCP server does
- Link to the package registry (npm/PyPI)
- Link to the source repository
Include in your PR description:
- What the skill does
- Link to the source repository and the pinned commit
- The license permitting redistribution and where it is declared upstream
- A brief note on any
security.allowed_issuesentries you added and why
Follow Chris Beams' guidelines:
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Use the body to explain what and why vs. how
Example:
Add context7 MCP server
Add packaging for context7 v1.0.14 from Upstash.
This server provides vector search and context management.
Package: https://www.npmjs.com/package/@upstash/context7-mcp
Repository: https://github.com/upstash/context7-mcp
Signed-off-by: Your Name <your.email@example.com>
- Open a GitHub Discussion
- Join the Stacklok Discord