← tutti gli articoli

.NET

Roslyn MCP: offrire agli strumenti di AI un accesso semantico al codice .NET

MCP può collegare gli assistenti AI alle API del compilatore di Roslyn, offrendo un accesso strutturato a simboli C#, diagnostica, riferimenti e operazioni di refactoring, anziché basarsi esclusivamente sul testo del codice sorgente.

Gli assistenti AI per la programmazione possono leggere i file C# come testo, ma il testo da solo non fornisce il significato completo di una soluzione .NET. Il nome di un metodo può comparire in diversi tipi, una classe può essere suddivisa tra più dichiarazioni partial e la modifica di un simbolo pubblico può influire sui progetti dell'intera soluzione.

Roslyn comprende già queste relazioni. MCP offre un modo standard per rendere questa comprensione accessibile agli strumenti di AI.

Che cos'è MCP?

Model Context Protocol, o MCP, è uno standard aperto per collegare le applicazioni AI a sistemi esterni. Un server MCP può esporre dati, prompt e strumenti eseguibili, mentre un client MCP, come un editor o un assistente dotato di funzionalità AI, individua e richiama tali funzionalità tramite un protocollo definito. (modelcontextprotocol.io)

Questa separazione è importante. Il modello linguistico non necessita di codice di integrazione personalizzato per ogni sistema esterno. Può chiedere a un server MCP quali strumenti sono disponibili, inviare parametri strutturati e ricevere risultati strutturati.

Per lo sviluppo software, un server MCP potrebbe fornire operazioni quali:

  • Trovare la definizione di un simbolo.
  • Restituire la diagnostica del compilatore per un progetto.
  • Trovare ogni riferimento a un metodo.
  • Rinominare un tipo in un'intera soluzione.
  • Analizzare le dipendenze o la complessità del codice.

Il modello decide comunque quando richiedere un'operazione, ma l'operazione stessa viene eseguita da uno strumento specializzato.

Che cosa offre Roslyn a .NET

Roslyn è la piattaforma di compilazione .NET alla base dei compilatori C# e Visual Basic. Le sue API espongono il modello dettagliato creato durante l'elaborazione del codice sorgente da parte del compilatore, inclusi alberi sintattici, informazioni semantiche, simboli, compilazioni, diagnostica e workspace. Queste API supportano anche funzionalità familiari degli IDE, come Find All References, Go to Definition, la ridenominazione intelligente, gli analyzer, le correzioni del codice e i refactoring. (learn.microsoft.com)

La distinzione tra sintassi e semantica è importante in questo contesto. La sintassi descrive la struttura del codice sorgente. L'analisi semantica determina che cosa significa quel codice, ad esempio a quale metodo specifico fa riferimento una chiamata o quale tipo rappresenta un identificatore. (learn.microsoft.com)

Un assistente AI che legge i file può dedurre queste relazioni. Roslyn può calcolarle utilizzando le stesse regole del linguaggio usate dal compilatore.

Come collaborano Roslyn e MCP

Un server MCP per Roslyn funge da adattatore tra un client MCP e le API di Roslyn. Carica un progetto o una soluzione, espone operazioni Roslyn selezionate come strumenti MCP e converte i relativi risultati in response utilizzabili dal client.

Un'interazione semplificata potrebbe svolgersi così:

  1. Lo sviluppatore chiede all'assistente di rinominare UserService in AccountService.
  2. L'assistente chiama uno strumento MCP di Roslyn per la ridenominazione, passando il percorso della soluzione e le informazioni sul simbolo.
  3. Roslyn identifica il simbolo e i relativi riferimenti nell'intera soluzione.
  4. Il server restituisce un'anteprima o applica le modifiche, a seconda dello strumento e della configurazione.

Questo approccio è più affidabile di una sequenza di sostituzioni testuali, perché i riferimenti ai simboli non equivalgono alle stringhe corrispondenti. Commenti, metodi non correlati, overload, namespace, codice generato e confini tra progetti influiscono tutti sull'operazione.

Vantaggi pratici

Il primo vantaggio è una migliore navigazione del codice. Roslyn può restituire definizioni di simboli, implementazioni, chiamanti, riferimenti, gerarchie di tipi e strutture dei documenti senza che l'assistente debba cercare manualmente in ogni file.

Il secondo è una diagnostica supportata dal compilatore. Invece di tentare di indovinare se il codice generato viene compilato, un assistente può richiedere errori e avvisi effettivi dal modello del progetto.

Il terzo è un refactoring più sicuro. Alcune implementazioni offrono ridenominazione a livello di soluzione, modifiche dei namespace, estrazione di metodi, formattazione e modalità di anteprima. Visualizzare l'anteprima di un diff prima di scrivere i file è particolarmente utile quando un client AI può richiamare automaticamente le operazioni. (github.com)

Infine, MCP crea un confine riutilizzabile. L'integrazione con Roslyn rimane nel server, mentre diversi client compatibili possono utilizzare lo stesso insieme di strumenti.

Implementazioni attuali di Roslyn MCP

Attualmente, Roslyn MCP indica un approccio di integrazione implementato da diversi progetti della community, non un singolo strumento uniforme.

RoslynMcpServer si concentra su operazioni di refactoring, navigazione, analisi, generazione e conversione del codice. I suoi strumenti includono il tracciamento dei riferimenti nell'intera soluzione e il supporto per le anteprime. (github.com)

RoslynMCP fornisce operazioni per ricerche di simboli con caratteri jolly, riferimenti, informazioni sui simboli, analisi delle dipendenze e analisi della complessità. (github.com)

La Roslyn MCP Extension adotta un altro approccio, utilizzando il workspace live di Visual Studio. Questo le consente di operare sullo stato corrente dell'editor, incluse le modifiche non salvate, anziché caricare soltanto i file archiviati su disco. (marketplace.visualstudio.com)

È inoltre in corso una discussione su Roslyn riguardo alle integrazioni AI supportate dal compilatore. La discussione include un'importante osservazione contraria: MCP non è l'unico livello di integrazione possibile, perché gli strumenti di sviluppo AI possono comunicare con i servizi del linguaggio anche tramite LSP. (github.com)

Che cosa valutare prima dell'adozione

Un server MCP per Roslyn non rende automaticamente corretta ogni modifica generata dall'AI. Il suo valore dipende dalle operazioni che espone, dal modo in cui carica il workspace, dalla possibilità di visualizzare un'anteprima delle modifiche e da come vengono gestiti errori e autorizzazioni.

È inoltre necessario esaminare le azioni distruttive, in particolare i refactoring e la rimozione di codice inutilizzato. Reflection, dependency injection, serializzazione, XAML, generazione del codice e convenzioni dei framework possono creare relazioni che l'analisi statica non sempre identifica completamente.

Il valore pratico di Roslyn MCP è quindi specifico: offre a un assistente AI l'accesso a informazioni strutturate e supportate dal compilatore su una codebase .NET. Non sostituisce build, test, code review o il giudizio dello sviluppatore, ma può fornire una base tecnica più solida rispetto al solo testo del codice sorgente.

Riferimenti