[trace-mcp]

Language capability matrix

trace-mcp ships 81 language plugins. They are not equally deep, and this page says how deep each one is. Every language in the list gets symbol extraction; call graphs and type edges are a much smaller set. For what each language’s framework integrations understand on top of that, see supported frameworks; for the include globs referenced below, see configuration.

What the columns mean

Column Meaning
Parser tree-sitter — real grammar-based AST. regex — pattern extraction, no AST. custom — hand-written parser for a structured format.
Default The shipped default include globs reach files with this extension. Where this is empty the plugin only runs once you add the extension to include in .trace-mcp.json.
Imports Import statements are resolved into graph edges. Plugins outside this set still parse imports, but nothing turns them into edges yet.
Calls A call-graph resolver exists, so “who calls this” is answerable for this language.
Types Type-annotation or inheritance edges are resolved.
Tests At least one test exercises this plugin directly.

Default config vs. plugin count. The default include is one global glob over every extension the plugins below claim, so 78 of the 81 plugins run wherever their files live in the repo — no directory anchoring. The remaining 3 are pure data formats, left out because lockfiles, fixtures and .svg would swamp the index for little symbol value. Ask for them explicitly if you want them:

{ "include": ["schemas/**/*.json", "k8s/**/*.xml"] }

Note that include in a project config replaces the built-in list rather than adding to it, so copy the default glob alongside your addition if you still want the rest of the repo indexed.

A regex plugin still gives you working search, get_outline and symbol navigation — that covers most “find it and read it” work. What it does not give you is a call graph: that needs an AST plus a per-language resolver. Where the Calls column is empty, get_call_graph returns nothing for that language unless you enable LSP enrichment (lsp.enabled: true) or ingest a SCIP index.

Imports means edges, not parsing. Most plugins extract import statements; far fewer have a pipeline pass that resolves the specifier to a target node, and without one the extracted import never becomes an edge. This column counts the second thing, so it is much shorter than the language list — see src/indexer/edge-resolvers/import-capable-languages.ts.

Matrix

Language Extensions Parser Default Imports Calls Types Tests
ada .adb .ads .ada regex (multi-pass) yes yes
al .al regex yes yes
apex .cls .trigger .apex regex (multi-pass) yes yes
assembly .asm .s .S regex yes yes
astro .astro tree-sitter yes yes
autohotkey .ahk .ah2 regex yes yes
bash .sh .bash .zsh tree-sitter yes yes
blade .blade.php regex yes yes
c .c .h tree-sitter yes yes
clojure .clj .cljs .cljc .edn regex yes
cmake .cmake CMakeLists.txt regex yes
cobol .cob .cbl .cpy .cobol regex (multi-pass) yes yes
common-lisp .lisp .lsp .cl .asd regex (multi-pass) yes yes
cpp .cpp .cxx .cc .hpp tree-sitter yes yes
csharp .cs tree-sitter yes yes
css .css .scss .sass .less tree-sitter yes yes yes
cuda .cu .cuh regex yes
d .d .di regex (multi-pass) yes yes
dart .dart tree-sitter yes yes
dockerfile Dockerfile .dockerfile regex yes yes
ejs .ejs regex yes yes
elisp .el .elc tree-sitter yes
elixir .ex .exs tree-sitter yes yes
elm .elm tree-sitter yes
erlang .erl .hrl regex yes yes
form .frm .prc .h regex yes
fortran .f .f90 .f95 .f03 regex yes yes
fsharp .fs .fsi .fsx regex (multi-pass) yes
gdscript .gd regex yes yes
gleam .gleam regex yes yes
glsl .glsl .vert .frag .geom regex yes
go .go tree-sitter yes yes yes
graphql .graphql .gql custom yes yes
groovy .groovy .gradle .gvy regex yes yes
haskell .hs .lhs regex yes yes
hcl .tf .hcl .tfvars custom yes yes yes
html .html .htm tree-sitter yes yes yes
ini .ini .cfg .conf .properties regex
java .java tree-sitter yes yes yes
json .json .jsonc .json5 tree-sitter yes
julia .jl regex yes yes
kotlin .kt .kts tree-sitter yes yes
lean .lean regex yes
lua .lua .luau tree-sitter yes yes
magma .m .mag .magma regex yes
makefile Makefile makefile .mk GNUmakefile regex yes
markdown .md .mdx .markdown .qmd custom yes yes yes
matlab .m .mlx .mat regex (multi-pass) yes yes
meson meson.build meson_options.txt regex yes
nim .nim .nims .nimble regex yes yes
nix .nix regex yes yes
objc .m .mm tree-sitter yes yes
ocaml .ml .mli tree-sitter yes yes
pascal .pas .dpr .dpk .lpr regex (multi-pass) yes yes
perl .pl .pm .t regex yes yes
php .php tree-sitter yes yes yes yes
plsql .pls .plb .pck .pkb regex (multi-pass) yes yes
powershell .ps1 .psm1 .psd1 regex (multi-pass) yes yes
prisma .prisma custom yes yes
protobuf .proto regex yes yes
python .py .pyi tree-sitter yes yes yes yes yes
r .r .R .Rmd regex yes yes
ruby .rb .rake tree-sitter yes yes
rust .rs tree-sitter yes yes yes
scala .scala .sc tree-sitter yes yes
solidity .sol tree-sitter yes yes
sql .sql regex yes yes
svelte .svelte regex yes yes
swift .swift tree-sitter yes yes
tcl .tcl .tk .itcl .itk regex (multi-pass) yes yes
toml .toml tree-sitter yes yes
typescript .ts .tsx .mts .cts tree-sitter yes yes yes yes yes
verilog .v .sv .svh .vh regex yes yes
verse .verse regex yes yes
vhdl .vhd .vhdl .vho .vhs regex yes yes
vimscript .vim .vimrc regex yes
vue .vue tree-sitter yes yes yes
wolfram .wl .wls .m .nb regex yes
xml .xml .xul .xsl .xslt custom yes yes
yaml .yaml .yml custom yes yes yes
zig .zig .zon tree-sitter yes yes

Last updated: August 30, 2026