Skip to main content
Glama
DEVELOPMENT.it.md11.5 kB
# Guida allo Sviluppo Questa guida copre la configurazione di un ambiente di sviluppo, la compilazione del progetto, il contributo al codice e la comprensione dell'architettura di Spec Workflow MCP. ## Prerequisiti ### Software Richiesto - **Node.js** 18.0 o superiore - **npm** 9.0 o superiore - **Git** per il controllo versione - **TypeScript** conoscenza utile ### Strumenti Consigliati - **VSCode** con estensioni TypeScript - **Chrome/Edge DevTools** per debug dashboard - **Postman/Insomnia** per test API ## Configurazione Ambiente di Sviluppo ### 1. Clona il Repository ```bash git clone https://github.com/Pimzino/spec-workflow-mcp.git cd spec-workflow-mcp ``` ### 2. Installa le Dipendenze ```bash npm install ``` Questo installa: - MCP SDK - TypeScript e strumenti di build - Express per server dashboard - Librerie WebSocket - Framework di testing ### 3. Compila il Progetto ```bash npm run build ``` Questo compila i file TypeScript in JavaScript nella directory `dist/`. ## Comandi di Sviluppo ### Comandi Principali | Comando | Descrizione | |---------|-------------| | `npm run dev` | Avvia in modalità sviluppo con auto-reload | | `npm run build` | Compila bundle produzione | | `npm start` | Esegui server produzione | | `npm test` | Esegui suite di test | | `npm run clean` | Rimuovi artefatti build | | `npm run lint` | Esegui linter codice | | `npm run format` | Formatta codice con Prettier | ### Modalità Sviluppo ```bash npm run dev ``` Funzionalità: - Auto-ricompilazione su modifiche file - Hot reload per dashboard - Messaggi errore dettagliati - Source map per debugging ### Compilazione per Produzione ```bash npm run clean && npm run build ``` Ottimizzazioni: - JavaScript minificato - Dimensione bundle ottimizzata - Gestione errori produzione - Miglioramenti prestazioni ## Struttura del Progetto ``` spec-workflow-mcp/ ├── src/ # Codice sorgente │ ├── index.ts # Entry point server MCP │ ├── server.ts # Server dashboard │ ├── tools/ # Implementazioni strumenti MCP │ ├── prompts/ # Template prompt │ ├── utils/ # Funzioni utilità │ └── types/ # Definizioni tipi TypeScript ├── dist/ # JavaScript compilato ├── dashboard/ # File dashboard web │ ├── index.html # UI dashboard │ ├── styles.css # Stili dashboard │ └── script.js # JavaScript dashboard ├── vscode-extension/ # Estensione VSCode │ ├── src/ # Sorgente estensione │ └── package.json # Manifest estensione ├── tests/ # File di test ├── docs/ # Documentazione └── package.json # Configurazione progetto ``` ## Panoramica Architettura ### Architettura Server MCP ``` Client (AI) ↔ Protocollo MCP ↔ Server ↔ File System ↓ Dashboard ``` ### Componenti Chiave #### 1. Server MCP (`src/index.ts`) - Gestisce comunicazione protocollo MCP - Elabora richieste strumenti - Gestisce stato progetto - Operazioni file system #### 2. Server Dashboard (`src/server.ts`) - Serve dashboard web - Connessioni WebSocket - Aggiornamenti in tempo reale - Endpoint API HTTP #### 3. Strumenti (`src/tools/`) Ogni strumento è un modulo separato: - Validazione input - Logica business - Operazioni file - Formattazione risposta #### 4. Prompt (`src/prompts/`) Stringhe template per: - Generazione documenti - Guida workflow - Messaggi errore - Istruzioni utente ## Implementazione Nuove Funzionalità ### Aggiungere un Nuovo Strumento 1. **Crea file strumento** in `src/tools/`: ```typescript // src/tools/my-new-tool.ts import { Tool } from '@anthropic/mcp-sdk'; export const myNewTool: Tool = { name: 'my-new-tool', description: 'Descrizione di cosa fa lo strumento', parameters: { type: 'object', properties: { param1: { type: 'string', description: 'Descrizione parametro' }, param2: { type: 'number', optional: true } }, required: ['param1'] }, handler: async (params) => { // Implementazione strumento const { param1, param2 = 0 } = params; // Logica business qui return { success: true, data: 'Risposta strumento' }; } }; ``` 2. **Registra in index** (`src/tools/index.ts`): ```typescript export { myNewTool } from './my-new-tool'; ``` 3. **Aggiungi al server** (`src/index.ts`): ```typescript import { myNewTool } from './tools'; server.registerTool(myNewTool); ``` ### Aggiungere Funzionalità Dashboard 1. **Aggiorna HTML** (`dashboard/index.html`): ```html <div class="new-feature"> <h3>Nuova Funzionalità</h3> <button id="new-action">Azione</button> </div> ``` 2. **Aggiungi JavaScript** (`dashboard/script.js`): ```javascript document.getElementById('new-action').addEventListener('click', () => { // Logica funzionalità ws.send(JSON.stringify({ type: 'new-action', data: { /* ... */ } })); }); ``` 3. **Gestisci nel server** (`src/server.ts`): ```typescript ws.on('message', (message) => { const { type, data } = JSON.parse(message); if (type === 'new-action') { // Gestisci nuova azione } }); ``` ## Testing ### Esecuzione Test ```bash # Esegui tutti i test npm test # Esegui file test specifico npm test -- src/tools/my-tool.test.ts # Esegui con coverage npm run test:coverage # Modalità watch npm run test:watch ``` ### Scrittura Test Crea file di test accanto ai file sorgente: ```typescript // src/tools/my-tool.test.ts import { describe, it, expect } from 'vitest'; import { myTool } from './my-tool'; describe('myTool', () => { it('dovrebbe elaborare input correttamente', async () => { const result = await myTool.handler({ param1: 'test' }); expect(result.success).toBe(true); expect(result.data).toContain('atteso'); }); it('dovrebbe gestire errori', async () => { const result = await myTool.handler({ param1: null }); expect(result.success).toBe(false); expect(result.error).toBeDefined(); }); }); ``` ### Test di Integrazione Testa workflow completi: ```typescript // tests/integration/workflow.test.ts describe('Workflow Completo', () => { it('dovrebbe creare spec dall\'inizio alla fine', async () => { // Crea requisiti // Approva requisiti // Crea design // Approva design // Crea task // Verifica struttura }); }); ``` ## Debugging ### Debug Server MCP 1. **Aggiungi output debug**: ```typescript console.error('[DEBUG]', 'Strumento chiamato:', toolName, params); ``` 2. **Usa debugger VSCode**: ```json // .vscode/launch.json { "type": "node", "request": "launch", "name": "Debug MCP Server", "program": "${workspaceFolder}/dist/index.js", "args": ["/path/to/test/project"], "console": "integratedTerminal" } ``` ### Debug Dashboard 1. **DevTools Browser**: - Apri dashboard nel browser - Premi F12 per DevTools - Controlla Console per errori - Monitora tab Network per WebSocket 2. **Aggiungi logging**: ```javascript console.log('Messaggio WebSocket:', message); console.log('Aggiornamento stato:', newState); ``` ## Stile Codice e Standard ### Linee Guida TypeScript - Usa modalità strict - Definisci interfacce per strutture dati - Evita tipo `any` - Usa async/await invece di callback ### Organizzazione File - Un componente per file - Raggruppa funzionalità correlate - Convenzioni di naming chiare - Commenti completi ### Convenzioni Naming - **File**: kebab-case (`my-tool.ts`) - **Classi**: PascalCase (`SpecManager`) - **Funzioni**: camelCase (`createSpec`) - **Costanti**: UPPER_SNAKE (`MAX_RETRIES`) ## Contribuire ### Processo di Contribuzione 1. **Fork repository** 2. **Crea branch feature**: ```bash git checkout -b feature/my-feature ``` 3. **Fai modifiche** 4. **Scrivi test** 5. **Esegui test e lint**: ```bash npm test npm run lint ``` 6. **Commit modifiche**: ```bash git commit -m "feat: aggiungi nuova funzionalità" ``` 7. **Push branch**: ```bash git push origin feature/my-feature ``` 8. **Crea Pull Request** ### Formato Messaggio Commit Segui conventional commits: - `feat:` Nuova funzionalità - `fix:` Correzione bug - `docs:` Documentazione - `style:` Formattazione - `refactor:` Ristrutturazione codice - `test:` Testing - `chore:` Manutenzione Esempi: ``` feat: aggiungi workflow revisione approvazione fix: risolvi problema riconnessione WebSocket dashboard docs: aggiorna guida configurazione ``` ### Linee Guida Pull Request - Descrizione chiara - Riferimento issue correlati - Includi screenshot per modifiche UI - Assicurati che tutti i test passino - Aggiorna documentazione ## Pubblicazione ### Pacchetto NPM 1. **Aggiorna versione**: ```bash npm version patch|minor|major ``` 2. **Compila pacchetto**: ```bash npm run build ``` 3. **Pubblica**: ```bash npm publish ``` ### Estensione VSCode 1. **Aggiorna versione estensione** in `vscode-extension/package.json` 2. **Compila estensione**: ```bash cd vscode-extension npm run package ``` 3. **Pubblica su marketplace**: ```bash vsce publish ``` ## Ottimizzazione Prestazioni ### Prestazioni Server - Usa caching per letture file - Implementa debouncing per watcher file - Ottimizza batching messaggi WebSocket - Carica documenti grandi in modo lazy ### Prestazioni Dashboard - Minimizza aggiornamenti DOM - Usa scrolling virtuale per liste lunghe - Implementa rendering progressivo - Ottimizza riconnessione WebSocket ## Considerazioni Sicurezza ### Validazione Input Valida sempre input strumenti: ```typescript if (!params.specName || typeof params.specName !== 'string') { throw new Error('Nome spec non valido'); } // Sanitizza percorsi file const safePath = path.normalize(params.path); if (safePath.includes('..')) { throw new Error('Percorso non valido'); } ``` ### Sicurezza File System - Limita operazioni alla directory progetto - Valida tutti i percorsi file - Usa operazioni file sicure - Implementa controlli permessi ## Risoluzione Problemi Sviluppo ### Errori Build Comuni | Errore | Soluzione | |-------|----------| | Errori TypeScript | Esegui `npm run build` per vedere errori dettagliati | | Modulo non trovato | Controlla import ed esegui `npm install` | | Porta già in uso | Cambia porta o termina processo esistente | | Connessione WebSocket fallita | Verifica che server sia in esecuzione e porta corretta | ### Suggerimenti Sviluppo 1. **Usa modalità strict TypeScript** per migliore sicurezza tipi 2. **Abilita source map** per debugging più facile 3. **Usa nodemon** per auto-restart durante sviluppo 4. **Testa operazioni file** in directory isolata 5. **Monitora prestazioni** con Chrome DevTools ## Risorse - [Documentazione MCP SDK](https://github.com/anthropics/mcp-sdk) - [Manuale TypeScript](https://www.typescriptlang.org/docs/) - [Best Practice Node.js](https://github.com/goldbergyoni/nodebestpractices) - [API Estensione VSCode](https://code.visualstudio.com/api) ## Documentazione Correlata - [Guida Configurazione](CONFIGURATION.it.md) - Configurazione server - [Guida Utente](USER-GUIDE.it.md) - Usare il server - [Riferimento Strumenti](TOOLS-REFERENCE.it.md) - Documentazione strumenti - [Risoluzione Problemi](TROUBLESHOOTING.it.md) - Problemi comuni

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pimzino/spec-workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server