VSCode MCP Server

Uma extensão do VSCode que atua como um servidor MCP, fornecendo acesso a ferramentas de diagnóstico e gerenciamento de sessões de depuração.

Documentação

Servidor MCP do VSCode

Visão Geral

O Servidor MCP do VSCode é uma extensão do VSCode que atua como um servidor de Protocolo de Contexto de Modelo (MCP) integrado diretamente no VSCode. Seu objetivo principal é expor uma ferramenta de diagnóstico de codificação—nomeadamente, o code_checker—que agrega mensagens de diagnóstico (semelhantes às exibidas no painel de Problemas do VSCode) e as torna acessíveis a um assistente de IA externo via Eventos Enviados pelo Servidor (SSE). Isso permite que seu assistente invoque métodos MCP e recupere informações de diagnóstico oportunas do seu espaço de trabalho.

Recursos

  • Inicialização Automática: A extensão é ativada automaticamente na inicialização do VSCode (usando "activationEvents": ["*"] em package.json), garantindo que o servidor MCP esteja sempre em execução sem intervenção manual.

  • Integração com o Servidor MCP: Construído usando o SDK TypeScript do MCP (@modelcontextprotocol/sdk), a extensão instancia um servidor MCP que registra ferramentas de diagnóstico e lida com mensagens do protocolo MCP.

  • Ferramenta de Diagnóstico (code_checker): A ferramenta registrada code_checker coleta diagnósticos dos serviços de linguagem integrados do VSCode, filtrando arquivos sem erros. Quando invocada, retorna um objeto JSON formatado contendo informações de diagnóstico (apenas para arquivos com problemas).

  • Ferramenta de Foco no Editor (focus_editor): Abre um arquivo específico no editor do VSCode e navega para uma linha e coluna designadas. Útil para trazer arquivos para foco visual para o usuário, mas não inclui o conteúdo do arquivo no resultado da chamada da ferramenta.

  • Ferramenta de Busca de Símbolos (search_symbol): Busca símbolos no espaço de trabalho, usando principalmente "Ir para Definição", com fallback para busca de texto (semelhante a Ctrl+Shift+F). Pode opcionalmente abrir os resultados no editor usando a ferramenta focus_editor.

  • Ferramentas de Gerenciamento de Sessão de Depuração: A extensão fornece ferramentas para gerenciar sessões de depuração do VSCode diretamente usando MCP:

    • list_debug_sessions: Recupera todas as sessões de depuração ativas no espaço de trabalho.
    • start_debug_session: Inicia uma nova sessão de depuração com a configuração fornecida.
    • stop_debug_session: Interrompe sessões de depuração que correspondem a um nome de sessão específico.
    • restart_debug_session: Reinicia uma sessão de depuração interrompendo-a e iniciando-a com a configuração fornecida (novo!).
  • Comunicação SSE: Um servidor HTTP baseado em Express é executado em uma porta configurável (padrão: 6010) e lida dinamicamente com conflitos de porta. Ele expõe:

    • Um endpoint GET /sse para estabelecer uma conexão de longa duração de Eventos Enviados pelo Servidor (SSE). Se a porta padrão (6010) estiver indisponível, os usuários podem configurar uma nova através das configurações do VSCode (veja Configuração Dinâmica de Porta abaixo).
    • Um endpoint POST /messages para receber mensagens MCP de clientes externos (como seu assistente de IA). Cuidado especial é tomado para lidar adequadamente com o corpo da solicitação—graças à passagem do req.body já analisado para evitar erros relacionados a fluxos.
  • Registro Detalhado: Toda a atividade, incluindo inicialização do servidor, status da conexão SSE e eventos de manipulação de mensagens, é registrada em um canal de saída chamado "Servidor MCP do VSCode" para auxiliar na depuração e transparência.

Usando a Extensão do Claude Desktop (Cliente MCP)

Para usar o Servidor MCP do VSCode com o Claude Desktop, você precisa configurar o Claude Desktop para se conectar ao servidor MCP em execução no VSCode. Como a implementação do servidor MCP usa transporte SSE, e o Claude Desktop só suporta transporte stdio, você precisa usar um mcp-proxy para fazer a ponte de comunicação entre os dois.

  1. Instale o Proxy MCP:

    • Opção 1: Com uv (recomendado)

      uv tool install mcp-proxy
      
    • Opção 2: Com pipx (alternativa)

      pipx install mcp-proxy
      
  2. Configure o Claude Desktop:

    • Abra o Claude Desktop e navegue até a aba Arquivo > Configurações > Desenvolvedor.

    • Clique em Editar Config para abrir o arquivo de configuração, inicie seu editor desejado para modificar o conteúdo do arquivo de configuração.

    • Adicione uma nova entrada em mcpServers com os seguintes detalhes:

      {
          "mcpServers": {
              "vscode": {
                  "command": "mcp-proxy",
                  "args": ["http://127.0.0.1:6010/sse"]
              }
          }
      }
      
  3. Reinicie o Claude Desktop:

    • Você deve reiniciar o Claude Desktop para que as alterações tenham efeito usando a opção Arquivo > Sair.
    • NOTA: Isso é diferente de apenas fechar a janela ou usar Arquivo > Fechar, que deixa o aplicativo em execução em segundo plano.
    • Após sair e iniciar novamente, o Claude Desktop deve agora ser capaz de se conectar ao servidor MCP em execução no VSCode.

Gerenciamento do Servidor MCP

O status do Servidor MCP agora pode ser gerenciado diretamente da Paleta de Comandos:

  1. Parar Servidor MCP (mcpServer.stopServer): Interrompe o Servidor MCP atualmente em execução.
  2. Iniciar Servidor MCP (mcpServer.startServer): Inicia o servidor na porta configurada ou na próxima disponível.

Esses comandos ajudam a gerenciar o ciclo de vida do servidor dinamicamente, sem exigir reinicialização do VSCode.

Configuração Dinâmica de Porta

Se a porta já estiver em uso, a extensão sugerirá a próxima porta disponível e a aplicará dinamicamente. Os logs refletindo a porta selecionada podem ser encontrados no canal de saída Logs do Servidor MCP.

Os usuários podem configurar ou alterar a porta do Servidor MCP em tempo de execução usando a Paleta de Comandos:

  1. Abra a Paleta de Comandos (Ctrl+Shift+P ou Cmd+Shift+P no macOS).
  2. Procure por Set MCP Server Port.
  3. Digite o número de porta desejado na caixa de entrada e confirme.

O servidor será reiniciado dinamicamente na porta recém-selecionada, e a configuração será atualizada para sessões futuras.

A porta do servidor HTTP também pode ser definida através das configurações do VSCode:

  1. Abra as configurações do VSCode (File > Preferences > Settings ou Ctrl+,).
  2. Procure por mcpServer.port.
  3. Defina o número de porta desejado.
  4. Reinicie o VSCode para que as alterações tenham efeito.

Inicialização Automática do Servidor MCP

O Servidor MCP inicia automaticamente na ativação do VSCode por padrão. Para desativar este recurso:

  1. Abra as configurações do VSCode (File > Preferences > Settings ou Ctrl+,).
  2. Procure por mcpServer.startOnActivate.
  3. Alterne a configuração para false.

Isso pode ser útil se você preferir iniciar o servidor manualmente usando o comando Start MCP Server.

Desenvolvimento da Extensão

Etapas para desenvolver e depurar a extensão, código-fonte disponível no GitHub.

Pré-requisitos

  1. Clone o Repositório: Clone o repositório do Semantic Workbench para sua máquina local:

    git clone https://github.com/microsoft/semanticworkbench.git
    
  2. Navegue até o Diretório do Projeto:

    cd semanticworkbench/mcp-servers/mcp-server-vscode
    
  3. Instale as Dependências: Certifique-se de ter o Node.js (v16 ou superior) e o pnpm instalados. Em seguida, a partir do diretório do projeto, execute:

    pnpm install
    
  4. Empacote a Extensão: Para empacotar a extensão, execute:

    pnpm run package-extension
    

    Isso gerará um arquivo .vsix na raiz do projeto.

Instalando a Extensão Localmente

  1. Abra Sua Instância Principal do VSCode:

    Inicie seu VSCode principal (fora do Host de Desenvolvimento de Extensão).

  2. Instale o Pacote VSIX:

    • Pressione Ctrl+Shift+P (ou Cmd+Shift+P no macOS) para abrir a Paleta de Comandos.
    • Digite e selecione "Extensões: Instalar do VSIX...".
    • Navegue até e selecione o arquivo .vsix gerado.
  3. Recarregue e Verifique:

    Após a instalação, recarregue o VSCode (via "Desenvolvedor: Recarregar Janela" na Paleta de Comandos) e verifique se a extensão está ativa. Verifique o canal de saída "Logs do Servidor MCP" para ver logs confirmando que o servidor MCP foi iniciado e está ouvindo na porta configurada (padrão: 6010, ou a próxima disponível).

Depurando a Extensão

  1. Inicie a Depuração: Abra o projeto no VSCode e pressione F5 para iniciar o Host de Desenvolvimento de Extensão. Isso ativará automaticamente a extensão com base na configuração "activationEvents": ["*"].

  2. Operação do Servidor MCP: Na ativação, a extensão:

    • Inicia o servidor MCP que registra a ferramenta code_checker.
    • Configura um servidor HTTP Express na porta 6010 com:
      • GET /sse: Para estabelecer uma conexão SSE (clientes externos se conectam aqui).
      • POST /messages: Para processar mensagens de protocolo MCP recebidas.
    • Envia toda a atividade para o canal "Logs do Servidor MCP" (que será exibido automaticamente).

Instalando a Extensão Localmente

  1. Abra Sua Instância Principal do VSCode:

    Inicie seu VSCode principal (fora do Host de Desenvolvimento de Extensão).

  2. Instale o Pacote VSIX:

    • Pressione Ctrl+Shift+P (ou Cmd+Shift+P no macOS) para abrir a Paleta de Comandos.
    • Digite e selecione "Extensões: Instalar do VSIX...".
    • Navegue até e selecione o arquivo .vsix gerado.
  3. Recarregue e Verifique:

    Após a instalação, recarregue o VSCode (via "Desenvolvedor: Recarregar Janela" na Paleta de Comandos) e verifique se a extensão está ativa. Verifique o canal de saída "Logs do Servidor MCP" para ver logs confirmando que o servidor MCP foi iniciado e está ouvindo na porta 6010.

Testando o Servidor MCP

Você pode usar curl para testar o serviço:

Etapa 1: Estabeleça a Conexão SSE

Abra o Terminal 1 e execute:

curl -N http://127.0.0.1:6010/sse

Você deve ver uma saída semelhante a:

event: endpoint
data: /messages?sessionId=your-session-id

Etapa 2: Envie uma Solicitação de Inicialização

No Terminal 2, usando o ID de sessão obtido no Terminal 1 (se necessário), envie uma solicitação POST (inclua quaisquer campos necessários, como espaço de trabalho, se necessário):

curl -X POST "http://127.0.0.1:6010/messages?sessionId=your-session-id" \
-H "Content-Type: application/json" \
-d '{
  "jsonrpc": "2.0",
  "method": "initialize",
  "id": 0,
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "roots": { "listChanged": true }
    },
    "clientInfo": {
      "name": "mcp",
      "version": "0.1.0"
    },
    "workspace": {
      "folders": []
    }
  }
}'

Se tudo estiver configurado corretamente, o servidor MCP deve processar sua mensagem de inicialização sem erros.