codindex MCP server
2026년 11월 9일 커밋tree-sitter와 SQLite를 사용하여 AI agent를 위한 로컬 우선 구조적 코드 인덱스를 제공하며, 고급 코드 탐색 및 영향 분석을 가능하게 합니다.
다른 이름 Bencibr/codindex
- 스타
- 3
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 9일
- 라이선스
- MIT
codindex MCP란?
codindex은(는) MCP server입니다. tree-sitter와 SQLite를 사용하여 AI agent를 위한 로컬 우선 구조적 코드 인덱스를 제공하며, 고급 코드 탐색 및 영향 분석을 가능하게 합니다.
프로젝트 README에서 생성된 요약
codindex MCP server 정보
codindex는 전체 저장소를 검색 가능한 코드 그래프로 변환하여 AI agent를 위한 구조적 코드 인덱스를 제공합니다. AI가 수천 줄의 소스 코드를 직접 읽거나 부정확한 텍스트 검색에 의존하게 하는 대신, 이 MCP server는 tree-sitter를 사용하여 추상 구문 트리(AST)를 파싱하고 그 결과물을 로컬 SQLite 데이터베이스에 저장합니다. 이러한 방식을 통해 agent는 코드를 외부 API에 업로드하거나 무거운 벡터 임베딩을 사용하지 않고도 함수 목록, 호출 그래프, 모듈 의존성을 이해할 수 있습니다.
개발자는 Model Context Protocol을 사용하여 이 server를 Claude Code, Cursor, VS Code 또는 Windsurf와 같은 클라이언트에 통합할 수 있습니다. 텔레메트리 없이 로컬 우선으로 작동하므로 소스 코드의 프라이버시가 보장됩니다. 시스템은 변경 사항의 영향을 예측하는 get_impact_analysis나 사용되지 않는 함수를 찾는 get_dead_code와 같은 32개의 특화된 도구를 제공합니다. TypeScript, JavaScript, Python, Go, Rust, Java를 지원하여 단순한 텍스트 스크래핑이 아닌 구조화된 쿼리를 통해 복잡한 코드베이스를 탐색할 수 있는 다재다능한 도구입니다.
활용 사례
- 1사용되지 않는 코드 식별저장소 내에서 실제로 호출되지 않는 함수 목록을 요청합니다.
- 2모듈 의존성 매핑서로 다른 모듈이 어떻게 상호작용하는지 조사하고 순환 의존성을 확인합니다.
- 3의미론적 코드 검색 수행단순한 텍스트 문자열 매칭이 아닌 호출 그래프를 탐색하여 관련 코드를 찾습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
구성
CODINDEX_DB
| 이름 | 설명 | 유형 |
|---|---|---|
| CODINDEX_DB | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능bencibr/codindex is public and reachablegithub.com/bencibr/codindex ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-09github.com/bencibr/codindex ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Codindex
本地代码索引服务:用 MCP 把代码库结构交给 AI。
tree-sitter 解析 AST,把函数、调用图、模块依赖图、控制流图存进单个 SQLite 文件, 通过 32 个 MCP 工具供 AI 查询。让 AI 不必 grep、不必逐文件 Read, 就知道仓库里有什么、谁调用了谁、改一处会波及哪里。
- 本地优先 — 不调 LLM API、不上传源码、无遥测
- 结构化 — 调用边由 AST 解析得出,不是正则猜的
- 快 — 自扫描 38 文件 / 145 函数 / 7,570 调用边,3.4 秒
以 MCP server 接入 Claude Code、Cursor、VS Code、Windsurf、Codex 及任何支持 Model Context Protocol 的 client。代码搜索与代码导航(code navigation)走 SQLite FTS5, 语义簇走调用图 BFS,产物是一张可查询的代码图(code graph)。
agentic coding 的关键瓶颈不是模型能力,而是给它看什么:整仓塞进上下文会爆,靠 grep 又只能拿到碎片。Codindex 把仓库索引成一份可复用的 repo index,让 AI 按需取结构化 code context——而不是把几万行源码反复喂进去。
它能回答哪些问题
| 你想知道 | 用 grep 的做法 | Codindex |
|---|---|---|
谁调用了 scanProject? |
正则匹配,跨文件/别名/方法调用全靠猜 | get_call_graph |
| 改这个函数波及哪些文件? | 手工顺藤摸瓜,容易漏 | get_impact_analysis |
| 这个模块依赖了谁,有循环吗? | import 正则,路径别名解析不了 | get_module_deps |
| 哪些函数从没被调用过? | 基本做不到 | get_dead_code |
| 有没有可复用的现成实现? | 靠记忆和全文搜索 | get_reuse_report |
| 这个函数的分支和循环长什么样? | 读源码脑补 | get_cfg |
在 CodeGraph 仓库(146 个 TS 文件)上实测:AST 统计到 1,926 个函数, 让 Agent 用 grep 手工统计只得到约 951 个——差一倍,且 grep 拿不到调用关系。
快速开始
需要 Node.js ≥ 22.5(依赖内置 node:sqlite)。
npm i -g codindex
装好后:
codindex --version # 确认版本
codindex --mcp # MCP stdio 模式,交给编辑器挂载
codindex # Web UI → http://localhost:3100
从源码安装(想改代码或跑测试时):
git clone https://github.com/Bencibr/codindex.git codindex && cd codindex
npm install && npm run build
npm pack && npm i -g ./codindex-*.tgz
仓库根 .npmrc 已声明 legacy-peer-deps=true(tree-sitter 语法包的 peer 范围互相冲突),
npm install 无需额外参数。开发用 npm run dev 起服务,npm test 跑测试(325 个用例)。
安装时若出现
npm warn allow-scripts tree-sitter-* (install: node-gyp-build), 属正常提示:语法包自带预编译产物,跳过 install 脚本不影响使用。 想消除提示可执行npm approve-scripts --allow-scripts-pending。
扫描项目
任选其一:
# Web UI:打开 http://localhost:3100,填名称和路径,点「添加」→「扫描」
# API
curl -X POST http://localhost:3100/api/projects \
-H "Content-Type: application/json" \
-d '{"name":"My Project","path":"/path/to/your/project"}'
curl -X POST http://localhost:3100/api/projects/{id}/scan
// MCP
add_project { name: "My Project", path: "/path/to/your/project" }
scan_project { project_id: "xxx" }
跑通一次完整链路
装完不确定有没有生效,按下面四步走一遍(以扫描本仓库为例):
1. 起服务
codindex # Web UI → http://localhost:3100
2. 注册项目 —— 返回体里的 id 就是后续所有接口要用的 project_id
curl -X POST http://localhost:3100/api/projects \
-H "Content-Type: application/json" \
-d '{"name":"Codindex","path":"/path/to/codindex"}'
# → {"id":"bace225b-...","name":"Codindex","status":"pending", ...}
3. 扫描 —— 同步执行,返回即完成
curl -X POST http://localhost:3100/api/projects/bace225b-.../scan
# → {"status":"complete","files":38,"functions":145,"calls":7572,"types":31,"cycles":0}
4. 验证能查
curl http://localhost:3100/api/projects/bace225b-.../overview
# → {"name":"Codindex","status":"ready","lastScanned":1794213971, ...}
或者走 MCP:add_project → scan_project → get_project_summary,
最后一步会返回 {files: 38, functions: 145, types: 31, calls: 7568, modules: 9}。
看到 status: "ready" 且函数数不为 0,就说明整条链路通了。
MCP 配置
Claude Code — 全局装好后直接用 codindex 命令(最省事):
{
"mcpServers": {
"codindex": {
"command": "codindex",
"args": ["--mcp"],
"env": { "CODINDEX_DB": "/absolute/path/to/codindex.db" }
}
}
}
或用命令:claude mcp add codindex -- codindex --mcp
不想全局安装,也可以直接跑克隆下来的源码(需要该 clone 已 npm install):
{
"mcpServers": {
"codindex": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/codindex/src/index.ts", "--mcp"]
}
}
}
Cursor / VS Code — 把同样的内容写进 .cursor/mcp.json 或 .vscode/mcp.json,
外层键改成 "servers"。
CODINDEX_DB必须是绝对路径,否则 MCP 子进程可能找不到数据库。
32 个工具
完整清单(参数、返回值、解析规则)见 docs/TOOLS.md。
| 类别 | 数量 | 代表工具 |
|---|---|---|
| 上下文与读取 | 6 | get_smart_context(三档深度)、get_context_bundle、get_function_context、get_function_body、get_function_list、get_file_content |
| 调用与影响 | 5 | get_call_graph、get_impact_analysis、get_bulk_impact、get_dead_code、get_raise_sites |
| 搜索 | 3 | search_code(FTS5 全文)、search_semantic(调用图 BFS 语义簇)、find_similar_functions |
| 结构 | 8 | get_project_summary、get_architecture_guide、get_module_deps、get_cfg、get_type_info、get_type_usage、get_export_inventory、get_bridge_map |
| 质量与追踪 | 5 | get_hotspots、get_reuse_report、get_test_coverage、get_change_guide、get_feature_tracking |
| 扫描 | 5 | add_project、scan_project、scan_project_incremental、start_watching、stop_watching |
| 合计 | 32 |
最常用的 get_smart_context 按 purpose 返回不同深度,避免为一点信息整段读源码:
| purpose | 返回 | 场景 |
|---|---|---|
explore |
摘要 + 文件 + 复杂度 + 调用者数 | 快速了解函数做什么 |
understand |
+ callers + callees + 类型 | 理解它在系统中的角色 |
modify |
+ 完整源码 + 影响文件 | 修改前的完整评估 |
除了工具,MCP 还提供 4 个 Resource(codindex://projects 及
codindex://projects/{id}/{overview,functions,features})供客户端直接挂载,
以及 1 个 Prompt(codindex-guide)用于注入使用指引。见
docs/TOOLS.md。
性能
扫描:优化后综合耗时 ~9s → ~3.5s(批量事务、批量 UPDATE、Map 索引替代嵌套循环)。 本仓库自扫描 3.4s,含进程启动。
AI 效率:我们跑了两轮,结论不一致,两个都放上来。
| 轮次 | 样本 | 工具调用 | 回传数据量 |
|---|---|---|---|
| 第一轮 | 单问题(架构概览) | 8 vs 17,−53% | 64KB vs 1.4MB,−95% |
| 第二轮 | 3 个问题 | 31 vs 28,+11% | — |
能可靠省下来的是单次回答的数据量:结构化查询返回几万字符,而不是几十万字符的源码。
这一点两轮都成立。
不能承诺的是调用次数一定下降——这取决于 Agent 是否真的信任并优先使用这些工具,
受提示词、模型版本影响。第一轮的 −53% 没能复现。完整记录在 src/tests/bench/。
常见问题
它是向量检索 / RAG 吗?
不是。没有 embedding、没有向量库、不调模型 API。search_semantic 这个名字容易误解,
它实际是基于调用图做 BFS:找到种子函数后把调用邻居一并返回,结果可复现、可审计。
需要联网或上传代码吗?
不需要。数据落在单个 SQLite 文件(默认 data/codindex.db)。
和 LSP / IDE 跳转有什么不同? LSP 面向编辑器里的即时导航;Codindex 面向「把整个仓库结构一次性交给 AI」—— 批量、可查询、可跨会话复用,还能算影响面、复用分和死代码。两者不冲突。
数据会过期吗?
start_watching 后文件变更 3 秒内同步。所有响应带 lastModified,可比对判断新鲜度。
装不上 / 跑不起来
| 症状 | 原因 | 处理 |
|---|---|---|
npm install 报 ERESOLVE could not resolve |
tree-sitter 各家语法包 peer 范围互斥(java ^0.21.1、python/rust ^0.22.1) |
仓库根 .npmrc 已写 legacy-peer-deps=true。若你删过或不在仓库根执行,加 npm install --legacy-peer-deps |
codindex 命令找不到 |
npm i -g 的 bin 目录不在 PATH |
npm config get prefix 看前缀,把 <prefix>/bin 加进 PATH |
| 启动报端口被占用 | 3100 已被别的服务(含 IDE 插件)占了 | PORT=3199 codindex |
| MCP 连上但查不到数据 / 库是空的 | CODINDEX_DB 用了相对路径,MCP 子进程 cwd 与你的 shell 不同 |
一律写绝对路径;或干脆不设,用默认 data/codindex.db |
| 函数数是 0、文件数却不为 0 | 语言不在支持列表内,或单文件 > 1MB | 见支持的语言 |
| 改了代码但结果没变 | 没重扫,或没开监听 | 调 scan_project_incremental,或 start_watching |
| 想从零重来 | 派生数据可随时重建 | 停掉进程,删掉 data/codindex.db*,重新扫描 |
.npmrc 那条最容易踩:它只在仓库根目录执行 npm install 时生效,
在子目录或别的目录装会重新触发 ERESOLVE。
支持的语言
| 语言 | 扩展名 | 提取内容 |
|---|---|---|
| TypeScript | .ts .tsx |
函数/方法/箭头函数、调用边、类型、import |
| JavaScript | .js .jsx .mjs .cjs |
同上 |
| Python | .py |
函数/方法、调用边、类字段 |
| Go | .go |
函数/方法(receiver)、调用边、struct 字段 |
| Rust | .rs |
函数/方法、调用边、struct/enum 字段 |
| Java | .java |
方法、调用边、类字段 |
单文件上限 1MB。未列出的语言不会被索引——宁可少支持,也不做「文件数统计上了、 函数却一个都解析不出来」的虚假覆盖。
技术栈
Node.js ≥ 22.5 + TypeScript (ESM) · Tree-sitter · SQLite(内置 node:sqlite,
可选 better-sqlite3)+ Drizzle ORM + FTS5 · Hono · React 18 + MUI 5(CDN 直出,无前端构建)
· @modelcontextprotocol/sdk · chokidar · Vitest
文档
| 文档 | 内容 |
|---|---|
| docs/ | 文档索引 —— 所有对外文档都收在这里 |
| docs/TOOLS.md | 32 个工具 + 4 个 Resource + 1 个 Prompt 的完整参考 |
| docs/API.md | Web API 路由、Web UI 页面、环境变量、PRD 功能追踪 |
| docs/CONTRIBUTING.md | 开发环境、提交流程、如何加语言 |
| docs/SECURITY.md | 漏洞报告渠道与安全边界 |
| CHANGELOG.md | 变更记录 |
| AGENTS.md / CLAUDE.md | 给 AI 助手的使用指南 |
开发常用命令:
npm run dev # tsx 直跑,改代码即生效
npx tsc --noEmit # 完整类型检查
npm test # 14 files / 325 tests(用临时库,不碰 data/)
npm run build # 产物在 dist/
codindex --help # CLI 用法
License
MIT
codindex MCP 질문
코드를 업로드하거나 인터넷에 연결해야 하나요?
아니요, 모든 데이터는 단일 SQLite 파일에 로컬로 저장되며 텔레메트리는 사용하지 않습니다.
LSP나 IDE 탐색과는 어떻게 다른가요?
LSP가 에디터의 즉각적인 탐색을 위한 것이라면, Codindex는 AI agent가 일괄 쿼리 및 영향 분석을 수행할 수 있도록 전체 저장소 구조를 제공하도록 설계되었습니다.