/ 디렉터리 / 플레이그라운드 / Tree-sitter MCP
● 커뮤니티 wrale ⚡ 바로 사용

Tree-sitter MCP

제작: wrale · wrale/mcp-server-tree-sitter

MCP로 연결된 Tree-sitter — Claude에게 AST 수준 접근권을 주어 47개의 무작위 regex 매칭이 아닌 함수를 정확히 편집합니다.

tree-sitter-mcp는 Tree-sitter 파서를 MCP 도구로 래핑합니다. Claude에게 코드를 grep하게 하는 대신 get_function, list_symbols, find_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으로 이름을 변경하고 싶지만 '이것은 token을 검증한다'라고 말하는 docstring은 변경하지 않고 싶을 때.

흐름
  1. 정의 찾기
    Use tree-sitter MCP. Find the definition of validateToken — function only, ignore strings and comments.✓ 복사됨
    → file:line과 노드 타입 '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

결과: 주석, 문자열, 문서를 건드리지 않는 깔끔한 이름 변경.

함정
  • 동적 디스패치 / 리플렉션 누락 — 동적 사용에 대한 의미론적 recall을 위해 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

의미론적 recall (semble) + 구조적 정밀성 (tree-sitter)

tree-sitter-mcp + filesystem

AST에서 파생된 범위만 읽기

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
parse_file path 파일의 전체 AST 가져오기 무료
list_symbols path, kind? 최상위 수준 목록 무료
find_definition name, scope? 정의된 위치 파악 무료
find_references name 안전한 이름 변경을 위한 호출 위치 찾기 무료
get_node path, byte_range or line_range 리팩토링을 위한 정확한 노드 슬라이싱 무료

비용 및 제한

운영 비용

API 쿼터
없음 — 로컬
호출당 토큰
100–1500
금액
무료
전체 파일을 덤프하지 말고 노드를 슬라이싱

보안

권한, 시크릿, 파급범위

최소 스코프: 로컬 파일 읽기
자격 증명 저장: 없음
데이터 외부 송신: 없음

문제 해결

자주 발생하는 오류와 해결

언어 미지원

관련 Tree-sitter 문법 추가; README의 지원 목록 확인

부분 파일에서 파싱 오류

Tree-sitter는 복구하지만 ERROR 노드를 표시함; 구문적으로 수정하거나 무시

첫 실행 느림

문법 컴파일이 한 번만 발생함; 이후 실행은 빠름

대안

Tree-sitter MCP 다른 것과 비교

대안언제 쓰나단점/장점
ast-grepCLI 우선 구조적 검색/교체 도구가 필요할 때MCP로서의 통합이 덜 됨
Language servers (LSP)구문만이 아닌 완전한 타입 해석이 필요할 때더 무거운 설정; 언어별 서버 하나씩

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기