← todos os artigos

.NET

Roslyn MCP: dando às ferramentas de AI acesso semântico ao código .NET

O MCP pode conectar assistentes de AI às APIs de compilador do Roslyn, fornecendo acesso estruturado a símbolos C#, diagnósticos, referências e operações de refatoração, em vez de depender apenas do texto do código-fonte.

Assistentes de programação com AI podem ler arquivos C# como texto, mas o texto, por si só, não fornece todo o significado de uma solução .NET. O nome de um método pode aparecer em vários tipos, uma classe pode estar dividida entre declarações parciais, e a alteração de um símbolo público pode afetar projetos em toda a solução.

O Roslyn já entende essas relações. O MCP oferece uma forma padronizada de disponibilizar esse entendimento a ferramentas de AI.

O que é MCP?

O Model Context Protocol, ou MCP, é um padrão aberto para conectar aplicações de AI a sistemas externos. Um MCP server pode disponibilizar dados, prompts e ferramentas executáveis, enquanto um MCP client — como um editor ou assistente com recursos de AI — descobre e invoca esses recursos por meio de um protocolo definido. (modelcontextprotocol.io)

Essa separação é importante. O modelo de linguagem não precisa de código de integração personalizado para cada sistema externo. Ele pode perguntar a um MCP server quais ferramentas estão disponíveis, enviar parâmetros estruturados e receber resultados estruturados.

Para o desenvolvimento de software, um MCP server poderia fornecer operações como:

  • Encontrar a definição de um símbolo.
  • Retornar diagnósticos do compilador para um projeto.
  • Encontrar todas as referências a um método.
  • Renomear um tipo em toda uma solução.
  • Analisar dependências ou a complexidade do código.

O modelo ainda decide quando solicitar uma operação, mas a operação em si é executada por uma ferramenta especializada.

O que o Roslyn oferece ao .NET

O Roslyn é a plataforma de compiladores do .NET por trás dos compiladores C# e Visual Basic. Suas APIs expõem o modelo detalhado criado enquanto o compilador processa o código-fonte, incluindo árvores sintáticas, informações semânticas, símbolos, compilações, diagnósticos e workspaces. Essas APIs também oferecem suporte a recursos conhecidos das IDEs, como Find All References, Go to Definition, renomeação inteligente, analisadores, correções de código e refatorações. (learn.microsoft.com)

A distinção entre sintaxe e semântica é importante nesse contexto. A sintaxe descreve a estrutura do código-fonte. A análise semântica determina o que esse código significa — por exemplo, a qual método específico uma invocação se refere ou qual tipo um identificador representa. (learn.microsoft.com)

Um assistente de AI que lê arquivos pode inferir essas relações. O Roslyn pode calculá-las usando as mesmas regras de linguagem usadas pelo compilador.

Como o Roslyn e o MCP trabalham juntos

Um Roslyn MCP server atua como um adaptador entre um MCP client e as APIs do Roslyn. Ele carrega um projeto ou uma solução, disponibiliza operações selecionadas do Roslyn como ferramentas MCP e converte os resultados delas em responses que o client pode usar.

Uma interação simplificada poderia ser assim:

  1. O desenvolvedor pede ao assistente que renomeie UserService para AccountService.
  2. O assistente chama uma ferramenta de renomeação de um Roslyn MCP com o caminho da solução e as informações do símbolo.
  3. O Roslyn identifica o símbolo e suas referências em toda a solução.
  4. O server retorna uma visualização prévia ou aplica as alterações, dependendo da ferramenta e da configuração.

Isso é mais confiável do que uma sequência de substituições de texto porque referências de símbolos não são o mesmo que strings correspondentes. Comentários, métodos não relacionados, sobrecargas, namespaces, código gerado e limites entre projetos afetam a operação.

Benefícios práticos

O primeiro benefício é a melhor navegação pelo código. O Roslyn pode retornar definições de símbolos, implementações, chamadores, referências, hierarquias de tipos e estruturas de documentos sem exigir que o assistente pesquise manualmente todos os arquivos.

O segundo são os diagnósticos respaldados pelo compilador. Em vez de tentar adivinhar se o código gerado compila, um assistente pode solicitar erros e avisos reais do modelo do projeto.

O terceiro é a refatoração mais segura. Algumas implementações oferecem renomeação em toda a solução, alterações de namespace, extração de métodos, formatação e modos de visualização prévia. Visualizar um diff antes de gravar arquivos é particularmente útil quando um AI client pode invocar operações automaticamente. (github.com)

Por fim, o MCP cria uma fronteira reutilizável. A integração com o Roslyn permanece no server, enquanto diferentes clients compatíveis podem consumir o mesmo conjunto de ferramentas.

Implementações atuais do Roslyn MCP

Atualmente, Roslyn MCP descreve uma abordagem de integração implementada por diferentes projetos da comunidade, e não uma única ferramenta uniforme.

O RoslynMcpServer concentra-se em operações de refatoração, navegação, análise, geração e conversão de código. Suas ferramentas incluem rastreamento de referências em toda a solução e suporte à visualização prévia. (github.com)

O RoslynMCP fornece operações para pesquisas de símbolos com curingas, referências, informações de símbolos, análise de dependências e análise de complexidade. (github.com)

A Roslyn MCP Extension adota outra abordagem ao usar o workspace ativo do Visual Studio. Isso permite que ela trabalhe com o estado atual do editor, incluindo alterações não salvas, em vez de carregar apenas os arquivos armazenados em disco. (marketplace.visualstudio.com)

Também há uma discussão sobre o Roslyn em andamento a respeito de integrações de AI respaldadas pelo compilador. A discussão inclui um contraponto importante: o MCP não é a única camada de integração possível, pois ferramentas de desenvolvimento com AI também podem se comunicar com serviços de linguagem por meio do LSP. (github.com)

O que avaliar antes da adoção

Um Roslyn MCP server não torna automaticamente correta toda alteração gerada por AI. Seu valor depende das operações que ele disponibiliza, de como carrega o workspace, de as alterações poderem ou não ser visualizadas previamente e de como os erros e as permissões são tratados.

Também é necessário revisar ações destrutivas, especialmente refatorações e remoção de código morto. Reflection, injeção de dependência, serialização, XAML, geração de código-fonte e convenções de frameworks podem criar relações que a análise estática nem sempre identifica por completo.

Portanto, o valor prático do Roslyn MCP é específico: ele dá a um assistente de AI acesso a informações estruturadas e respaldadas pelo compilador sobre uma base de código .NET. Ele não substitui builds, testes, revisão de código nem o julgamento do desenvolvedor, mas pode oferecer uma base técnica mais sólida do que apenas o texto do código-fonte.

Referências