Thank you for your interest in contributing! Here is everything you need to get started.
- Fork the repository and create a branch from
main. - Make your changes, following the conventions described below.
- Open a pull request against
main.
# Build
go build
# Run all tests
go test -v ./...
# Format code
go fmt ./...
# Tidy dependencies
go mod tidyAll commits and PR titles must follow Conventional Commits:
feat(scope): short description
fix(scope): short description
chore(scope): short description
PRs are squash-merged, so the PR title becomes the commit message on main. Keep it concise and accurate.
Follow the architecture described in CLAUDE.md:
- Command groups mirror the tag groups in
open-api.yaml. - Each group lives in
cmd/<group>/with its own Go package. - Write a failing test in
tests/before implementing. - Use
cmd.Printlnfor output (neverfmt), and respect--verbose.
- Register the tool in the appropriate
cmd/mcp/tools_<group>.gofile. - Use
apiToolErrorfor Seerr API call failures so error details are visible to the client. - Add a test in
tests/mcp_serve_test.gousinghttptest.
pkg/api/ is auto-generated from open-api.yaml via ./generate-api-lib.sh (requires Docker). Do not edit it manually — fix the spec instead and regenerate.
-
go test ./...passes -
go fmt ./...has been run - New commands or tools have a test in
tests/ - PR title follows Conventional Commits