/ ディレクトリ / プレイグラウンド / Tree-sitter MCP
● コミュニティ wrale ⚡ 即起動

Tree-sitter MCP

作者 wrale · wrale/mcp-server-tree-sitter

Tree-sitterをMCPとして — ASTレベルのアクセスをClaudeに与えることで、47件のランダムな正規表現マッチではなく関数そのものを編集できる。

tree-sitter-mcpはTree-sitterパーサーをMCPツールとしてラップします。Claudeにコードをgrepさせる代わりに、get_functionlist_symbolsfind_callsを与えることができます。エージェントはASTレベルで外科的な編集を実行できます:「たまたまマッチする文字列リテラルは除外して、関数定義のみをリネームする」といった操作が可能です。

なぜ使うのか

主な機能

ライブデモ

実際の動作

tree-sitter-mcp.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "tree-sitter-mcp": {
      "command": "uvx",
      "args": [
        "mcp-server-tree-sitter"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "tree-sitter-mcp": {
      "command": "uvx",
      "args": [
        "mcp-server-tree-sitter"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "tree-sitter-mcp": {
      "command": "uvx",
      "args": [
        "mcp-server-tree-sitter"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "tree-sitter-mcp": {
      "command": "uvx",
      "args": [
        "mcp-server-tree-sitter"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "tree-sitter-mcp",
      "command": "uvx",
      "args": [
        "mcp-server-tree-sitter"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "tree-sitter-mcp": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-tree-sitter"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add tree-sitter-mcp -- uvx mcp-server-tree-sitter

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Tree-sitter MCP

偶然マッチする文字列はリネームせずに関数をリネームする

👤 リファクタリングを行う開発者 ⏱ ~15 min intermediate

使うタイミング: validateTokenverifyTokenにリネームしたいが、「this validates token」というdocstringもリネームしたくない場合。

フロー
  1. 定義を探す
    Use tree-sitter MCP. Find the definition of validateToken — function only, ignore strings and comments.✓ コピーしました
    → ファイル:行とノード型「function_definition」を持つASTノード
  2. 参照を探す
    Find all call sites of validateToken — only identifier-resolution matches.✓ コピーしました
    → 文字列内の誤検知なしの参照リスト
  3. リネーム
    Rename to verifyToken everywhere it's a real reference. Show me the diff.✓ コピーしました
    → 識別子の位置のみにN件のリネームを含むdiff

結果: コメント、文字列、ドキュメントを触れないクリーンなリネーム。

注意点
  • 動的ディスパッチ/リフレクションによるミス — 動的な使用のセマンティック検索にsembleを組み合わせる
組み合わせ: filesystem · semble-mcp

メソッド抽出リファクタリングのために関数本体を正確に取り出す

👤 長い関数をクリーンアップするエンジニア ⏱ ~20 min intermediate

使うタイミング: 関数の42〜87行目をヘルパーに抽出したい — 外科的に。

フロー
  1. スライス
    Show me the exact AST node for the for-loop at line 42 in handler.py.✓ コピーしました
    → バイト範囲を持つループノード
  2. 抽出
    Move that loop into a new function process_batch. Replace original with a call.✓ コピーしました
    → 元のインデントとスコープを尊重したリファクタリングdiff

結果: 初回で正常にコンパイルされるリファクタリング。

注意点
  • キャプチャされた変数が引数に変換されない — 抽出前にClaudeに自由変数を列挙させる

ファイルごとの複雑度メトリクスを計算する

👤 エンジニアリングマネージャー / 技術的負債の監査 ⏱ ~25 min intermediate

使うタイミング: 複雑なコードのホットスポットマップが必要な場合。

フロー
  1. 走査
    For every .py file under src/, count function defs and rough cyclomatic complexity using AST.✓ コピーしました
    → ファイルごとのテーブル
  2. ランキング
    Top 10 most complex functions — report file, line, name, score.✓ コピーしました
    → 順位付けされたホットスポットリスト

結果: 優先度付けされたリファクタリングバックログ。

注意点
  • 循環的複雑度 ≠ 可読性 — レビュアーの判断と組み合わせる;メトリクスは出発点に過ぎない

組み合わせ

他のMCPと組み合わせて10倍の力を

tree-sitter-mcp + semble-mcp

セマンティック検索(semble)+ 構造的精度(tree-sitter)

Use semble to find probable call sites, then tree-sitter to verify each is a real identifier.✓ コピーしました
tree-sitter-mcp + filesystem

ASTから導出された範囲のみを読む

Tree-sitter the function range, then filesystem to dump the exact bytes.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
parse_file path ファイルの完全なASTを取得するとき free
list_symbols path, kind? トップレベルのインベントリ free
find_definition name, scope? 何かが定義されている場所を特定するとき free
find_references name 安全なリネームのために呼び出し箇所を見つけるとき free
get_node path, byte_range or line_range リファクタリングのために正確なノードをスライスするとき free

コストと制限

運用コスト

APIクォータ
なし — ローカル
呼び出しあたりのトークン
100〜1500 token
金額
無料
ヒント
ファイル全体をダンプせず、ノードをスライスする

セキュリティ

権限、シークレット、影響範囲

最小スコープ: ローカルファイル読み取り
認証情報の保管: なし
データ送信先: なし

トラブルシューティング

よくあるエラーと対処法

言語がサポートされていない

関連するTree-sitter文法を追加;READMEのサポートリストを確認

部分的なファイルでパースエラー

Tree-sitterは回復するがERRORノードをフラグする;構文的に修正するか無視する

初回実行が遅い

文法のコンパイルは一度だけ;以降の実行は高速

代替案

Tree-sitter MCP 他との比較

代替案代わりに使う場面トレードオフ
ast-grepCLIファーストの構造的検索/置換ツールが必要な場合MCPとしての統合が弱い
言語サーバー(LSP)構文だけでなく完全な型解決が必要な場合セットアップが重い;言語ごとに1つのサーバーが必要

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る