Scrum Board Server -- HUB CENTRALE

Panoramica

Il server scrum-board e' il cuore operativo dell'intera MCP Suite. Gestisce sprint, user story e task secondo la metodologia Scrum, fungendo da hub centrale attraverso il quale transitano la maggior parte dei flussi di lavoro collaborativi. Praticamente ogni altro server di project management interagisce con scrum-board, direttamente o tramite gli eventi che pubblica.

                        +---------------------------+
                        |     SCRUM-BOARD SERVER    |
                        |       HUB CENTRALE        |
                        +---------------------------+
                       /     |       |        |      \
                      /      |       |        |       \
                     v       v       v        v        v
              +-------+ +-------+ +------+ +-------+ +-------+
              |agile  | |time   | |retro | |standup| |project|
              |metrics| |track. | |mgr   | |notes  | |econ.  |
              +-------+ +-------+ +------+ +-------+ +-------+

  scrum:task-updated -----> [tutti i server sottoscritti]
  scrum:sprint-started ---> [agile-metrics, retro, standup]
  retro:action-item ------> [scrum-board riceve]

Il server e' il principale produttore di eventi della suite e uno dei pochi che sottoscrive eventi da altri server (riceve action item dalle retrospettive).

Versione: 0.1.0 Entry point: servers/scrum-board/src/index.ts Dipendenze: @mcp-suite/core, @mcp-suite/event-bus, @mcp-suite/database


Tabella dei Tool

[object Object],[object Object],[object Object] undefined

Dettaglio dei Tool

create-sprint

Crea un nuovo sprint nel database con stato iniziale planning. I goals sono memorizzati come array JSON.

{
  "tool": "create-sprint",
  "arguments": {
    "name": "Sprint 14 - Autenticazione",
    "startDate": "2025-02-03",
    "endDate": "2025-02-14",
    "goals": [
      "Implementare login OAuth",
      "Aggiungere 2FA",
      "Test di sicurezza"
    ]
  }
}

update-task-status

Aggiorna lo stato di un task attraverso il flusso Kanban:

  +-------+     +-------------+     +-----------+     +------+
  | todo  | --> | in_progress | --> | in_review | --> | done |
  +-------+     +-------------+     +-----------+     +------+
      |               |                   |
      +-------+-------+-------------------+
              |
              v
          +--------+
          | blocked|
          +--------+

Ogni cambio di stato pubblica l'evento scrum:task-updated che attiva reazioni a catena negli altri server.

sprint-board

Genera una vista Kanban completa dello sprint, organizzando i task in colonne:

+--------------------------------------------------------------------+
|                   Sprint Board: Sprint 14                          |
+--------------------------------------------------------------------+
| TODO          | IN PROGRESS   | IN REVIEW     | DONE    | BLOCKED  |
|---------------|---------------|---------------|---------|----------|
| Task: Setup   | Task: Login   | Task: Test    | Task:   | Task:    |
|   OAuth       |   form UI     |   OAuth flow  |  DB     |  Deploy  |
|               |               |               | schema  |  (needs  |
| Task: 2FA     | Task: Token   |               |         |  infra)  |
|   research    |   refresh     |               |         |          |
+--------------------------------------------------------------------+

Se non viene specificato sprintId, recupera automaticamente lo sprint con stato active.

get-backlog

Restituisce tutte le story con sprintId IS NULL, ordinate per priorita' e data di creazione. Rappresenta il product backlog non ancora pianificato.


Architettura

index.ts
  |
  +-- server.ts (createScrumBoardServer)
  |     |
  |     +-- crea ScrumStore
  |     +-- registra 7 tool
  |     +-- setupCollaborationHandlers(eventBus, store)
  |
  +-- services/
  |     +-- scrum-store.ts  --> ScrumStore (gestisce sprints, stories, tasks)
  |
  +-- tools/
  |     +-- create-sprint.ts
  |     +-- get-sprint.ts
  |     +-- create-story.ts
  |     +-- create-task.ts
  |     +-- update-task-status.ts
  |     +-- sprint-board.ts
  |     +-- get-backlog.ts
  |
  +-- collaboration.ts  --> gestori eventi cross-server

ScrumStore

Lo store gestisce tre tabelle SQLite interconnesse tramite foreign key:

+------------------+       +-------------------+       +------------------+
|     sprints      |       |      stories      |       |      tasks       |
+------------------+       +-------------------+       +------------------+
| id (PK)          |<------| sprintId (FK)     |       | id (PK)          |
| name             |       | id (PK)           |<------| storyId (FK, NN) |
| startDate        |       | title             |       | sprintId (FK)    |
| endDate          |       | description       |       | title            |
| goals (JSON)     |       | acceptanceCriteria|       | description      |
| status           |       | storyPoints       |       | status           |
| createdAt        |       | priority          |       | assignee         |
+------------------+       | status            |       | createdAt        |
                           | createdAt         |       | updatedAt        |
                           | updatedAt         |       +------------------+
                           +-------------------+

Schema delle tabelle:

[object Object],[object Object],[object Object],[object Object] undefined

Nota: quando viene creato un task, lo sprintId viene automaticamente derivato dalla story padre.


Integrazione Event Bus

Eventi pubblicati

[object Object],[object Object],[object Object] undefined

Eventi sottoscritti

[object Object],[object Object],[object Object] undefined

Flusso degli eventi

  scrum-board                    altri server
  -----------                    ------------

  create-sprint
       |
       +---> scrum:sprint-started ---> agile-metrics (nuova velocity)
                                  ---> retrospective-manager (trigger retro)
                                  ---> standup-notes (contestualizza report)

  update-task-status
       |
       +---> scrum:task-updated -----> agile-metrics (ricalcola burndown)
                                  ---> time-tracking (futuro: auto-timer)
                                  ---> standup-notes (auto-log attivita')
                                  ---> project-economics (traccia costi)

  [riceve] retro:action-item-created
       |
       +---> crea task nel backlog automaticamente

Interazioni con altri Server

Lo scrum-board e' il server con il maggior numero di interazioni:

[object Object],[object Object],[object Object] undefined

Esempi di Utilizzo

Workflow completo di uno sprint

// 1. Creare lo sprint
{ "tool": "create-sprint", "arguments": { "name": "Sprint 14", "startDate": "2025-02-03", "endDate": "2025-02-14", "goals": ["Feature login"] } }

// 2. Creare una story
{ "tool": "create-story", "arguments": { "title": "Login OAuth Google", "description": "Come utente voglio...", "acceptanceCriteria": ["Redirect a Google", "Token salvato", "Sessione attiva"], "storyPoints": 8, "priority": "high", "sprintId": 1 } }

// 3. Creare task per la story
{ "tool": "create-task", "arguments": { "title": "Configurare OAuth credentials", "description": "Setup su Google Cloud Console", "storyId": 1, "assignee": "mario" } }

// 4. Aggiornare lo stato
{ "tool": "update-task-status", "arguments": { "taskId": 1, "status": "in_progress" } }

// 5. Visualizzare la board
{ "tool": "sprint-board", "arguments": { "sprintId": 1 } }

// 6. Consultare il backlog
{ "tool": "get-backlog", "arguments": {} }

Sviluppi Futuri

  • Sprint planning automatico: suggerire story dal backlog basandosi sulla velocity storica calcolata da agile-metrics
  • Notifiche di blocco: quando un task passa a blocked, notificare automaticamente il team tramite standup-notes
  • Velocity tracking integrato: calcolare automaticamente la velocity di ogni sprint al momento della chiusura
  • Dipendenze tra task: supportare relazioni blocks/blocked-by tra task
  • Assegnazione intelligente: suggerire l'assignee basandosi sul carico di lavoro corrente tracciato da time-tracking
  • Burndown automatico: generare dati di burndown in tempo reale ad ogni cambio stato task
  • Integrazione GitHub/GitLab: collegare task a pull request e branch