Contributing to Iris

May 5, 2026 · View on GitHub

Thank you for your interest in contributing to Iris. We welcome contributions that improve the project for everyone.

Contributor License Agreement

By submitting a pull request, you agree to our Contributor License Agreement. This is required before any contribution can be reviewed or merged. The CLA ensures that the project can be maintained, distributed, and — if necessary — relicensed in the future.

AI-Generated Code

You are welcome to use AI tools (Copilot, Claude, etc.) to assist with your contributions. However, by submitting a PR, you represent that you have reviewed all code for correctness and security, and that you accept full responsibility for the contribution under the CLA — regardless of how it was generated.

Security

If you discover a security vulnerability, do not open a public issue. Please email security@iris-eval.com instead. See SECURITY.md for details.

Development Setup

git clone https://github.com/iris-eval/mcp-server.git
cd mcp-server
npm install

Commands

CommandDescription
npm run devStart dev server with tsx
npm run buildBuild TypeScript
npm run typecheckType check without emitting
npm testRun unit tests
npm run test:integrationRun integration tests
npm run test:coverageRun tests with coverage
npm run lintLint source code
npm run formatFormat with Prettier

Dashboard Development

cd dashboard
npm install
npm run dev    # Starts Vite dev server with HMR

The dev server proxies API requests to http://localhost:6920.

PR Process

  1. Fork the repo and create a feature branch
  2. Make your changes
  3. Ensure all tests pass: npm test && npm run test:integration
  4. Ensure code is formatted: npm run format:check
  5. Submit a PR against main with a clear description of changes

What to expect after you open a PR

  • CI must pass. Required checks: lint-and-typecheck, test (Node 20), test (Node 22), integration, build, e2e, lighthouse, analyze (CodeQL), Vercel. Branch protection blocks merge until every check is green.
  • One CODEOWNER approval is required (see .github/CODEOWNERS). Direct pushes to main are forbidden — every change goes through the PR cycle, no exceptions, including hotfixes.
  • Squash-merge is the default. Your branch is deleted automatically on merge; the squash commit message is what lands in main history, so write the PR title carefully.
  • Conventional Commits for the PR title: fix(scope):, feat(scope):, chore(scope):, docs(scope):, test(scope):. Scope examples: claims, security, website, dashboard, cors, tests.

Coding Standards

  • TypeScript strict mode
  • ESM modules (no CommonJS)
  • Vitest for testing
  • Write to stderr for logging (stdout reserved for stdio transport)
  • Serialize complex objects as JSON in SQLite columns
  • Use Zod schemas for MCP tool input validation