|
1 | 1 | <p align="center"> |
2 | 2 | <img width="372" src="internal/httpapi/web/githublogo.png" alt="scrumboy logo" /> |
3 | 3 | <br /> |
4 | | - <img src="https://img.shields.io/badge/version-v3.11.2-blue" alt="version" /> |
| 4 | + <img src="https://img.shields.io/badge/version-v3.11.3-blue" alt="version" /> |
5 | 5 | <a href="LICENSE"> |
6 | 6 | <img src="https://img.shields.io/badge/license-AGPL--v3-orange" alt="license" /> |
7 | 7 | </a> |
|
22 | 22 | - [Encryption key (optional)](#encryption-key-optional) |
23 | 23 | - [OIDC / SSO login (optional)](#oidc--sso-login-optional) |
24 | 24 | - [TLS / HTTPS (optional)](#tls--https-optional) |
| 25 | + - [PWA / Web Push (optional)](#pwa--web-push-optional) |
25 | 26 | - [Frontend build note](#frontend-build-note) |
26 | 27 | - [Why Scrumboy?](#why-scrumboy) |
27 | 28 | - [Who is this for?](#who-is-this-for) |
@@ -109,6 +110,10 @@ See [`docs/oidc.md`](docs/oidc.md) for full setup details, constraints, and trou |
109 | 110 | - HTTPS is enabled only when both `SCRUMBOY_TLS_CERT` and `SCRUMBOY_TLS_KEY` files exist. |
110 | 111 | - Otherwise, the server runs on HTTP by default. |
111 | 112 |
|
| 113 | +### PWA / Web Push (optional) |
| 114 | + |
| 115 | +Install the app from the browser for a standalone window and better mobile UX. **Background assignment alerts** use the **Web Push API** with **VAPID** keys on the server. When both keys are set, signed-in clients attempt to subscribe automatically (browser permission may be prompted). Details and subscriber contact semantics: **[`docs/pwa.md`](docs/pwa.md)**. |
| 116 | + |
112 | 117 | ### Frontend build note |
113 | 118 |
|
114 | 119 | The Docker image and `go run` embed prebuilt assets under `internal/httpapi/web/dist`. If they are missing, build them: |
@@ -167,7 +172,7 @@ Simplicity of a light Kanban, with the power of structured systems: Roles, sprin |
167 | 172 |
|
168 | 173 | ## Integrations & API Access |
169 | 174 |
|
170 | | -Scrumboy supports API access tokens for automation, integrations, and programmatic MCP access (legacy HTTP and JSON-RPC — see below). |
| 175 | +Scrumboy supports API access tokens for automation, integrations, and programmatic MCP access (legacy HTTP and JSON-RPC — see below). Full MCP guide for developers and agents: [`docs/mcp.md`](docs/mcp.md). |
171 | 176 |
|
172 | 177 | You can create a token from the API and use it to call MCP endpoints directly — no browser session or cookies required. |
173 | 178 |
|
@@ -197,7 +202,7 @@ Scrumboy exposes a **Model Context Protocol (MCP) compatible JSON-RPC endpoint** |
197 | 202 |
|
198 | 203 | **Endpoint:** `POST /mcp/rpc` |
199 | 204 |
|
200 | | -This is separate from the `/mcp` HTTP endpoint above and follows **JSON-RPC 2.0** (`initialize`, `tools/list`, `tools/call`, etc.). See [`API.md`](API.md) for full detail. |
| 205 | +This is separate from the `/mcp` HTTP endpoint above and follows **JSON-RPC 2.0** (`initialize`, `tools/list`, `tools/call`, etc.). See **[`docs/mcp.md`](docs/mcp.md)** for tools, auth, response shapes, and examples; **[`API.md`](API.md)** for the full HTTP/MCP behavior reference. |
201 | 206 |
|
202 | 207 | #### Example: `initialize` |
203 | 208 |
|
@@ -288,9 +293,9 @@ None of these are required for basic startup. |
288 | 293 | | `SCRUMBOY_TLS_CERT` | `./cert.pem` - TLS cert for HTTPS | |
289 | 294 | | `SCRUMBOY_TLS_KEY` | `./key.pem` - TLS key for HTTPS | |
290 | 295 | | `SCRUMBOY_INTRANET_IP` | `192.168.1.250` - LAN IP to log for intranet access | |
291 | | -| `SCRUMBOY_VAPID_PUBLIC_KEY` | (empty) - **Web Push.** VAPID public key (URL-safe base64). Required together with private key for PWA background assignment notifications. | |
| 296 | +| `SCRUMBOY_VAPID_PUBLIC_KEY` | (empty) - **Web Push.** VAPID public key (URL-safe base64). Required together with private key for PWA background assignment notifications and for post-login auto-subscribe in the SPA. | |
292 | 297 | | `SCRUMBOY_VAPID_PRIVATE_KEY` | (empty) - VAPID private key (URL-safe base64). | |
293 | | -| `SCRUMBOY_VAPID_SUBSCRIBER` | (empty) - Contact URL for VAPID `sub` claim (e.g. `mailto:ops@example.com`). Defaults to `mailto:scrumboy@localhost` if unset. | |
| 298 | +| `SCRUMBOY_VAPID_SUBSCRIBER` | (empty) - Contact for VAPID JWT `sub` (not tied to IdP). Use a **plain email** (e.g. `ops@example.com`); the server adds `mailto:`. Or set a full `mailto:...` or `https://...` URL explicitly. If unset, a built-in default is used. | |
294 | 299 | | `SCRUMBOY_DEBUG_PUSH` | (empty) - Set to `1` to log push send/prune on the server. | |
295 | 300 |
|
296 | 301 | `docker-compose.yml` overrides some of these (e.g. `SQLITE_BUSY_TIMEOUT_MS=5000`). |
@@ -369,6 +374,8 @@ Invariants (e.g. canonical URL `/{slug}`, no UI links to `/p/{id}`) are enforced |
369 | 374 |
|
370 | 375 | # Documentation |
371 | 376 |
|
| 377 | +- **MCP (HTTP tools + JSON-RPC):** [`docs/mcp.md`](docs/mcp.md) — tool catalog, auth, legacy vs `/mcp/rpc`, examples (agents & automation). See also [`API.md`](API.md) for exhaustive MCP HTTP detail. |
| 378 | +- **PWA / Web Push (VAPID):** [`docs/pwa.md`](docs/pwa.md) - keys, subscriber contact, post-login auto-subscribe when VAPID is configured, Settings opt-out, tradeoffs. |
372 | 379 | - **Roles and permissions:** `docs/ROLES_AND_PERMISSIONS.md` - project roles, backend authorization, anonymous boards. |
373 | 380 | - **Audit trail:** `docs/AUDIT_TRAIL.md` - action vocabulary, event model, integration points. |
374 | 381 |
|
|
0 commit comments