/ Diretório / Playground / mcp-language-server
● Comunidade isaacphi ⚡ Instantâneo

mcp-language-server

por isaacphi · isaacphi/mcp-language-server

Dê ao seu agente semântica LSP real — go-to-definition, references, rename, diagnostics — através de qualquer language server stdio.

isaacphi/mcp-language-server é um binário Go que conecta MCP a qualquer LSP stdio (gopls, rust-analyzer, pyright, typescript-language-server, clangd). Agentes obtêm operações precisas em símbolos em vez de aproximações de busca textual.

Por que usar

Principais recursos

Demo ao vivo

Como fica na prática

language-server.replay ▶ pronto
0/0

Instalar

Escolha seu cliente

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Abra Claude Desktop → Settings → Developer → Edit Config. Reinicie após salvar.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Cursor usa o mesmo esquema mcpServers que o Claude Desktop. Config de projeto vence a global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Clique no ícone MCP Servers na barra lateral do Cline, depois "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Mesmo formato do Claude Desktop. Reinicie o Windsurf para aplicar.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "language-server",
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ]
    }
  ]
}

O Continue usa um array de objetos de servidor em vez de um map.

~/.config/zed/settings.json
{
  "context_servers": {
    "language-server": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/isaacphi/mcp-language-server"
        ]
      }
    }
  }
}

Adicione em context_servers. Zed recarrega automaticamente ao salvar.

claude mcp add language-server -- TODO 'See README: https://github.com/isaacphi/mcp-language-server'

Uma linha só. Verifique com claude mcp list. Remova com claude mcp remove.

Casos de uso

Usos do mundo real: mcp-language-server

Como renomear um símbolo com segurança em todo o repositório

👤 Desenvolvedores poliglotas usando agentes ⏱ ~15 min intermediate

Quando usar: Você quer uma renomeação que entenda escopo, não um find-replace.

Pré-requisitos
  • Go instalado — brew install go
  • O LSP para sua linguagem — gopls: go install golang.org/x/tools/gopls@latest; pyright: pip install pyright; etc.
  • Instalar o MCP — go install github.com/isaacphi/mcp-language-server@latest
Fluxo
  1. Inicie o MCP apontando para seu workspace + LSP
    Add MCP config: command=mcp-language-server, args=['--workspace','.','--lsp','gopls'].✓ Copiado
    → Ferramentas aparecem
  2. Encontre referências primeiro
    referências para o símbolo 'LegacyAuth' no arquivo auth.go.✓ Copiado
    → Referências precisas entre repositórios
  3. Renomear
    rename_symbol 'LegacyAuth' -> 'Auth' no site da definição.✓ Copiado
    → Todos os locais de chamada atualizados corretamente

Resultado: Renomeação semanticamente correta em todo o repositório.

Armadilhas
  • Agente recorre a find-replace textual quando a ferramenta falha — Verifique diagnósticos após renomear — erros de compilação significam que o LSP recusou e o agente trapaceou
Combine com: github

Como deixar o agente navegar como você faz em um IDE

👤 Usuários de agentes cansados de fazer grep novamente ⏱ ~10 min beginner

Quando usar: O agente continua lendo arquivos inteiros para encontrar uma função.

Fluxo
  1. Consulte a definição
    definição para 'computeTax' em src/billing.ts.✓ Copiado
    → Localização exata arquivo:linha
  2. Extraia diagnósticos
    diagnósticos para o arquivo atual.✓ Copiado
    → Linhas onduladas vermelhas do LSP

Resultado: Agente navega como um usuário de IDE.

Armadilhas
  • LSP não inicializado — primeira chamada lenta — Aqueça com uma lista de arquivos no workspace; pyright é especialmente lento para indexar
Combine com: contextplus

Como executar múltiplos LSPs para um monorepo poliglota

👤 Desenvolvedores em monorepos Go+TS+Python ⏱ ~25 min advanced

Quando usar: Você quer operações semânticas em cada linguagem.

Fluxo
  1. Registre um MCP por LSP
    Adicione 3 entradas MCP: lsp-go (gopls), lsp-ts (tsserver), lsp-py (pyright), cada uma com escopo para sua subpasta de workspace.✓ Copiado
    → 3 conjuntos de ferramentas específicas de linguagem
  2. Use-as por vez
    Para perguntas de TypeScript use lsp-ts:definition; para Go use lsp-go:definition.✓ Copiado
    → Semântica correta por linguagem

Resultado: Navegação semanticamente consciente em todas as linguagens.

Armadilhas
  • Agente esquece qual MCP manipula qual linguagem — Renomeie prefixos de ferramentas descritivamente e mencione em sua memória de projeto

Combinações

Combine com outros MCPs para 10× de alavancagem

language-server + contextplus

Combine navegação LSP com busca semântica/embedding para consultas mais amplas

Use as referências do language-server para usos exatos de computeTax, depois busca semântica contextplus para encontrar funções conceitualmente relacionadas.✓ Copiado
language-server + github

Renomear + commit + PR

Renomeie LegacyAuth para Auth via o LSP, commit em uma nova branch, abra uma PR.✓ Copiado

Ferramentas

O que este MCP expõe

FerramentaEntradasQuando chamarCusto
definition file: str, symbol_or_position Pule para declaração grátis (LSP local)
references file: str, symbol_or_position Encontre usos grátis
diagnostics file: str Verifique erros/avisos grátis
hover file, position Informações de tipo / docs para um símbolo grátis
rename_symbol file, position, new_name Renomeação segura grátis
edit_file file, edits Edição validada por LSP grátis

Custo e limites

O que custa rodar

Cota de API
Nenhuma — LSP local
Tokens por chamada
Pequeno — respostas LSP são compactas
Monetário
Grátis
Dica
Use ferramentas respaldadas por LSP antes de busca de embedding — frequentemente mais baratas e mais precisas.

Segurança

Permissões, segredos, alcance

Escopos mínimos: Leitura/escrita do sistema de arquivos no workspace
Armazenamento de credenciais: Nenhuma
Saída de dados: Apenas localhost; LSP executa em processo
Nunca conceda: Não aponte para workspaces com segredos — LSPs às vezes indexam-os

Solução de problemas

Erros comuns e correções

ferramenta retorna 'LSP não pronto'

Primeira chamada dispara inicialização — tente novamente após 2-5 segundos, ou aqueça com uma chamada hover.

gopls: 'nenhum pacote encontrado'

Aponte o workspace para a raiz do módulo (onde go.mod está), não uma subpasta.

Verificar: go env GOMOD
pyright lento em repositórios grandes

Configure pyrightconfig.json para excluir diretórios vendidos.

rename_symbol reporta sucesso mas a compilação ainda falha

Renomear tocou um literal de string ou código baseado em reflexão que o LSP não consegue ver. Verifique grep para o nome antigo.

Alternativas

mcp-language-server vs. outros

AlternativaQuando usarTroca
Context+Você quer embedding + memory graph em vez de semântica LSPNão tão preciso em rename/references
Serena MCPVocê quer LSP com refatorações de nível superiorSetup diferente; baseado em Python

Mais

Recursos

📖 Leia o README oficial no GitHub

🐙 Ver issues abertas

🔍 Ver todos os 400+ servidores MCP e Skills