|
| 1 | +# 코드 인덱스 MCP |
| 2 | + |
| 3 | +<div align="center"> |
| 4 | + |
| 5 | +[](https://modelcontextprotocol.io) |
| 6 | +[](https://www.python.org/) |
| 7 | +[](LICENSE) |
| 8 | + |
| 9 | +**대규모 언어 모델을 위한 지능형 코드 인덱싱과 분석** |
| 10 | + |
| 11 | +고급 검색, 정밀 분석, 유연한 탐색 기능으로 AI가 코드베이스를 이해하고 활용하는 방식을 혁신하세요. |
| 12 | + |
| 13 | +</div> |
| 14 | + |
| 15 | +<a href="https://glama.ai/mcp/servers/@johnhuang316/code-index-mcp"> |
| 16 | + <img width="380" height="200" src="https://glama.ai/mcp/servers/@johnhuang316/code-index-mcp/badge" alt="code-index-mcp MCP server" /> |
| 17 | +</a> |
| 18 | + |
| 19 | +## 개요 |
| 20 | + |
| 21 | +Code Index MCP는 [Model Context Protocol](https://modelcontextprotocol.io) 기반 MCP 서버로, AI 어시스턴트와 복잡한 코드베이스 사이를 연결합니다. 빠른 인덱싱, 강력한 검색, 정밀한 코드 분석을 제공하여 AI가 프로젝트 구조를 정확히 파악하고 효과적으로 지원하도록 돕습니다. |
| 22 | + |
| 23 | +**이럴 때 안성맞춤:** 코드 리뷰, 리팩터링, 문서화, 디버깅 지원, 아키텍처 분석 |
| 24 | + |
| 25 | +## 빠른 시작 |
| 26 | + |
| 27 | +### 🚀 **권장 설정 (대부분의 사용자)** |
| 28 | + |
| 29 | +어떤 MCP 호환 애플리케이션에서도 몇 단계만으로 시작할 수 있습니다. |
| 30 | + |
| 31 | +**사전 준비:** Python 3.10+ 및 [uv](https://github.com/astral-sh/uv) |
| 32 | + |
| 33 | +1. **MCP 설정에 서버 추가** (예: `claude_desktop_config.json` 또는 `~/.claude.json`) |
| 34 | + ```json |
| 35 | + { |
| 36 | + "mcpServers": { |
| 37 | + "code-index": { |
| 38 | + "command": "uvx", |
| 39 | + "args": ["code-index-mcp"] |
| 40 | + } |
| 41 | + } |
| 42 | + } |
| 43 | + ``` |
| 44 | + |
| 45 | +2. **애플리케이션 재시작** – `uvx`가 설치와 실행을 자동으로 처리합니다. |
| 46 | + |
| 47 | +3. **사용 시작** (AI 어시스턴트에게 아래 프롬프트를 전달) |
| 48 | + ``` |
| 49 | + 프로젝트 경로를 /Users/dev/my-react-app 으로 설정해줘 |
| 50 | + 이 프로젝트에서 모든 TypeScript 파일을 찾아줘 |
| 51 | + "authentication" 관련 함수를 검색해줘 |
| 52 | + src/App.tsx 파일을 분석해줘 |
| 53 | + ``` |
| 54 | + |
| 55 | +## 대표 사용 사례 |
| 56 | + |
| 57 | +**코드 리뷰:** "예전 API를 사용하는 부분을 모두 찾아줘" |
| 58 | +**리팩터링 지원:** "이 함수는 어디에서 호출되나요?" |
| 59 | +**프로젝트 학습:** "이 React 프로젝트의 핵심 컴포넌트를 보여줘" |
| 60 | +**디버깅:** "에러 처리 로직이 있는 파일을 찾아줘" |
| 61 | + |
| 62 | +## 주요 기능 |
| 63 | + |
| 64 | +### 🧠 **지능형 검색과 분석** |
| 65 | +- **듀얼 전략 아키텍처:** 7개 핵심 언어는 전용 tree-sitter 파서를 사용하고, 그 외 50+ 파일 형식은 폴백 전략으로 처리 |
| 66 | +- **직접 Tree-sitter 통합:** 특화 언어에 정규식 폴백 없음 – 문제 시 즉시 실패하고 명확한 오류 메시지 제공 |
| 67 | +- **고급 검색:** ugrep, ripgrep, ag, grep 중 최적의 도구를 자동 선택해 활용 |
| 68 | +- **범용 파일 지원:** 정교한 AST 분석부터 기본 파일 인덱싱까지 폭넓게 커버 |
| 69 | +- **파일 분석:** `build_deep_index` 실행 후 구조, 임포트, 클래스, 메서드, 복잡도 지표를 심층적으로 파악 |
| 70 | + |
| 71 | +### 🗂️ **다중 언어 지원** |
| 72 | +- **Tree-sitter AST 분석(7종):** Python, JavaScript, TypeScript, Java, Go, Objective-C, Zig |
| 73 | +- **폴백 전략(50+ 형식):** C/C++, Rust, Ruby, PHP 등 대부분의 프로그래밍 언어 지원 |
| 74 | +- **문서 및 설정 파일:** Markdown, JSON, YAML, XML 등 상황에 맞는 처리 |
| 75 | +- **웹 프론트엔드:** Vue, React, Svelte, HTML, CSS, SCSS |
| 76 | +- **데이터 계층:** SQL, NoSQL, 스토어드 프로시저, 마이그레이션 스크립트 |
| 77 | +- **구성 파일:** JSON, YAML, XML, Markdown |
| 78 | +- **[지원 파일 전체 목록 보기](#지원-파일-형식)** |
| 79 | + |
| 80 | +### 🔄 **실시간 모니터링 & 자동 새로고침** |
| 81 | +- **파일 워처:** 파일 변경 시 자동으로 얕은 인덱스(파일 목록) 갱신 |
| 82 | +- **크로스 플랫폼:** 운영체제 기본 파일시스템 이벤트 활용 |
| 83 | +- **스마트 처리:** 빠른 변경을 묶어 과도한 재빌드를 방지 |
| 84 | +- **얕은 인덱스 갱신:** 파일 목록을 최신 상태로 유지하며, 심볼 데이터가 필요하면 `build_deep_index`를 실행 |
| 85 | + |
| 86 | +### ⚡ **성능 & 효율성** |
| 87 | +- **Tree-sitter AST 파싱:** 정확한 심볼 추출을 위한 네이티브 구문 분석 |
| 88 | +- **지속 캐싱:** 인덱스를 저장해 이후 응답 속도를 극대화 |
| 89 | +- **스마트 필터링:** 빌드 디렉터리·임시 파일을 자동 제외 |
| 90 | +- **메모리 효율:** 대규모 코드베이스를 염두에 둔 설계 |
| 91 | +- **직접 의존성:** 불필요한 폴백 없이 명확한 오류 메시지 제공 |
| 92 | + |
| 93 | +## 지원 파일 형식 |
| 94 | + |
| 95 | +<details> |
| 96 | +<summary><strong>💻 프로그래밍 언어 (클릭하여 확장)</strong></summary> |
| 97 | + |
| 98 | +**전용 Tree-sitter 전략 언어:** |
| 99 | +- **Python** (`.py`, `.pyw`) – 클래스/메서드 추출 및 호출 추적이 포함된 완전 AST 분석 |
| 100 | +- **JavaScript** (`.js`, `.jsx`, `.mjs`, `.cjs`) – ES6+ 클래스와 함수를 tree-sitter로 파싱 |
| 101 | +- **TypeScript** (`.ts`, `.tsx`) – 인터페이스를 포함한 타입 인지 심볼 추출 |
| 102 | +- **Java** (`.java`) – 클래스 계층, 메서드 시그니처, 호출 관계 분석 |
| 103 | +- **Go** (`.go`) – 구조체 메서드, 리시버 타입, 함수 분석 |
| 104 | +- **Objective-C** (`.m`, `.mm`) – 클래스/인스턴스 메서드를 +/- 표기로 구분 |
| 105 | +- **Zig** (`.zig`, `.zon`) – 함수와 구조체를 tree-sitter AST로 분석 |
| 106 | + |
| 107 | +**기타 모든 프로그래밍 언어:** |
| 108 | +나머지 언어는 **폴백 파싱 전략**으로 기본 메타데이터와 파일 인덱싱을 제공합니다. 예: |
| 109 | +- **시스템/저수준:** C/C++ (`.c`, `.cpp`, `.h`, `.hpp`), Rust (`.rs`) |
| 110 | +- **객체지향:** C# (`.cs`), Kotlin (`.kt`), Scala (`.scala`), Swift (`.swift`) |
| 111 | +- **스크립트:** Ruby (`.rb`), PHP (`.php`), Shell (`.sh`, `.bash`) |
| 112 | +- **그 외 40+ 형식** – 폴백 전략으로 빠른 탐색 가능 |
| 113 | + |
| 114 | +</details> |
| 115 | + |
| 116 | +<details> |
| 117 | +<summary><strong>🌐 웹 프론트엔드 & UI</strong></summary> |
| 118 | + |
| 119 | +- 프레임워크: Vue (`.vue`), Svelte (`.svelte`), Astro (`.astro`) |
| 120 | +- 스타일링: CSS (`.css`, `.scss`, `.less`, `.sass`, `.stylus`, `.styl`), HTML (`.html`) |
| 121 | +- 템플릿: Handlebars (`.hbs`, `.handlebars`), EJS (`.ejs`), Pug (`.pug`) |
| 122 | + |
| 123 | +</details> |
| 124 | + |
| 125 | +<details> |
| 126 | +<summary><strong>🗄️ 데이터 계층 & SQL</strong></summary> |
| 127 | + |
| 128 | +- **SQL 변형:** 표준 SQL (`.sql`, `.ddl`, `.dml`), 데이터베이스별 방언 (`.mysql`, `.postgresql`, `.psql`, `.sqlite`, `.mssql`, `.oracle`, `.ora`, `.db2`) |
| 129 | +- **DB 객체:** 프로시저/함수 (`.proc`, `.procedure`, `.func`, `.function`), 뷰/트리거/인덱스 (`.view`, `.trigger`, `.index`) |
| 130 | +- **마이그레이션 도구:** 마이그레이션 파일 (`.migration`, `.seed`, `.fixture`, `.schema`), 도구 구성 (`.liquibase`, `.flyway`) |
| 131 | +- **NoSQL & 그래프:** 질의 언어 (`.cql`, `.cypher`, `.sparql`, `.gql`) |
| 132 | + |
| 133 | +</details> |
| 134 | + |
| 135 | +<details> |
| 136 | +<summary><strong>📄 문서 & 설정 파일</strong></summary> |
| 137 | + |
| 138 | +- Markdown (`.md`, `.mdx`) |
| 139 | +- 구성 파일 (`.json`, `.xml`, `.yml`, `.yaml`) |
| 140 | + |
| 141 | +</details> |
| 142 | + |
| 143 | +## 사용 가능한 도구 |
| 144 | + |
| 145 | +### 🏗️ **프로젝트 관리** |
| 146 | +| 도구 | 설명 | |
| 147 | +|------|------| |
| 148 | +| **`set_project_path`** | 프로젝트 디렉터리의 인덱스를 초기화 | |
| 149 | +| **`refresh_index`** | 파일 변경 후 얕은 파일 인덱스를 재생성 | |
| 150 | +| **`build_deep_index`** | 심층 분석에 사용하는 전체 심볼 인덱스를 생성 | |
| 151 | +| **`get_settings_info`** | 현재 프로젝트 설정과 상태를 확인 | |
| 152 | + |
| 153 | +*심볼 레벨 데이터가 필요하면 `build_deep_index`를 실행하세요. 기본 얕은 인덱스는 빠른 파일 탐색을 담당합니다.* |
| 154 | + |
| 155 | +### 🔍 **검색 & 탐색** |
| 156 | +| 도구 | 설명 | |
| 157 | +|------|------| |
| 158 | +| **`search_code_advanced`** | 정규식, 퍼지 매칭, 파일 필터링을 지원하는 스마트 검색 | |
| 159 | +| **`find_files`** | 글롭 패턴으로 파일 찾기 (예: `**/*.py`) | |
| 160 | +| **`get_file_summary`** | 파일 구조, 함수, 임포트, 복잡도를 분석 (심층 인덱스 필요) | |
| 161 | + |
| 162 | +### 🔄 **모니터링 & 자동 새로고침** |
| 163 | +| 도구 | 설명 | |
| 164 | +|------|------| |
| 165 | +| **`get_file_watcher_status`** | 파일 워처 상태와 구성을 확인 | |
| 166 | +| **`configure_file_watcher`** | 자동 새로고침 설정 (활성/비활성, 지연 시간, 추가 제외 패턴) | |
| 167 | + |
| 168 | +### 🛠️ **시스템 & 유지 관리** |
| 169 | +| 도구 | 설명 | |
| 170 | +|------|------| |
| 171 | +| **`create_temp_directory`** | 인덱스 저장용 임시 디렉터리를 생성 | |
| 172 | +| **`check_temp_directory`** | 인덱스 저장 위치와 권한을 확인 | |
| 173 | +| **`clear_settings`** | 모든 설정과 캐시 데이터를 초기화 | |
| 174 | +| **`refresh_search_tools`** | 사용 가능한 검색 도구를 재검색 (ugrep, ripgrep 등) | |
| 175 | + |
| 176 | +## 사용 예시 |
| 177 | + |
| 178 | +### 🧭 **빠른 시작 워크플로** |
| 179 | + |
| 180 | +**1. 프로젝트 초기화** |
| 181 | +``` |
| 182 | +프로젝트 경로를 /Users/dev/my-react-app 으로 설정해줘 |
| 183 | +``` |
| 184 | +*프로젝트를 설정하고 얕은 인덱스를 생성합니다.* |
| 185 | + |
| 186 | +**2. 프로젝트 구조 탐색** |
| 187 | +``` |
| 188 | +src/components 안의 TypeScript 컴포넌트 파일을 모두 찾아줘 |
| 189 | +``` |
| 190 | +*사용 도구: `find_files` (`src/components/**/*.tsx`)* |
| 191 | + |
| 192 | +**3. 핵심 파일 분석** |
| 193 | +``` |
| 194 | +src/api/userService.ts 요약을 알려줘 |
| 195 | +``` |
| 196 | +*사용 도구: `get_file_summary` (함수, 임포트, 복잡도 표시)* |
| 197 | +*팁: `needs_deep_index` 응답이 나오면 먼저 `build_deep_index`를 실행하세요.* |
| 198 | + |
| 199 | +### 🔍 **고급 검색 예시** |
| 200 | + |
| 201 | +<details> |
| 202 | +<summary><strong>코드 패턴 검색</strong></summary> |
| 203 | + |
| 204 | +``` |
| 205 | +"get.*Data"에 해당하는 함수 호출을 정규식으로 찾아줘 |
| 206 | +``` |
| 207 | +*예: `getData()`, `getUserData()`, `getFormData()`* |
| 208 | + |
| 209 | +</details> |
| 210 | + |
| 211 | +<details> |
| 212 | +<summary><strong>퍼지 함수 검색</strong></summary> |
| 213 | + |
| 214 | +``` |
| 215 | +'authUser'와 유사한 인증 관련 함수를 찾아줘 |
| 216 | +``` |
| 217 | +*예: `authenticateUser`, `authUserToken`, `userAuthCheck`* |
| 218 | + |
| 219 | +</details> |
| 220 | + |
| 221 | +<details> |
| 222 | +<summary><strong>언어별 검색</strong></summary> |
| 223 | + |
| 224 | +``` |
| 225 | +Python 파일에서만 "API_ENDPOINT" 를 찾아줘 |
| 226 | +``` |
| 227 | +*`search_code_advanced` + `file_pattern="*.py"`* |
| 228 | + |
| 229 | +</details> |
| 230 | + |
| 231 | +<details> |
| 232 | +<summary><strong>자동 새로고침 설정</strong></summary> |
| 233 | + |
| 234 | +``` |
| 235 | +파일 변경 시 자동으로 인덱스를 새로고침하도록 설정해줘 |
| 236 | +``` |
| 237 | +*`configure_file_watcher`로 활성화 및 지연 시간 설정* |
| 238 | + |
| 239 | +</details> |
| 240 | + |
| 241 | +<details> |
| 242 | +<summary><strong>프로젝트 유지 관리</strong></summary> |
| 243 | + |
| 244 | +``` |
| 245 | +새 컴포넌트를 추가했어. 프로젝트 인덱스를 다시 빌드해줘 |
| 246 | +``` |
| 247 | +*`refresh_index`로 빠르게 얕은 인덱스를 업데이트* |
| 248 | + |
| 249 | +</details> |
| 250 | + |
| 251 | +## 문제 해결 |
| 252 | + |
| 253 | +### 🔄 **자동 새로고침이 동작하지 않을 때** |
| 254 | +- 환경 문제로 `watchdog`가 빠졌다면 설치: `pip install watchdog` |
| 255 | +- 수동 새로고침: 변경 후 `refresh_index` 도구 실행 |
| 256 | +- 워처 상태 확인: `get_file_watcher_status` 도구로 활성 여부 점검 |
| 257 | + |
| 258 | +## 개발 & 기여 |
| 259 | + |
| 260 | +### 🛠️ **소스에서 실행하기** |
| 261 | +```bash |
| 262 | +git clone https://github.com/johnhuang316/code-index-mcp.git |
| 263 | +cd code-index-mcp |
| 264 | +uv sync |
| 265 | +uv run code-index-mcp |
| 266 | +``` |
| 267 | + |
| 268 | +### 🧪 **디버깅 도구** |
| 269 | +```bash |
| 270 | +npx @modelcontextprotocol/inspector uvx code-index-mcp |
| 271 | +``` |
| 272 | + |
| 273 | +### 🤝 **기여 안내** |
| 274 | +Pull Request를 언제든 환영합니다. 변경 사항과 테스트 방법을 함께 공유해주세요. |
| 275 | + |
| 276 | +--- |
| 277 | + |
| 278 | +### 📄 **라이선스** |
| 279 | +[MIT License](LICENSE) |
| 280 | + |
| 281 | +### 🌍 **번역본** |
| 282 | +- [English](README.md) |
| 283 | +- [繁體中文](README_zh.md) |
| 284 | +- [日本語](README_ja.md) |
0 commit comments