Thanks for your interest in contributing. This document outlines the process for contributing code, docs, and other improvements.
- Fork the repository and clone it locally.
- Install dependencies with
uv sync. - Copy
.env.exampleto.envand configure it for local development. - Run tests with
uv run pytestto make sure everything works.
# Create a branch for your changes
git checkout -b feature/my-change
# Make changes and run tests
uv run pytest
# Lint your code
uv run ruff check src/ tests/
# Format your code
uv run ruff format src/ tests/# Streamable HTTP mode (full OAuth)
uv run kestra-mcp
# stdio mode (local IDE integration)
KESTRA_MCP_TRANSPORT=stdio uv run kestra-mcp- Python 3.11+ with type hints on public APIs.
- Format with ruff, line length 100.
- Tests with pytest and pytest-asyncio.
- Follow the existing project structure:
src/auth/,src/client/,src/tools/. - Deny-by-default authorization — every tool handler checks permissions.
- Ensure tests pass and new features include test coverage.
- Update the README if your change affects user-facing behavior.
- Use a descriptive PR title and fill out the PR template.
- All contributions are licensed under Apache 2.0 (see LICENSE).
Open an issue using the Bug Report template. Include:
- Steps to reproduce
- Expected vs actual behavior
- Environment details (Python version, OS, Kestra version, OIDC provider)
- Relevant logs or error messages
Open an issue using the Feature Request template. Describe:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
See SECURITY.md for our security policy and how to report vulnerabilities.
All contributors must follow our Code of Conduct.