OpenCode e LSP: o que o Language Server Protocol agrega ao agente?

Se você cruzou o termo "opencode lsp" na documentação e ficou na dúvida, aqui vai o resumo: o OpenCode é o agente de código open source da SST pro terminal, e ele integra servidores LSP (Language Server Protocol) pra devolver ao modelo diagnósticos, tipos e análise de código de verdade. Na prática, o agente para de chutar e passa a corrigir com base nos erros reais que o language server aponta. Você liga com lsp: true no config, os servidores sobem sob demanda e o download é automático no primeiro uso 🙂
Você abriu a documentação do OpenCode, viu a sigla LSP e pensou: que raio é isso e por que o agente precisa disso?
Calma que eu te conto
LSP é o Language Server Protocol, o mesmo protocolo que faz o seu editor sublinhar de vermelho o erro, mostrar o tipo quando você passa o mouse e pular direto pra definição de uma função
O OpenCode, que é o agente de IA de código open source da SST feito pro terminal, integra esses servidores LSP e usa a saída deles como feedback pro LLM na hora de editar arquivo
Se liga na ideia central: o LSP é a ponte entre a inteligência que o editor já tem e o modelo que está escrevendo o código pra você
O que o LSP entrega ao agente
Quando o OpenCode conecta num servidor LSP, ele ganha acesso ao mesmo tipo de inteligência de código que a sua IDE usa
Se você conhece o autocomplete e o "ir pra definição" do VS Code, é exatamente essa camada que entra em jogo aqui
As capacidades que o LSP entrega pro agente são:
- Diagnósticos (diagnostics): os erros e avisos que o language server encontra no arquivo, tipo variável não usada, tipo errado, import quebrado
- Hover / informação de tipos: o tipo de uma variável ou a assinatura de uma função, aquilo que apareceria ao passar o mouse
- Busca de símbolos (symbol lookups): localizar onde está definido um símbolo (função, classe, constante) no projeto
- Ir para definição (go-to-definition): saltar da chamada pro lugar exato onde a coisa foi declarada
- Encontrar referências (find references): todos os pontos que usam aquele símbolo
- Hierarquia de chamadas (call hierarchy): quem chama quem, o mapa de quem depende de quem
Cada uma dessas dá contexto real pro modelo
Em vez de o LLM adivinhar o tipo de um retorno ou onde uma função vive, ele consulta o language server e recebe a resposta certa
É a diferença entre editar às cegas e editar enxergando o código como o editor enxerga
Por que isso melhora a assistência do OpenCode
Aqui está o pulo do gato
O mecanismo é simples: ao editar um arquivo, o OpenCode consulta o servidor LSP, pega os diagnósticos e devolve isso pro LLM
Ou seja, o modelo escreve uma mudança, o language server analisa e diz "ó, aqui tem um erro de tipo", e essa informação volta pro modelo corrigir
O agente passa a corrigir com base em erro real apontado pelo language server, não só em suposição do que ele acha que deveria funcionar
E a comunicação por baixo? É via JSON-RPC sobre stdio (entrada/saída padrão)
"Que JSON-RPC?" É só o formato de mensagem que o cliente do OpenCode e o servidor LSP usam pra trocar figurinhas: um pergunta, o outro responde, tudo pela entrada e saída padrão do processo
Você não precisa mexer nisso, mas é bom saber que é esse trilho que carrega os diagnósticos de um lado pro outro
O resultado prático é um agente menos "vibe coder no chute" e mais colado na realidade do seu projeto
Como habilitar o LSP no OpenCode
A boa notícia é que dá pra ligar com pouca coisa
O LSP no OpenCode é controlado pela seção lsp do config, e o comportamento depende do que você coloca ali
- Abra o config do OpenCode e adicione a seção
lsp. Se você omitir essa configuração, o LSP fica desligado por padrão, então precisa declarar
- Ligue todos os servidores built-in com
lsp: true. Esse é o caminho mais direto pra deixar tudo habilitado de uma vez:
{
"lsp": true
}
O erro comum aqui é esperar que o LSP já venha ligado de fábrica: se você não colocou a seção, ele estava desabilitado o tempo todo
- Deixe os servidores subirem sozinhos. O OpenCode não sobe um servidor LSP até você acessar um arquivo que precise dele: a inicialização é lazy, disparada quando ele detecta a extensão suportada do arquivo aberto
- Não se assuste com o download no primeiro uso. O OpenCode baixa e configura os servidores LSP automaticamente na primeira vez, então pode ter uma pausa inicial enquanto ele prepara a casa
- Precisa desligar o download automático? Use a variável de ambiente. Dá pra desativar o download/configuração automática assim:
OPENCODE_DISABLE_LSP_DOWNLOAD=true
Útil em ambiente controlado onde você não quer que a ferramenta busque nada por conta própria
OpenCode na prática (vídeo)
Pra quem quer ver o agente rodando de verdade antes de mexer no config, deixo aqui um material do canal com o OpenCode em funcionamento no terminal
Conclusão
No fim das contas, o LSP é o que transforma o OpenCode num agente que enxerga o código como o seu editor enxerga
Diagnósticos, tipos, referências e definições deixam de ser palpite e viram informação vinda direto do language server, devolvida pro modelo na hora de editar
O próximo passo é curtíssimo: ligar lsp: true no config e abrir um arquivo do seu projeto pra ver o servidor subir sozinho
Aí é só deixar o agente corrigir com base no que o código realmente diz 😀
Perguntas frequentes
O LSP já vem habilitado por padrão no OpenCode ou preciso configurar?
Não vem ligado por padrão, não. Se você omitir a seção lsp do config, o LSP fica desabilitado, e muita gente fica quebrando a cabeça sem entender por que o agente não enxerga o language server. Basta declarar lsp: true pra ligar todos os servidores built-in de uma vez.
Como o OpenCode e o servidor LSP trocam mensagens por baixo dos panos?
A comunicação é via JSON-RPC sobre stdio, ou seja, entrada e saída padrão do processo. O cliente do OpenCode manda a pergunta pro servidor LSP e recebe a resposta por esse mesmo canal. Você não configura nada disso na mão, é o trilho interno que carrega os diagnósticos de um lado pro outro.
Preciso instalar os servidores LSP manualmente pra usar no OpenCode?
Não, o OpenCode baixa e configura os servidores automaticamente no primeiro uso. Pode ter uma pausa inicial enquanto ele prepara tudo, mas não tem instalação manual envolvida. Se quiser desabilitar esse comportamento, a variável de ambiente OPENCODE_DISABLE_LSP_DOWNLOAD resolve.
O servidor LSP sobe junto com o OpenCode ou espera ser necessário?
Ele sobe de forma lazy, sob demanda mesmo. O OpenCode não inicializa o servidor LSP até você acessar um arquivo cuja extensão seja suportada por aquele servidor. Isso mantém o consumo de recursos em zero pra linguagens que você não está usando na sessão.
Que tipo de inteligência de código o LSP entrega pro agente do OpenCode?
Bastante coisa: diagnósticos, hover com informação de tipos, busca de símbolos, ir para definição, encontrar referências e hierarquia de chamadas. Na prática o modelo para de adivinhar o tipo de um retorno ou onde uma função vive e passa a consultar o language server pra receber a resposta certa.
O OpenCode é gratuito e de código aberto?
Sim, é um projeto open source mantido pela SST, com repositório em sst/opencode e site em opencode.ai. Sendo open source, você pode checar o código, contribuir ou adaptar pra sua necessidade sem custo de licença.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 473 aulas
- 20 projetos
- 39h 26min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]