npm package: @iflow-mcp/cometixai-cometix-indexer
Description: Cometix Indexer - MCP server for semantic codebase search with Cursor API integration
Latest version: 0.0.1

## Cometix Indexer（MCP 服务器）

语义代码搜索的本地索引与检索服务。该项目实现了一个基于 Model Context Protocol（MCP）的服务端，封装了对 Cursor 后端 RepositoryService 的建库、同步与搜索流程，通过两类 MCP 工具对外提供能力：项目索引（index_project）与语义搜索（codebase_search）。

### TODOs
- [x]  Cursor Indexing(ok)
- [ ] Warp Embedding
- [ ] Trae Indexing
- [ ] Augment Indexing
- [ ] Github Indexing(来源Copilot Indexing)

### 功能概述
- 索引：扫描本地工作区、生成文件清单、分批上传至 Cursor 服务端并完成建库标记。
- 增量同步：监听文件变更，按需进行轻量同步，保证搜索前的索引新鲜度。
- 语义搜索：调用远端检索接口并自动解密返回的加密路径，直观展示命中。
- 运行形态：作为 MCP 服务器通过 stdio 运行并响应工具调用。

## MCP
### Claude Code
#### npx格式
```
{
  "mcpServers": {
    "cometix-indexer": {
      "command": "npx",
      "args": [
        "-y",
        "--package=git+https://github.com/CometixAI/Cometix-Indexer.git",
        "cometix-indexer",
        "start"
      ],
      "env": {
        "CURSOR_AUTH_TOKEN": "",
        "CURSOR_BASE_URL": "https://api2.cursor.sh"
      }
    }
  }
}
````

#### npm格式(Local)
```
{
  "mcpServers": {
    "cometix-indexer": {
      "command": "npm",
      "args": [
        "--prefix",
        "<path>",
        "run",
        "start"
      ],
      "env": {
        "CURSOR_AUTH_TOKEN": "",
        "CURSOR_BASE_URL": "https://api2.cursor.sh"
      }
    }
  }
}
```

### MCP 工具
- `index_project`
  - 入参：`{ workspacePath: string; verbose?: boolean }`
  - 行为：初始化/刷新索引，按批全量上传并计划自动同步；当 `verbose=true` 时，额外返回本轮上传的相对路径文件列表。
  - 返回：`{ codebaseId, uploaded, batches, nextSyncAt }`

- `codebase_search`
  - 入参：`{ query: string; paths_include_glob?: string; paths_exclude_glob?: string; max_results?: number }`
  - 行为：在“唯一一个”已索引工作区内进行搜索；支持包含/排除 glob 过滤（基于工作区相对路径），并在搜索前进行按需增量同步。
  - 返回：`{ total, hits: Array<{ path, score, startLine, endLine }> }`

示例（概念性）：
```json
{
  "name": "index_project",
  "arguments": { "workspacePath": "E:/project" }
}
```
```json
{
  "name": "codebase_search",
  "arguments": { "query": "What is the xxx paper", "paths_include_glob": "src/**/*.rs", "paths_exclude_glob": "**/tests/**", "max_results": 50 }
}
```

### 目录结构（核心）
- `src/index.ts`：进程入口。解析 CLI/环境变量，创建 MCP `Server` 并接入 stdio 传输。
- `src/server.ts`：注册 MCP 工具：`index_project` 与 `codebase_search`。
- `src/services/repositoryIndexer.ts`：索引与同步核心逻辑（初次建库、分批上传、增量同步、定时器）。
- `src/services/codeSearcher.ts`：搜索逻辑（预同步、远端搜索、结果解密与规整）。
- `src/services/fileWatcher.ts`：文件变更监听，标记 `pendingChanges`。
- `src/services/stateManager.ts`：工作区状态持久化（`state.json`）。
- `src/crypto/pathEncryption.ts`：路径分段加解密方案与 Windows/Posix 互转。
- `src/client/proto.ts`：加载 `proto/repository_service.proto` 并以 protobuf 编解码发送 HTTP 请求。
- `src/client/cursorApi.ts`：封装调用的具体 RepositoryService 接口。
- `src/utils/env.ts`：配置解析、默认参数与请求头。
- `src/utils/fs.ts`：忽略规则、文件遍历与可嵌入文件清单读取。
- `src/utils/semaphore.ts`：并发控制与带重试的信号量。

### 工作原理
1) 初次索引
- 扫描工作区（忽略 `node_modules/`、`.git/`、`dist/` 等）并生成默认清单 `embeddable_files.txt`（每个工作区独立存放）。
- 基于 `@anysphere/file-service` 的 `MerkleClient` 构建目录 Merkle 树，获取 `rootHash` 与 `simhash`。
- 生成路径加密密钥（`pathKey`），并以 `V1MasterKeyedEncryptionScheme` 对相对路径逐段加密。
- 将文件按批（`INITIAL_UPLOAD_MAX_FILES`）执行完整流程：
  - `FastRepoInitHandshakeV2` 握手（返回 `codebaseId`）。
  - 上传本批文件（`FastUpdateFileV2`）。
  - `EnsureIndexCreated` 与 `FastRepoSyncComplete` 标记索引完成。
- 将 `codebaseId`、`pathKey`、`orthogonalTransformSeed` 等持久化到工作区状态 `state.json`。

2) 增量同步
- `chokidar` 监听文件变更，只标记 `pendingChanges = true`（轻量）。
- 搜索或定时器触发时，如存在变更：
  - 使用 `SyncMerkleSubtreeV2` 对目录节点进行比对，定位不匹配的子树与文件。
  - 对变更文件执行同批上传与 `EnsureIndexCreated`/`FastRepoSyncComplete`。
  - 清理 `pendingChanges` 标记并持久化。

3) 语义搜索
- 搜索前先触发一次按需增量同步以保证结果新鲜。
- 调用 `SearchRepositoryV2` 并对返回的加密路径用本地 `pathKey` 解密为 Posix 相对路径，输出 `{ path, score, startLine, endLine }`。

### 运行要求
- Node.js >= 18
- `proto/repository_service.proto` 必须存在（仓库已附带）。

### 启动（npx）
```bash
npx -y --package=git+https://github.com/CometixAI/Cometix-Indexer.git cometix-indexer -- --auth-token "$CURSOR_AUTH_TOKEN" --base-url https://api2.cursor.sh
```

### 启动（npm scripts）
```bash
# 安装依赖并构建
npm install
npm run build

# 方式一：通过环境变量（PowerShell 示例）
$env:CURSOR_AUTH_TOKEN="你的Token"; npm run start

# 方式二：通过参数传递（-- 之后的参数会透传给脚本）
npm run start -- --auth-token 你的Token --base-url https://api2.cursor.sh --log-level info

# 开发模式（监听编译；运行需要另开终端执行 start）
npm run dev
# 另开一个终端
npm run start -- --auth-token 你的Token
```
可用环境变量：
- `CURSOR_AUTH_TOKEN`（必需）
- `CURSOR_BASE_URL`（默认 `https://api2.cursor.sh`）
- `LOG_LEVEL`（`debug` | `info` | `warning` | `error`，默认 `info`）

### 环境变量与默认值（可调优）
- `SYNC_CONCURRENCY`（默认 4）
- `SYNC_MAX_NODES`（默认 2000）
- `SYNC_MAX_ITERATIONS`（默认 10000）
- `SYNC_LIST_LIMIT`（默认 1000）
- `FILE_SIZE_LIMIT_BYTES`（默认 2MB，超出将跳过）
- `INITIAL_UPLOAD_MAX_FILES`（默认 10，初次索引分批大小）
- `PROTO_TIMEOUT_MS`（默认 30000）
- `PROTO_SEARCH_TIMEOUT_MS`（默认 60000）
- `AUTO_SYNC_INTERVAL_MS`（默认 5 分钟）

### 开发安装与构建
```bash
npm install
npm run build
```

### 状态与数据持久化
- 工作区专属数据目录：`%USERPROFILE%/.cometix/cursor-indexer/<safeName>-<hash>/`
  - `state.json`：保存 `codebaseId`、`pathKey`、`orthogonalTransformSeed` 等。
  - `embeddable_files.txt`：首次索引生成的可嵌入文件列表，可手动编辑以精确控制索引范围。

### 路径加密与兼容性
- 采用分段对称加密（`aes-256-ctr`）并在 Windows 相对路径（以 `./` 或 `.\` 起始）层面进行，避免泄露真实目录结构。
- 搜索结果会自动尝试使用本地 `pathKey` 解密为 Posix 相对路径，失败时回退为原始加密串。

### 忽略与限制
- 默认忽略：`node_modules/`、`.git/`、`.cursor/`、`dist/`、`build/`、`coverage/` 等。
- 超过 `FILE_SIZE_LIMIT_BYTES` 的文件会被跳过。

### 常见问题
- 报错 `repository_service.proto not found`：请确认项目根目录存在 `proto/repository_service.proto`。
- `Missing CURSOR_AUTH_TOKEN`：通过 `--auth-token` 传参或设置环境变量 `CURSOR_AUTH_TOKEN`。

### 许可
MIT