Tree-sitter MCP Server & CLI
An MCP server and CLI 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
- Use as a standalone CLI or as an MCP server for Claude Desktop
Install
Requires Python 3.10+.
# Install directly
uv pip install treesitter-mcp
# Or install a specific version
uv pip install treesitter-mcp==2.1
# 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
Metadata
Release files for iflow-mcp_pwno-io_treesitter-mcp 2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_pwno_io_treesitter_mcp-2.1.tar.gz | 24.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_pwno_io_treesitter_mcp-2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.2 kB
Release files / iflow_mcp_pwno_io_treesitter_mcp-2.1.tar.gz
| Download URL | iflow_mcp_pwno_io_treesitter_mcp-2.1.tar.gz |
|---|---|
| Size | 24.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f4698aacdb9a3aea7c98800e5c0bcec2fa6b9672b4865fb1bb23b5f95ab5368
|
|
BLAKE2b-256 checksum How to use checksums |
a4f09329b56b5570cb7f34f19c18a60b930b120352670544f4b2148457e4462d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_pwno_io_treesitter_mcp-2.1-py3-none-any.whl
| Download URL | iflow_mcp_pwno_io_treesitter_mcp-2.1-py3-none-any.whl |
|---|---|
| Size | 32.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
68be5bd0db47e2711bb39858cb9b236dc5648bd8bfa916098937e45c09928bb3
|
|
BLAKE2b-256 checksum How to use checksums |
bd333cf78c9b0f57343d2c173af3be5b572e1ae31b9e2325ff64925aa3c9c78e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|