Contributing to Coolify MCP
July 30, 2026 · View on GitHub
Thanks for your interest in contributing! This document covers how the project maintains itself and how you can help.
Project Maintenance
This project is designed to be low-maintenance while staying secure and up-to-date.
Automated Security & Dependencies
Dependabot runs daily to keep dependencies secure:
- Patch/Minor updates → Auto-merged after CI passes
- Major updates → PR created with review checklist, requires manual approval
- GitHub Actions → Weekly updates on Mondays
Configuration: .github/dependabot.yml
API Drift Detection
Weekly OpenAPI Drift Check monitors Coolify's API for changes:
- Runs every Monday at 7am UK time
- Compares upstream's
openapi.yamlagainst the copy vendored atdocs/coolify-openapi.yaml - Opens (or comments on) a GitHub issue labelled
api-driftwhen they differ - Resolution is to re-vendor the spec and run
npm run build:chunks
The vendored spec is the baseline — the workflow keeps no separate copy. It is read-only and cannot write to the repo.
The comparison is byte-exact rather than semantic, which is a deliberate trade: a reworded description or a version bump upstream will open an issue with no real API change behind it. Since the action either way is "re-vendor and look at the diff", a false positive costs a glance; a false negative costs a missed endpoint.
This ensures we know when Coolify adds/removes/changes endpoints so we can update our tools accordingly.
Dependabot patch and minor updates merge themselves once CI passes — the
workflow approves and enables auto-merge, so they reach main without a human
reading them. Major updates stop for review. If you would rather review every
bump, delete .github/workflows/dependabot-auto-merge.yml.
Configuration: .github/workflows/openapi-drift.yml
Branch Protection
The main branch is protected:
- All CI checks must pass (Node 20.x, 22.x, 24.x)
- Admin bypass enabled for maintainers
- No force pushes (except admins)
CI Pipeline
Every PR runs:
- Security audit -
npm audit - Format check - Prettier
- Lint - ESLint
- Build - TypeScript compilation
- Test - Jest with coverage
How to Contribute
Reporting Issues
- Bugs: Open an issue with reproduction steps
- Feature requests: Open an issue describing the use case
- API drift: Check existing
api-driftissues before reporting
Making Changes
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes
- Run tests:
npm test - Run lint:
npm run lint - Commit with conventional commits:
feat:,fix:,chore:, etc. - Open a PR against
main
Adding New Tools
When Coolify adds new API endpoints:
- Check the Coolify OpenAPI spec
- Add the client method in
src/lib/coolify-client.ts - Add the MCP tool in
src/lib/mcp-server.ts - Add tests in
src/__tests__/ - Update tool count in README.md and CLAUDE.md
- Add changelog entry
Code Style
- TypeScript strict mode
- Prettier for formatting
- ESLint for linting
- Conventional commits
Architecture Overview
src/
├── index.ts # Entry point
├── lib/
│ ├── coolify-client.ts # HTTP client for Coolify API
│ └── mcp-server.ts # MCP server with tool definitions
├── types/
│ └── coolify.ts # TypeScript types
└── __tests__/ # Jest tests
Key Patterns
- Summary mode: List operations return minimal fields to reduce token usage
- Smart lookup: Diagnostic tools accept name/domain/IP, not just UUIDs
- Context-optimized: Responses are trimmed to essential fields
- Batch operations: Use
Promise.allSettledfor partial failure handling
Release Process
- Update version in
package.json - Update
VERSIONconstant insrc/lib/mcp-server.ts - Add changelog entry
- Merge to main
- GitHub Actions auto-publishes to npm on version bump
Questions?
- Open a GitHub Issue
- Check the Coolify Community