Agile Metrics Server

Panoramica

Il server agile-metrics fornisce strumenti analitici per misurare e prevedere le prestazioni di un team agile. Calcola velocity, genera dati di burndown, analizza cycle time e produce previsioni di completamento basate su simulazioni Monte Carlo.

Il server e' stateless: non possiede database ne' store interno. Riceve dati come input dai tool (tipicamente provenienti dallo scrum-board) e restituisce calcoli puri. Sottoscrive eventi per reagire a cambiamenti nello sprint in corso.

+------------------------------------------------------------------------+
|                     agile-metrics server                               |
|                                                                        |
|  +-------------------+ +------------------+ +------------------------+ |
|  |calculate-velocity | |generate-burndown | |calculate-cycle-time    | |
|  |                   | |                  | |                        | |
|  | - media punti     | | - ideale vs      | | - average, median      | |
|  | - trend analysis  | |   attuale        | | - p95, min, max        | |
|  | - per sprint      | | - stato sprint   | |                        | |
|  +-------------------+ +------------------+ +------------------------+ |
|                                                                        |
|  +-------------------------------------------------------------------+ |
|  |                  forecast-completion                              | |
|  |  1000 simulazioni Monte Carlo --> p50, p85, p95                   | |
|  +-------------------------------------------------------------------+ |
|                                                                        |
|  Sottoscrive: scrum:sprint-completed, scrum:task-updated,              |
|               scrum:story-completed                                    |
+------------------------------------------------------------------------+

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


Tabella dei Tool

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

Dettaglio dei Tool

calculate-velocity

Calcola la velocity media (punti completati per sprint) e analizza il trend:

  Sprint 10: 21 punti     ______
  Sprint 11: 25 punti    /      \
  Sprint 12: 23 punti   /   TREND \   Media: 23.8
  Sprint 13: 27 punti  /   +2.0    \  Trend: crescente (+2.0/sprint)
  Sprint 14: 23 punti /     punti   \
                      \_____________/

Output:

{
  "averageVelocity": 23.8,
  "velocities": [21, 25, 23, 27, 23],
  "trend": {
    "direction": "increasing",
    "changePerSprint": 2.0
  },
  "sprintCount": 5
}

generate-burndown

Genera i dati per un grafico burndown confrontando la linea ideale con l'avanzamento reale:

  Punti
  40 |*
     | *  .
  30 |  *   .
     |   *     .    * <-- attuale (in ritardo)
  20 |    *       .
     |     *         .    *
  10 |      *           .     *
     |       *              .    *
   0 |--------*------------------.--*-----> Giorni
     1  2  3  4  5  6  7  8  9 10

     * = linea ideale     . = avanzamento reale

Output: array di oggetti { day, ideal, actual, status } dove status e' on-track, behind o ahead.

calculate-cycle-time

Analizza i tempi di completamento dei task e produce statistiche dettagliate:

[object Object],[object Object] undefined
{
  "tool": "calculate-cycle-time",
  "arguments": {
    "tasks": [
      { "taskId": "T-1", "startDate": "2025-02-03", "endDate": "2025-02-05" },
      { "taskId": "T-2", "startDate": "2025-02-03", "endDate": "2025-02-07" },
      { "taskId": "T-3", "startDate": "2025-02-04", "endDate": "2025-02-06" },
      { "taskId": "T-4", "startDate": "2025-02-05", "endDate": "2025-02-12" }
    ]
  }
}

Risultato: { average: 3.75 days, median: 3.0, p95: 7.0, min: 2, max: 7 }

forecast-completion

Esegue 1000 simulazioni Monte Carlo per prevedere quando il lavoro rimanente sara' completato, considerando la variabilita' storica della velocity.

  Algoritmo Monte Carlo:
  +-------------------------------------------------------+
  | Per ogni simulazione (1..1000):                       |
  |   remainingWork = remainingPoints                     |
  |   sprints = 0                                         |
  |   while remainingWork > 0:                            |
  |     velocity = random(velocityHistory)                |
  |     remainingWork -= velocity                         |
  |     sprints++                                         |
  |   record(sprints * sprintLengthDays)                  |
  +-------------------------------------------------------+
  | Ordina risultati                                      |
  | p50 = risultato al 50-esimo percentile                |
  | p85 = risultato all'85-esimo percentile               |
  | p95 = risultato al 95-esimo percentile                |
  +-------------------------------------------------------+

Output:

{
  "remainingPoints": 50,
  "simulations": 1000,
  "forecast": {
    "p50": { "sprints": 2, "days": 28, "date": "2025-03-14" },
    "p85": { "sprints": 3, "days": 42, "date": "2025-03-28" },
    "p95": { "sprints": 3, "days": 42, "date": "2025-03-28" }
  },
  "confidence": "Con l'85% di probabilita', completamento entro 42 giorni"
}

Architettura

index.ts
  |
  +-- server.ts (createAgileMetricsServer)
  |     |
  |     +-- registra 4 tool
  |     +-- setupCollaborationHandlers(eventBus)
  |
  +-- tools/
  |     +-- calculate-velocity.ts
  |     +-- generate-burndown.ts
  |     +-- calculate-cycle-time.ts
  |     +-- forecast-completion.ts
  |
  +-- collaboration.ts  --> gestori eventi sottoscritti

Il server non possiede store. Tutti i calcoli sono funzioni pure che ricevono dati in input e restituiscono risultati. I dati provengono tipicamente dal client MCP che li ottiene dallo scrum-board.


Integrazione Event Bus

Eventi pubblicati

Nessuno. Il server e' un puro consumatore di dati.

Eventi sottoscritti

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

Interazioni con altri Server

+------------------+     scrum:sprint-completed     +------------------+
| scrum-board      | -----------------------------> | agile-metrics    |
|                  |     scrum:task-updated         |                  |
|                  | -----------------------------> |                  |
|                  |     scrum:story-completed      |                  |
|                  | -----------------------------> |                  |
+------------------+                                +------------------+
                                                           |
                                                           v
                                                    Calcoli puri
                                                    (velocity, burndown,
                                                     cycle time, forecast)
  • scrum-board (input principale): fornisce tutti i dati su sprint, story e task
  • project-economics (output futuro): le previsioni di completamento potrebbero alimentare le proiezioni di budget

Esempi di Utilizzo

Calcolare la velocity degli ultimi sprint

{
  "tool": "calculate-velocity",
  "arguments": {
    "sprints": [
      { "name": "Sprint 10", "completedPoints": 21, "totalPoints": 25 },
      { "name": "Sprint 11", "completedPoints": 25, "totalPoints": 28 },
      { "name": "Sprint 12", "completedPoints": 23, "totalPoints": 26 },
      { "name": "Sprint 13", "completedPoints": 27, "totalPoints": 30 }
    ]
  }
}

Previsione Monte Carlo

{
  "tool": "forecast-completion",
  "arguments": {
    "remainingPoints": 50,
    "velocityHistory": [21, 25, 23, 27, 23],
    "sprintLengthDays": 14
  }
}

Sviluppi Futuri

  • Dashboard real-time: aggiornamento automatico delle metriche ad ogni evento ricevuto
  • Throughput analysis: metriche di throughput (item completati per settimana)
  • Lead time vs cycle time: distinzione tra tempo totale e tempo di lavorazione
  • Cumulative flow diagram: dati per generare un CFD interattivo
  • Confronto tra sprint: visualizzare l'evoluzione delle metriche tra sprint
  • Alert automatici: notificare quando la velocity cala sotto la media storica
  • Export dati: esportare metriche in formato CSV per analisi esterne