# ✅ Developer Onboarding Checklist

> Follow this checklist to set up your development environment, verify all features, and ensure consistent onboarding across ContextForge project.

---

## 🐳 VS Code Dev Container (Recommended)

The fastest way to get started is using the VS Code Dev Container, which provides a fully-configured development environment.

???+ check "Prerequisites"

    - [ ] **VS Code** with the [Dev Containers extension](https://code.visualstudio.com/docs/devcontainers/containers)
    - [ ] **Docker** or **Podman** installed and running locally

???+ check "Setup"

    1. Clone and open the repository:
        ```bash
        git clone https://github.com/ibm/mcp-context-forge.git
        cd mcp-context-forge
        code .
        ```

    2. VS Code will detect `.devcontainer` and prompt: **"Reopen in Container"**
       (or manually: ++ctrl+shift+p++ → **Dev Containers: Reopen in Container**)

    3. First-time build automatically:

        - Installs system packages & Python 3.11
        - Runs `make install-dev` to pull all dependencies
        - Executes tests to verify the toolchain

???+ check "Daily workflow inside container"

    ```bash
    make dev            # Dev server with hot reload (http://localhost:4444)
    make test           # Run test suite
    make lint           # Run all linters
    ```

???+ check "GitHub Codespaces (1-click cloud IDE)"

    No local Docker? Use Codespaces:

    1. Go to the repo → **Code ▸ Codespaces ▸ Create codespace on main**
    2. Wait for the container image to build in the cloud
    3. Develop using the same workflow above

---

## 🛠 Manual Environment Setup

If not using Dev Containers, set up manually:

???+ check "System prerequisites"

    - [ ] Python ≥ 3.11
    - [ ] Node.js and npm, npx (used for testing with `supergateway` and the HTML/JS Admin UI)
    - [ ] Docker, Docker Compose, and Podman
    - [ ] Make, GitHub CLI (`gh`), `curl`, `jq`, `openssl`
    - [ ] Optional: Visual Studio Code + Pyrefly extension
    - [ ] Optional: On Windows, install the WSL and Remote Development extensions

???+ check "Python tooling"

    - [ ] `pip install --upgrade pip`
    - [ ] `uv` and `uvx` installed - [install uv](https://github.com/astral-sh/uv)
    - [ ] `.venv` recreated with `make install-dev` (installs runtime + dev extras)

???+ check "Additional tools"

    - [ ] `helm` installed for Kubernetes deployments ([Helm install docs](https://helm.sh/docs/intro/install/))
    - [ ] Security tools in `$PATH`: `hadolint`, `dockle`, `osv-scanner`

???+ check "Useful VS Code extensions"

    - [ ] Python, Pylance
    - [ ] YAML, Even Better TOML
    - [ ] Docker, Dev Containers (useful on Windows)

???+ check "GitHub setup"

    - [ ] GitHub email configured in `git config`
    - [ ] See [GitHub config guide](./github.md#16-personal-git-configuration-recommended)

???+ check ".env configuration"

    - [ ] Copy `.env.example` to `.env`
    - [ ] Set various env variables, such as:

        - `JWT_SECRET_KEY`
        - `BASIC_AUTH_PASSWORD`
---

## 🔧 Makefile Targets

???+ check "Local setup"

    - [ ] `make check-env` (validates .env is complete)
    - [ ] `make install-dev serve`
    - [ ] `make smoketest` runs and passes

???+ check "Container builds"

    - [ ] Docker: `make docker-prod docker-run-ssl-host compose-up`
    - [ ] Podman: `make podman podman-prod podman-run-ssl-host`

???+ check "Packaging"

    - [ ] `make dist verify` builds packages
    - [ ] `make devpi-install devpi-init devpi-start devpi-setup-user devpi-upload devpi-test`
    - [ ] Install and test `mcpgateway` CLI locally

???+ check "Minikube & Helm"

    - [ ] `make helm-install minikube-install minikube-start minikube-k8s-apply helm-package helm-deploy`
    - [ ] See [minikube deployment](../deployment/minikube.md)

---

## 🧪 Testing

???+ check "Code quality"

    - [ ] `make lint`, `make lint-web`
    - [ ] `make shell-linters-install`, `make shell-lint`
    - [ ] `make hadolint` (Dockerfile linting)

???+ check "Python unit tests"

    - [ ] `make test` passes all cases
    - [ ] `make coverage` generates coverage report

???+ check "UI automation (Playwright)"

    - [ ] `playwright install` (one-time browser setup)
    - [ ] `pytest tests/playwright/` passes
    - [ ] `pytest tests/playwright/ -k admin` validates Admin UI flows

???+ check "Load testing (Locust)"

    - [ ] `make testing-up` (containerized Locust + test services)
    - [ ] Or run Locust locally: `locust -f tests/loadtest/locustfile.py --host=http://localhost:4444`
    - [ ] Access dashboard at http://localhost:8089
    - [ ] Verify no errors under moderate load (50-100 users)

???+ check "Frontend linting"

    - [ ] `make eslint` - JavaScript linting
    - [ ] `make lint-web` - ESLint + HTMLHint + Stylelint
    - [ ] `make format-web` - Prettier formatting
    - [ ] Note: JS unit tests not yet implemented

---

## 🔐 Security

???+ check "Vulnerability scans"

    - [ ] Run:
        ```bash
        make hadolint dockle osv-scan security-scan pip-audit
        ```

???+ check "SonarQube analysis"

    - [ ] `make sonar-up-docker`
    - [ ] `make sonar-submit-docker` - ensure no critical violations

---

## 🔑 JWT Authentication

???+ check "Generate and use a Bearer token"

    - [ ] Export a token with:
        ```bash
        export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes)
        ```

    - [ ] Verify authenticated API access:
        ```bash
        curl -k -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" https://localhost:4444/version | jq
        ```

---

## 🤖 Client Integration

???+ check "Run wrapper and test transports"

    - [ ] Run: `python3 -m mcpgateway.wrapper` (stdio support)
    - [ ] Test transports:

        - Streamable HTTP
        - Server-Sent Events (SSE)

    - [ ] Optional: Integrate with Claude, Copilot, Continue ([usage guide](../using/index.md))

---

## 🧭 API Testing

???+ check "Authentication required"

    - [ ] Unauthenticated:
        ```bash
        curl http://localhost:4444/tools
        # -> should return 401 Unauthorized
        ```
    - [ ] Authenticated:
        ```bash
        curl -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/version | jq
        ```

???+ check "Endpoint coverage"

    - [ ] Confirm key routes:

        - `/version`
        - `/health`
        - `/tools`
        - `/servers`
        - `/resources`
        - `/prompts`
        - `/gateways`

    - [ ] Browse [Redoc docs](http://localhost:4444/redoc)

---

## 🖥 Admin UI

???+ check "Login and diagnostics"

    - [ ] Navigate to [`/admin`](http://localhost:4444/admin)
    - [ ] Log in with Basic Auth credentials from `.env`
    - [ ] `/version` shows healthy DB and Redis

???+ check "CRUD verification"

    - [ ] Create / edit / delete:

        - Servers
        - Tools
        - Resources
        - Prompts
        - Gateways

    - [ ] Toggle active/inactive switches
    - [ ] JWT stored in `HttpOnly` cookie, no errors in DevTools Console

???+ check "Metrics"

    - [ ] Confirm latency and error rate display under load

---

## 📚 Documentation

???+ check "Build and inspect docs"

    - [ ] `cd docs && make venv serve`
    - [ ] Open http://localhost:8000
    - [ ] Confirm:

        - `.pages` ordering
        - nav structure
        - working images
        - Mermaid diagrams

???+ check "Read and understand"

    - [ ] `README.md` in root
    - [ ] [Official docs site](https://ibm.github.io/mcp-context-forge/)
    - [ ] [MkDocs Admonitions guide](https://squidfunk.github.io/mkdocs-material/reference/admonitions/)

---

## ✅ Final Review

???+ check "Ready to contribute"

    - [ ] All items checked
    - [ ] PR description links to this checklist
    - [ ] Stuck? Open a [discussion](https://github.com/your-repo/discussions) or issue
