MCP Tree-sitter Server
Um servidor para análise de código usando Tree-sitter, com capacidades de gerenciamento de contexto.
Documentação
Servidor MCP Tree-sitter
Um servidor Model Context Protocol (MCP) que fornece capacidades de análise de código usando tree-sitter, projetado para dar a assistentes de IA acesso inteligente a bases de código com gerenciamento adequado de contexto. O Claude Desktop é o alvo de implementação de referência.
Recursos
- 🔍 Exploração Flexível: Examine código em múltiplos níveis de granularidade
- 🧠 Gerenciamento de Contexto: Fornece informação suficiente sem sobrecarregar a janela de contexto
- 🌐 Agnóstico de Linguagem: Suporta muitas linguagens de programação incluindo Python, JavaScript, TypeScript, Go, Rust, C, C++, C#, Swift, Java, Kotlin, Dart, Julia e APL via tree-sitter-language-pack
- 🌳 Ciente da Estrutura: Usa compreensão baseada em AST com travessia eficiente baseada em cursor
- 🔎 Pesquisável: Encontre padrões específicos usando busca de texto e consultas tree-sitter
- 🔄 Cache: Desempenho otimizado através de cache de árvores de análise
- 🔑 Extração de Símbolos: Extraia e analise funções, classes e outros símbolos de código
- 📊 Análise de Dependências: Identifique e analise dependências e relacionamentos de código
- 🧩 Persistência de Estado: Mantém registros de projetos e dados em cache entre invocações
- 🔒 Seguro: Limites de segurança integrados e validação de entrada
Para uma lista abrangente de todos os comandos disponíveis, seu status atual de implementação e matriz detalhada de recursos, consulte o documento FEATURES.md.
Instalação
Pré-requisitos
- Python 3.10+
- Parsers de linguagem Tree-sitter para suas linguagens preferidas
Instalação Básica
pip install mcp-server-tree-sitter
Instalação para Desenvolvimento
git clone https://github.com/wrale/mcp-server-tree-sitter.git
cd mcp-server-tree-sitter
pip install -e ".[dev]"
Início Rápido
Executando com Claude Desktop
Você pode disponibilizar o servidor no Claude Desktop através do MCP CLI ou configurando manualmente o Claude Desktop.
Usando MCP CLI
Registre o servidor com o Claude Desktop:
mcp install mcp_server_tree_sitter.server:mcp --name "tree_sitter"
Configuração Manual
Alternativamente, você pode configurar manualmente o Claude Desktop:
-
Abra seu arquivo de configuração do Claude Desktop:
- macOS/Linux:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Crie o arquivo se ele não existir.
- macOS/Linux:
-
Adicione o servidor à seção
mcpServers:{ "mcpServers": { "tree_sitter": { "command": "python", "args": [ "-m", "mcp_server_tree_sitter.server" ] } } }Alternativamente, se estiver usando uv ou outro gerenciador de pacotes:
{ "mcpServers": { "tree_sitter": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/YOUR/PROJECT", "run", "-m", "mcp_server_tree_sitter.server" ] } } }Nota: Certifique-se de substituir
/ABSOLUTE/PATH/TO/YOUR/PROJECTpelo caminho absoluto real para o diretório do seu projeto. -
Salve o arquivo e reinicie o Claude Desktop.
O ícone de ferramentas MCP (martelo) aparecerá na interface do Claude Desktop assim que você configurar corretamente pelo menos um servidor MCP. Você pode então acessar a funcionalidade do servidor tree_sitter clicando neste ícone.
Configurando com Versão Publicada
Se você preferir não instalar manualmente o pacote do PyPI (versão publicada) ou clonar o repositório, simplesmente use a seguinte configuração para o Claude Desktop:
-
Abra seu arquivo de configuração do Claude Desktop (mesmo local acima).
-
Adicione o servidor tree-sitter à seção
mcpServers:{ "mcpServers": { "tree_sitter": { "command": "uvx", "args": [ "--directory", "/ABSOLUTE/PATH/TO/YOUR/PROJECT", "mcp-server-tree-sitter" ] } } } -
Salve o arquivo e reinicie o Claude Desktop.
Este método usa uvx para executar o pacote PyPI instalado diretamente, que é a abordagem recomendada para a versão publicada. O servidor não requer parâmetros adicionais para executar em sua configuração básica.
Persistência de Estado
O Servidor MCP Tree-sitter mantém estado entre invocações. Isso significa:
- Projetos permanecem registrados até serem explicitamente removidos ou o servidor ser reiniciado
- Árvores de análise são armazenadas em cache de acordo com as configurações
- Informações de linguagem são retidas durante toda a vida útil do servidor
Esta persistência é mantida em memória durante a vida útil do servidor usando padrões singleton para componentes-chave.
Executando como servidor autônomo
Existem várias maneiras de executar o servidor:
Usando o MCP CLI diretamente:
python -m mcp run mcp_server_tree_sitter.server
Usando alvos do Makefile:
# Show available targets
make
# Run the server with default settings
make mcp-run
# Show help information
make mcp-run ARGS="--help"
# Show version information
make mcp-run ARGS="--version"
# Run with custom configuration file
make mcp-run ARGS="--config /path/to/config.yaml"
# Enable debug logging
make mcp-run ARGS="--debug"
# Disable parse tree caching
make mcp-run ARGS="--disable-cache"
Usando o script instalado:
# Run the server with default settings
mcp-server-tree-sitter
# Show help information
mcp-server-tree-sitter --help
# Show version information
mcp-server-tree-sitter --version
# Run with custom configuration file
mcp-server-tree-sitter --config /path/to/config.yaml
# Enable debug logging
mcp-server-tree-sitter --debug
# Disable parse tree caching
mcp-server-tree-sitter --disable-cache
Usando com o MCP Inspector
Usando o MCP CLI diretamente:
python -m mcp dev mcp_server_tree_sitter.server
Ou usando o alvo do Makefile:
make mcp-dev
Você também pode passar argumentos:
make mcp-dev ARGS="--debug"
Uso
Registrar um Projeto
Primeiro, registre um projeto para analisar:
register_project_tool(path="/path/to/your/project", name="my-project")
Explorar Arquivos
Liste arquivos no projeto:
list_files(project="my-project", pattern="**/*.py")
Veja o conteúdo do arquivo:
get_file(project="my-project", path="src/main.py")
Analisar Estrutura de Código
Obtenha a árvore sintática:
get_ast(project="my-project", path="src/main.py", max_depth=3)
Extraia símbolos:
get_symbols(project="my-project", path="src/main.py")
Buscar Código
Busque por texto:
find_text(project="my-project", pattern="function", file_pattern="**/*.py")
Execute consultas tree-sitter:
run_query(
project="my-project",
query='(function_definition name: (identifier) @function.name)',
language="python"
)
Analisar Complexidade
analyze_complexity(project="my-project", path="src/main.py")
Uso Direto em Python
Embora o uso principal pretendido seja através do servidor MCP, você também pode usar a biblioteca diretamente em código Python:
# Import from the API module
from mcp_server_tree_sitter.api import (
register_project, list_projects, get_config, get_language_registry
)
# Register a project
project_info = register_project(
path="/path/to/project",
name="my-project",
description="Description"
)
# List projects
projects = list_projects()
# Get configuration
config = get_config()
# Access components through dependency injection
from mcp_server_tree_sitter.di import get_container
container = get_container()
project_registry = container.project_registry
language_registry = container.language_registry
Configuração
Crie um arquivo de configuração YAML:
cache:
enabled: true # Enable/disable caching (default: true)
max_size_mb: 100 # Maximum cache size in MB (default: 100)
ttl_seconds: 300 # Cache entry time-to-live in seconds (default: 300)
security:
max_file_size_mb: 5 # Maximum file size to process in MB (default: 5)
excluded_dirs: # Directories to exclude from processing
- .git
- node_modules
- __pycache__
allowed_extensions: # Optional list of allowed file extensions
# - py
# - js
# Leave empty or omit for all extensions
language:
default_max_depth: 5 # Default max depth for AST traversal (default: 5)
preferred_languages: # List of languages to pre-load at startup for faster performance
- python # Pre-loading reduces latency for first operations
- javascript
log_level: INFO # Logging level (DEBUG, INFO, WARNING, ERROR)
max_results_default: 100 # Default maximum results for search operations
Carregue-o com:
configure(config_path="/path/to/config.yaml")
Configuração de Logging
A verbosidade de logging do servidor pode ser controlada usando variáveis de ambiente:
# Enable detailed debug logging
export MCP_TS_LOG_LEVEL=DEBUG
# Use normal informational logging (default)
export MCP_TS_LOG_LEVEL=INFO
# Only show warning and error messages
export MCP_TS_LOG_LEVEL=WARNING
Para informações abrangentes sobre configuração de logging, consulte a documentação de logging. Para detalhes sobre a interface de linha de comando, veja a documentação do CLI.
Sobre preferred_languages
A configuração preferred_languages controla quais parsers de linguagem são pré-carregados na inicialização do servidor em vez de sob demanda. Isso fornece vários benefícios:
- Análise inicial mais rápida: Sem atraso ao analisar pela primeira vez um arquivo de uma linguagem pré-carregada
- Detecção precoce de erros: Problemas com parsers são descobertos na inicialização, não durante o uso
- Alocação de memória previsível: Memória para parsers usados com frequência é alocada antecipadamente
Por padrão, todos os parsers são carregados sob demanda quando necessário pela primeira vez. Para desempenho ideal, especifique as linguagens que você usa com mais frequência em seus projetos.
Você também pode configurar configurações específicas:
configure(cache_enabled=True, max_file_size_mb=10, log_level="DEBUG")
Ou usar variáveis de ambiente:
export MCP_TS_CACHE_MAX_SIZE_MB=256
export MCP_TS_LOG_LEVEL=DEBUG
export MCP_TS_CONFIG_PATH=/path/to/config.yaml
Variáveis de ambiente usam o formato MCP_TS_SECTION_SETTING (ex.: MCP_TS_CACHE_MAX_SIZE_MB) para configurações de seção, ou MCP_TS_SETTING (ex.: MCP_TS_LOG_LEVEL) para configurações de nível superior.
Os valores de configuração são aplicados nesta ordem de precedência:
- Variáveis de ambiente (maior)
- Valores definidos via chamadas
configure() - Arquivo de configuração YAML
- Valores padrão (menor)
O servidor procurará configuração em:
- Caminho especificado na chamada
configure() - Caminho especificado pela variável de ambiente
MCP_TS_CONFIG_PATH - Localização padrão:
~/.config/tree-sitter/config.yaml
Para Desenvolvedores
Capacidades de Diagnóstico
O Servidor MCP Tree-sitter inclui uma estrutura de diagnóstico para ajudar a identificar e corrigir problemas:
# Run diagnostic tests
make test-diagnostics
# CI-friendly version (won't fail the build on diagnostic issues)
make test-diagnostics-ci
Testes de diagnóstico fornecem informações detalhadas sobre o comportamento do servidor e podem ajudar a isolar problemas específicos. Para mais informações sobre a estrutura de diagnóstico, consulte a documentação de diagnósticos.
Considerações de Segurança de Tipos
O Servidor MCP Tree-sitter mantém segurança de tipos ao interagir com bibliotecas tree-sitter através de padrões de design e protocolos cuidadosos. Se você está estendendo a base de código, revise o guia de segurança de tipos para informações importantes sobre como lidar com variações da API tree-sitter.
Recursos Disponíveis
O servidor fornece os seguintes recursos MCP:
project://{project}/files- Listar todos os arquivos em um projetoproject://{project}/files/{pattern}- Listar arquivos que correspondem a um padrãoproject://{project}/file/{path}- Obter conteúdo do arquivoproject://{project}/file/{path}/lines/{start}-{end}- Obter linhas específicas de um arquivoproject://{project}/ast/{path}- Obter o AST para um arquivoproject://{project}/ast/{path}/depth/{depth}- Obter o AST com profundidade personalizada
Ferramentas Disponíveis
O servidor fornece ferramentas para:
- Gerenciamento de projetos:
register_project_tool,list_projects_tool,remove_project_tool - Gerenciamento de linguagens:
list_languages,check_language_available - Operações de arquivo:
list_files,get_file,get_file_metadata - Análise AST:
get_ast,get_node_at_position - Busca de código:
find_text,run_query - Extração de símbolos:
get_symbols,find_usage - Análise de projetos:
analyze_project,get_dependencies,analyze_complexity - Construção de consultas:
get_query_template_tool,list_query_templates_tool,build_query,adapt_query,get_node_types - Detecção de código similar:
find_similar_code - Gerenciamento de cache:
clear_cache - Diagnósticos de configuração:
diagnose_config
Veja FEATURES.md para informações detalhadas sobre o status de implementação de cada ferramenta, dependências e exemplos de uso.
Prompts Disponíveis
O servidor fornece os seguintes prompts MCP:
code_review- Criar um prompt para revisar códigoexplain_code- Criar um prompt para explicar códigoexplain_tree_sitter_query- Explicar sintaxe de consulta tree-sittersuggest_improvements- Criar um prompt para sugerir melhorias de códigoproject_overview- Criar um prompt para análise de visão geral do projeto
Feedback e Comunidade
Adoraríamos saber como você está usando mcp-server-tree-sitter e o que o tornaria mais útil para seu fluxo de trabalho.
- Perguntas e Solicitações de Recursos: Discussões do GitHub
- Relatórios de Bugs: Issues do GitHub
Licença
MIT