MCP server for code analysis using Tree-sitter
Project description
Tree-sitter MCP Server
An MCP server that uses Tree-sitter to parse and analyze code.
What it does
- Parse files and get their AST
- Extract functions and variables
- Build call graphs
- Find where functions/variables are used
- Run custom Tree-sitter queries
- List imports/includes
- Extract source code for specific line/column ranges
Install
Requires Python 3.10+.
# Install directly
uv pip install treesitter-mcp
# Or clone and install
git clone https://github.com/pwno-io/treesitter-mcp.git
cd treesitter-mcp
uv pip install -e .
This installs both treesitter-mcp and ts-cli entry points.
Or run without installing:
uvx treesitter-mcp
Running
As an MCP server (default)
For use with Claude Desktop or other MCP clients:
treesitter-mcp
See docs/MCP_USAGE.md for how to configure.
Standalone CLI (ts-cli)
Run analysis directly from the terminal:
ts-cli path/to/file.py
ts-cli path/to/file.py --ast --max-depth 2
ts-cli path/to/file.py --find-function main --include-source
ts-cli --supported-languages
Use --output-file to write results to JSON files instead of stdout.
HTTP mode
For testing or manual use:
treesitter-mcp --http --port 8000 --host 127.0.0.1
Limiting tools
Only expose certain tools with --tools:
treesitter-mcp --http --port 8000 --tools treesitter_analyze_file,treesitter_get_ast
Or via URL query param: http://127.0.0.1:8000?tools=treesitter_analyze_file,treesitter_get_ast
Tools available:
treesitter_analyze_file- Basic analysistreesitter_get_ast- Full ASTtreesitter_get_call_graph- Function callstreesitter_find_function- Find function definitionstreesitter_find_variable- Find variablestreesitter_get_source_for_range- Extract source code for a rangetreesitter_get_supported_languages- What's supportedtreesitter_get_node_at_point- AST node at a line/columntreesitter_get_node_for_range- AST node for a rangetreesitter_cursor_walk- Walk tree with contexttreesitter_run_query- Custom Tree-sitter queriestreesitter_find_usage- Find symbol usagestreesitter_get_dependencies- Extract imports/includes
If you don't specify --tools, everything is exposed.
Writing output to file
All tools support an optional output_file parameter. When provided, the tool
writes its result directly to the specified file (as pretty-printed JSON) instead
of returning it. This is useful for large outputs like ASTs that could cause
context overload in agents.
Example:
# Returns result to file, minimal response to agent
treesitter_get_ast(file_path="large_file.py", output_file="~/output/ast.json")
# Returns: {"status": "written", "output_file": "/home/user/output/ast.json", "bytes_written": 123456}
The tool will:
- Automatically create parent directories if they don't exist
- Expand
~to your home directory - Warn (to stderr) if overwriting an existing file
- Return a minimal confirmation dict on success, or an error dict if writing fails
Including source code in results
The treesitter_find_function and treesitter_find_variable tools support an
optional include_source parameter. When set to True, each matched symbol
includes its source code in the result:
treesitter_find_function(file_path="server.py", name="main", include_source=True)
# Returns: {"query": "main", "matches": [{"name": "main", ..., "source": "def main():\n ..."}]}
Language support
| Language | analyze_file | get_ast | get_call_graph | find_function | find_variable | find_usage | get_dependencies |
|---|---|---|---|---|---|---|---|
| C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| C++ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| JavaScript | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| TypeScript | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Java | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| PHP | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rust | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ruby | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
File extensions
| Language | Extensions |
|---|---|
| C | .c |
| C++ | .cpp, .cc, .cxx, .h, .hpp |
| Python | .py |
| JavaScript | .js, .jsx, .mjs, .cjs |
| TypeScript | .ts, .tsx, .cts, .mts |
| Go | .go |
| Java | .java |
| PHP | .php, .phtml |
| Rust | .rs |
| Ruby | .rb |
Docs
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file treesitter_mcp-2.1.tar.gz.
File metadata
- Download URL: treesitter_mcp-2.1.tar.gz
- Upload date:
- Size: 28.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ed45af0d85a19c1387b8d68563e9d72ac0edf08fab43c11a4ba1276f497fadc
|
|
| MD5 |
e74fd46d9500eb7c5945ac59bff612ab
|
|
| BLAKE2b-256 |
e154bef309b93cfd01782a6b07a5306f51cc7c3ee4bb836abb29df68cf436d98
|
File details
Details for the file treesitter_mcp-2.1-py3-none-any.whl.
File metadata
- Download URL: treesitter_mcp-2.1-py3-none-any.whl
- Upload date:
- Size: 32.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c84c6b60dea815686be1866537cfc034a0400f1674d8874d0ea49540ab5b9db7
|
|
| MD5 |
cc3d6766e89cc0e1c3e858049317d265
|
|
| BLAKE2b-256 |
18fd98566530b4474eff4cd8047db53ffbc346e074085f55b2fb260d730f344c
|