A Model Context Protocol (MCP) server that provides code analysis capabilities using tree-sitter, designed to give Claude intelligent access to codebases with appropriate context management.
For a comprehensive list of all available commands, their current implementation status, and detailed feature matrix, please refer to the FEATURES.md document.
pip install mcp-server-tree-sitter
git clone https://github.com/wrale/mcp-server-tree-sitter.git
cd mcp-server-tree-sitter
pip install -e ".[dev,languages]"
You can make the server available in Claude Desktop either through the MCP CLI or by manually configuring Claude Desktop.
Register the server with Claude Desktop:
mcp install mcp_server_tree_sitter.server:mcp --name "tree_sitter"
Alternatively, you can manually configure Claude Desktop:
Open your Claude Desktop configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
Create the file if it doesn't exist.
Add the server to the mcpServers
section:
{
"mcpServers": {
"tree_sitter": {
"command": "python",
"args": [
"-m",
"mcp_server_tree_sitter.server"
]
}
}
}
Alternatively, if using uv or another package manager:
{
"mcpServers": {
"tree_sitter": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/YOUR/PROJECT",
"run",
"-m",
"mcp_server_tree_sitter.server"
]
}
}
}
Note: Make sure to replace /ABSOLUTE/PATH/TO/YOUR/PROJECT
with the actual absolute path to your project directory.
Save the file and restart Claude Desktop.
The MCP tools icon (hammer) will appear in Claude Desktop's interface once you have properly configured at least one MCP server. You can then access the tree_sitter
server's functionality by clicking on this icon.
If you prefer not to manually install the package from PyPI (released version) or clone the repository, simply use the following configuration for Claude Desktop:
Open your Claude Desktop configuration file (same location as above).
Add the tree-sitter server to the mcpServers
section:
{
"mcpServers": {
"tree_sitter": {
"command": "uvx",
"args": [
"--directory", "/ABSOLUTE/PATH/TO/YOUR/PROJECT",
"mcp-server-tree-sitter"
]
}
}
}
Save the file and restart Claude Desktop.
This method uses uvx
to run the installed PyPI package directly, which is the recommended approach for the released version. The server doesn't require any additional parameters to run in its basic configuration.
The MCP Tree-sitter Server maintains state between invocations. This means:
This persistence is maintained in-memory during the server's lifetime using singleton patterns for key components.
mcp run mcp_server_tree_sitter.server
mcp dev mcp_server_tree_sitter.server
First, register a project to analyze:
register_project_tool(path="/path/to/your/project", name="my-project")
List files in the project:
list_files(project="my-project", pattern="**/*.py")
View file content:
get_file(project="my-project", path="src/main.py")
Get the syntax tree:
get_ast(project="my-project", path="src/main.py", max_depth=3)
Extract symbols:
get_symbols(project="my-project", path="src/main.py")
Search for text:
find_text(project="my-project", pattern="function", file_pattern="**/*.py")
Run tree-sitter queries:
run_query(
project="my-project",
query='(function_definition name: (identifier) @function.name)',
language="python"
)
analyze_complexity(project="my-project", path="src/main.py")
While the primary intended use is through the MCP server, you can also use the library directly in Python code:
# 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
Create a YAML configuration file:
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
Load it with:
configure(config_path="/path/to/config.yaml")
The preferred_languages
setting controls which language parsers are pre-loaded at server startup rather than on-demand. This provides several benefits:
By default, all parsers are loaded on-demand when first needed. For optimal performance, specify the languages you use most frequently in your projects.
You can also configure specific settings:
configure(cache_enabled=True, max_file_size_mb=10, log_level="DEBUG")
Or use environment variables:
export MCP_TS_CACHE_MAX_SIZE_MB=256
export MCP_TS_LOG_LEVEL=DEBUG
export MCP_TS_CONFIG_PATH=/path/to/config.yaml
The server will look for configuration in:
configure()
callMCP_TS_CONFIG_PATH
environment variable~/.config/tree-sitter/config.yaml
The server provides the following MCP resources:
project://{project}/files
- List all files in a projectproject://{project}/files/{pattern}
- List files matching a patternproject://{project}/file/{path}
- Get file contentproject://{project}/file/{path}/lines/{start}-{end}
- Get specific lines from a fileproject://{project}/ast/{path}
- Get the AST for a fileproject://{project}/ast/{path}/depth/{depth}
- Get the AST with custom depthThe server provides tools for:
register_project_tool
, list_projects_tool
, remove_project_tool
list_languages
, check_language_available
list_files
, get_file
, get_file_metadata
get_ast
, get_node_at_position
find_text
, run_query
get_symbols
, find_usage
analyze_project
, get_dependencies
, analyze_complexity
get_query_template_tool
, list_query_templates_tool
, build_query
, adapt_query
, get_node_types
find_similar_code
clear_cache
diagnose_config
See FEATURES.md for detailed information about each tool's implementation status, dependencies, and usage examples.
The server provides the following MCP prompts:
code_review
- Create a prompt for reviewing codeexplain_code
- Create a prompt for explaining codeexplain_tree_sitter_query
- Explain tree-sitter query syntaxsuggest_improvements
- Create a prompt for suggesting code improvementsproject_overview
- Create a prompt for a project overview analysisMIT
{
"mcpServers": {
"tree_sitter": {
"env": {},
"args": [
"-m",
"mcp_server_tree_sitter.server"
],
"command": "python"
}
}
}
Seamless access to top MCP servers powering the future of AI integration.