ast-grep MCP
Um servidor MCP experimental que utiliza a CLI do ast-grep para busca estrutural de código, linting e reescrita.
Documentação
Servidor MCP ast-grep
Um servidor experimental de Model Context Protocol (MCP) que fornece a assistentes de IA poderosas capacidades de busca estrutural de código usando ast-grep.
Visão Geral
Este servidor MCP permite que assistentes de IA (como Cursor, Claude Desktop, etc.) busquem e analisem bases de código usando correspondência de padrões por Árvore Sintática Abstrata (AST) em vez de busca simples baseada em texto. Ao aproveitar as capacidades de busca estrutural do ast-grep, a IA pode:
- Encontrar padrões de código com base na estrutura sintática, não apenas na correspondência de texto
- Buscar construções de programação específicas (funções, classes, imports, etc.)
- Escrever e testar regras de busca complexas usando configuração YAML
- Depurar e visualizar estruturas AST para melhor desenvolvimento de padrões
Pré-requisitos
-
Instalar ast-grep: Siga o guia de instalação do ast-grep
# macOS brew install ast-grep nix-shell -p ast-grep cargo install ast-grep --locked -
Instalar uv: Gerenciador de pacotes Python
curl -LsSf https://astral.sh/uv/install.sh | sh -
Cliente compatível com MCP: Como Cursor, Claude Desktop ou outros clientes MCP
Instalação
-
Clone este repositório:
git clone https://github.com/ast-grep/ast-grep-mcp.git cd ast-grep-mcp -
Instale as dependências:
uv sync -
Verifique a instalação do ast-grep:
ast-grep --version
Executando com uvx
Você pode executar o servidor diretamente do GitHub usando uvx:
uvx --from git+https://github.com/ast-grep/ast-grep-mcp ast-grep-server
Isso é útil para testar rapidamente o servidor sem clonar o repositório.
Configuração
Para Cursor
Adicione às suas configurações MCP (geralmente em .cursor-mcp/settings.json):
{
"mcpServers": {
"ast-grep": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/ast-grep-mcp", "run", "main.py"],
"env": {}
}
}
}
Para Claude Desktop
Adicione à sua configuração MCP do Claude Desktop:
{
"mcpServers": {
"ast-grep": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/ast-grep-mcp", "run", "main.py"],
"env": {}
}
}
}
Configuração personalizada do ast-grep
O servidor MCP suporta o uso de um arquivo sgconfig.yaml personalizado para configurar o comportamento do ast-grep.
Consulte a documentação de configuração do ast-grep para detalhes sobre o formato do arquivo de configuração.
Você pode fornecer o arquivo de configuração de duas maneiras (em ordem de precedência):
- Argumento de linha de comando:
--config /path/to/sgconfig.yaml - Variável de ambiente:
AST_GREP_CONFIG=/path/to/sgconfig.yaml
Comando personalizado do ast-grep
Se ast-grep não estiver em PATH, ou precisar ser iniciado por outro comando, defina
AST_GREP_PATH. O valor pode ser um caminho de executável ou um prefixo de comando:
{
"mcpServers": {
"ast-grep": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/ast-grep-mcp", "run", "main.py"],
"env": {
"AST_GREP_PATH": "uv run ast-grep"
}
}
}
}
Outros exemplos:
AST_GREP_PATH="/custom/path/to/ast-grep"AST_GREP_PATH="npx ast-grep"AST_GREP_PATH='"/path containing spaces/ast-grep"'
Se não definido, o comando padrão é ast-grep.
Uso
Este repositório inclui documentação abrangente de regras ast-grep em ast-grep.mdc. A documentação cobre todos os aspectos da escrita de regras ast-grep eficazes, desde padrões simples até buscas complexas com múltiplas condições.
Você pode adicioná-la à sua regra do cursor ou ao Claude.md, e anexá-la quando precisar que o agente de IA crie regras ast-grep para você.
O prompt solicitará que o LLM use MCP para criar, verificar e melhorar a regra que ele criar.
Recursos
O servidor fornece quatro ferramentas principais para análise de código:
🔍 dump_syntax_tree
Visualize a estrutura da Árvore Sintática Abstrata de trechos de código. Essencial para entender como escrever padrões de busca eficazes.
Casos de uso:
- Depurar por que um padrão não está correspondendo
- Entender a estrutura AST do código alvo
- Aprender a sintaxe de padrões do ast-grep
🧪 test_match_code_rule
Teste regras YAML do ast-grep contra trechos de código antes de aplicá-las a bases de código maiores.
Casos de uso:
- Validar se as regras funcionam como esperado
- Iterar no desenvolvimento de regras
- Depurar lógica de correspondência complexa
🎯 find_code
Busque em bases de código usando padrões simples do ast-grep para correspondências estruturais diretas.
Parâmetros:
max_results: Limite o número de correspondências completas retornadas (padrão: ilimitado)output_format: Escolha entre"text"(padrão, ~75% menos tokens) ou"json"(metadados completos)
Formato de Saída de Texto:
Found 2 matches:
path/to/file.py:10-15
def example_function():
# function body
return result
path/to/file.py:20-22
def another_function():
pass
Casos de uso:
- Encontrar chamadas de função com padrões específicos
- Localizar declarações de variáveis
- Buscar construções de código simples
🚀 find_code_by_rule
Busca avançada em bases de código usando regras YAML complexas que podem expressar critérios de correspondência sofisticados.
Parâmetros:
max_results: Limite o número de correspondências completas retornadas (padrão: ilimitado)output_format: Escolha entre"text"(padrão, ~75% menos tokens) ou"json"(metadados completos)
Casos de uso:
- Encontrar estruturas de código aninhadas
- Buscar com restrições relacionais (dentro, tem, precede, segue)
- Buscas complexas com múltiplas condições
Exemplos de Uso
Busca Básica por Padrão
Use Consulta:
Encontre todas as declarações console.log
A IA gerará regras como:
id: find-console-logs
language: javascript
rule:
pattern: console.log($$$)
Exemplo de Regra Complexa
Consulta do Usuário:
Encontre funções assíncronas que usam await
A IA gerará regras como:
id: async-with-await
language: javascript
rule:
all:
- kind: function_declaration
- has:
pattern: async
- has:
pattern: await $EXPR
stopBy: end
Linguagens Suportadas
O ast-grep suporta muitas linguagens de programação, incluindo:
- JavaScript/TypeScript
- Python
- Rust
- Go
- Java
- C/C++
- C#
- E muitas outras...
Para uma lista completa de linguagens suportadas nativamente, consulte a documentação de suporte a linguagens do ast-grep.
Você também pode adicionar suporte para linguagens personalizadas através do arquivo de configuração sgconfig.yaml. Consulte o guia de linguagens personalizadas para detalhes.
Solução de Problemas
Problemas Comuns
- Erros de "comando não encontrado": Certifique-se de que o ast-grep está instalado e no seu PATH
- Nenhuma correspondência encontrada: Tente adicionar
stopBy: endàs regras relacionais - Padrão não correspondendo: Use
dump_syntax_treepara entender a estrutura AST - Erros de permissão: Certifique-se de que o servidor tem acesso de leitura aos diretórios alvo
Contribuindo
Este é um projeto experimental. Issues e pull requests são bem-vindos!
Projetos Relacionados
- ast-grep - A ferramenta central de busca estrutural
- Model Context Protocol - O protocolo que este servidor implementa
- MCP Python SDK - O framework Python MCP usado
- Codemod MCP - Fornece a assistentes de IA ferramentas como AST tree-sitter e tipos de nós, instruções ast-grep (YAML e JS ast-grep), e comandos CLI do Codemod para facilmente construir, publicar e executar codemods baseados em ast-grep.
