# @esankhan3/code-search-mcp 中文文档

规范地址：https://npmcn.com/package/%40esankhan3/code-search-mcp/

版本：1\.1\.7
npm 元数据更新时间：2026-11-13T07:43:27.425Z
中文译文更新时间：2026-11-14T06:46:36.359Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40esankhan3/code-search-mcp
原文对照：https://npmcn.com/package/%40esankhan3/code-search-mcp/?lang=original
项目主页：https://github.com/esanmohammad/Anvil/tree/main/packages/code-search-mcp#readme
源码仓库：https://github.com/esanmohammad/Anvil

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：313 kB，53 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：4 个
- 首次发布：2026-04-21T05:59:00.716Z
- 最新版本发布：2026-11-13T07:43:27.103Z
- 近 30 天下载量：2211（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：33（近 12 个月 33 个）

## 中文简介

多repo 代码搜索的 MCP 服务器 — GitHub org 或本地路径, 零配置

## 安装

```sh
npm install @esankhan3/code-search-mcp
```

也可以使用：`pnpm add @esankhan3/code-search-mcp`、`yarn add @esankhan3/code-search-mcp`、`bun add @esankhan3/code-search-mcp`

## README

# 代码搜索-mcp

[![npm](https://img.shields.io/npm/v/@esankhan3/code-search-mcp)](https://www.npmjs.com/package/@esankhan3/code-search-mcp) [![license: MIT](https://img.shields.io/badge/license-MIT-blue)](https://npmcn.com/package/%40esankhan3/code-search-mcp/LICENSE)

**密码搜索人工智能特工 遍及你拥有的所有仓库.**

`code-search-mcp` 是一个用于索引许多 即时寄存器并给出任何 MCP 客户端( Claude Code, Claude Desktop, 咒语,或者你自己的经纪人) 三件事 `grep` 和纯向量搜索 无法:

-   **找到正确代码的混合搜索.** 它处理精确的识别器, 在一个查询路径中部分名称、错误字符串和纯英语问题.
-   **密码图.** 特工可以看见呼叫者 被呼叫者 呼叫链 死亡密码, 和爆炸半径 diff.
-   **一个系统图横跨仓库.** 它连接到HTTP路线, gRPC 服务、Kafka专题、数据库表格、环境 vars 和共享类型 连接您的服务, 因此“ 谁消费这个话题 ” 有一个答案 .

它运行在笔记本电脑在stdio, 或者作为一个共享的HTTP服务器为整个团队. 它被测试在超过100万个索引代码块.

```sh
npm install -g @esankhan3/code-search-mcp
ollama pull bge-m3                                   # or use an OpenAI / Voyage / Mistral key
claude mcp add code-search -- code-search-mcp --local ~/code
```

就是这样。 你的探员现在知道你的密码了 这个 **[分步向导](https://npmcn.com/package/%40esankhan3/code-search-mcp/RUNNING.md)** 覆盖一切方法运行它.

* * *

## 目录

-   [你的经纪人可以问什么](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-what-your-agent-can-ask)
-   [快开始](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-quick-start)
-   [工具](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-tools)
-   [如何运作](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-how-it-works)
-   [规模业绩](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-performance-at-scale)
-   [如何运行它](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-ways-to-run-it)
-   [配置](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-configuration)
-   [安保和行动](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-security-and-operations)
-   [支持的语言](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-supported-languages)
-   [设计原则](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-design-principles)
-   [发展](https://npmcn.com/package/%40esankhan3/code-search-mcp/#readme-development)

* * *

## 你的经纪人可以问什么

| 问题 | 代理工具 |
| --- | --- |
| "我们在哪里核实JWTs?" | `search_code`:语义+关键词+符号搜索,已连接 |
| "寻找 `CompanySearchResponse`/"任何名称 `*SearchResponse`? 吗 | `search_exact`: 精确和部分标识匹配,不需要嵌入器 |
| "谁打电话 `createInvoice`,从哪一个收回?" | `find_callers` |
| 如果我改变 `billing/tax.ts`,什么中断?" | `impact_analysis` (跟随受抚养人交叉重置) |
| "这是什么diff触摸?" | `detect_changes`: diff hunks – 更改实体 – 其受抚养人 |
| "请求如何从 `checkout` 改为 `ledgerWrite`? 吗 | `trace_path`: 最短的呼叫链 |
| 哪个部门读取 `orders.created` 话题?" | `get_cross_repo_edges` |
| "这雷波做什么 如何铺设?" | `get_repo_profile` 编号 : `get_architecture` |

* * *

## 快开始

**1\. 安装.** 需要20个节点或更新 `git`。 。 。 .

```sh
npm install -g @esankhan3/code-search-mcp
```

此安装三个命令: `code-search` (CLI), (中文(简体) ), `code-search-mcp` (MCP服务器)和 `code-search-daemon` (表-再指数).

**2\. 选个嵌入器.** 默认( E)`auto`)使用它发现的第一个:

| 你有过 | 用这个 |
| --- | --- |
| `CODE_SEARCH_EMBEDDING_BASE_URL` 设定 | 任何与 OpenAI 兼容的终点 |
| Ollama 本地运行 | 奥拉玛,模型 `bge-m3` (完全下线) |
| `MISTRAL_API_KEY` | 编码嵌入 |
| `OPENAI_API_KEY` | 开放AI |
| `VOYAGE_API_KEY` | 阴道 |
| `GEMINI_API_KEY` 编号 : `GOOGLE_API_KEY` 或登入双子座CLI | 双子座 |

**3\. 终点站的索引和查询.**

```sh
code-search index ~/code --project acme       # one repo, or a folder full of repos
code-search query --project acme "where do we retry failed webhooks"
code-search query --project acme "WebhookRetryPolicy" --mode bm25
```

**4\. 连接您的MCP客户端.**

```sh
# Claude Code
claude mcp add code-search -- code-search-mcp --local ~/code --project acme
```

```jsonc
// Claude Desktop (claude_desktop_config.json) or Cursor (~/.cursor/mcp.json)
{
  "mcpServers": {
    "code-search": {
      "command": "code-search-mcp",
      "args": ["--local", "/Users/me/code", "--project", "acme"]
    }
  }
}
```

该指南涵盖团队服务器、Docker、GitHub orgs、对象存储和 排除出问题 : **[运行中](https://npmcn.com/package/%40esankhan3/code-search-mcp/RUNNING.md)**。 。 。 .

* * *

## 工具

十七种工具分四组. 每个工具都验证其反对的论据 其策略和返回 `isError: true` 当他们错了,有原因.

### 搜索

| 工具 | 它会做什么 |
| --- | --- |
| `search_code` | 混合搜索:矢量+关键字+符号+短语分级,被熔接后再通过代码图扩展并可选地重新排序 |
| `search_semantic` | 唯向量:解释和意图 |
| `search_exact` | 以精确和部分符号名和精确口号为首的文字搜索;没有嵌入器的作品 |
| `get_code_snippet` | 一个实体的名称来源比阅读整个文件便宜 |

### 图

| 工具 | 它会做什么 |
| --- | --- |
| `find_callers` 编号 : `find_dependencies` | 谁叫符号,什么叫符号. `calls` 默认边缘; `relations` 增加进口、使用、类型参考和继承 |
| `trace_path` | 两个符号之间最短的呼叫链,或者从一个符号可以到达的一切 |
| `impact_analysis` | 文件或实体的依赖者,最多5跳,横跨仓库 |
| `detect_changes` | 向行已更改的实体及其依附者映射 git diff |
| `search_graph` | 结构查询:按名称(regex),类型,文件或repo排列的节点,按连接排序 |
| `find_dead_code` | 无参考文献( 高度) |
| `get_repo_graph` | 一个仓库的实体和边缘 |
| `get_cross_repo_edges` | 存放处之间的联系,每个存放处都与产生它的证据相联系 |
| `get_architecture` | 项目概览:存储器的作用、关键流量、连接 |

符号有确切名称或全称匹配 `repo::file::entity` 编号. `fuzzy: true` 匹配对大小写不敏感的子字符串。 多跳转弯 绑定( 50k 节点, 1 s), 因此大圆形的中枢符号得到部分 回答是这么说的 永远不要挂断.

### 简介和索引

| 工具 | 它会做什么 |
| --- | --- |
| `list_repos` 编号 : `get_repo_profile` | 每个存储器的技术堆栈、结构和入口 |
| `index_status` | 每次重播、嵌入器、上次索引时间、矢量指数健康 |

加上MCP资源: `code-search://repos`, (中文(简体) ), `code-search://system-graph`, (中文(简体) ), `code-search://repo/{name}/profile`, (中文(简体) ), `code-search://repo/{name}/graph`。 。 。 .

* * *

## 如何运作

```mermaid
flowchart LR
  subgraph Index["Indexing (incremental)"]
    direction TB
    A[Discover repos] --> B[Change check per repo<br/>git SHA + working-tree snapshot]
    B --> C[AST chunking<br/>tree-sitter, 8 languages]
    C --> D[Per-repo code graph<br/>calls, imports, types, inheritance]
    C --> E[Cross-repo signals<br/>routes, topics, tables, env vars, ...]
    E --> F[Hash-join correlation<br/>14 strategies]
    D & F --> G[(System graph<br/>SQLite)]
    C --> H[Embed only changed chunks<br/>reuse vectors by content hash]
    H --> I[(LanceDB<br/>vectors + full-text + trigram indexes)]
  end
  subgraph Query["Query"]
    direction TB
    Q[Query] --> K[Classify:<br/>identifier, path, error, natural language]
    K --> V[Vector] & BM[Keyword BM25<br/>tokens + identifier parts] & S[Symbol names<br/>exact + trigram substring] & P[Exact phrase]
    V & BM & S & P --> R[Weighted rank fusion<br/>+ exact-symbol pin + dedupe]
    R --> X[Graph expansion<br/>callers, callees, type refs]
    X --> RR[Optional cross-encoder rerank]
  end
  I --> V & BM & S & P
  G --> X
```

**春克跟随代码的结构.** 文件在定义边界中分割 (功能,类,方法,顶级常数),不是每个N行. 每个 块带上下文前缀( 文件路径、 模块和导入) 嵌入着它.

**四个检索级平行运行.** 矢量搜索捕获意图. BM25在原始标志和复合识别器上运行 所以 "预期的积压数"发现 `verifyExpectedBacklogCount`符号级 通过三克索引将实体名称精确匹配为子字符串, 所以 `SearchResponse` 发现 `CompanySearchResponse`选项 字符串单词。 查询分类器对每个查询的分级权重 : 标识符依靠关键字,问题依靠向量.

**图表比绘图要多.** 它提供检索(种子点击拉入) 直接回答结构性问题. 交叉储存地边缘来自14个探测器:npm和工作空间 依赖性,共享类型,env vars, Kafka等主题, HTTP 路由 (包括模板-语言客户端URL),gRPC服务,数据库计划, Redis 密钥、 S3 桶、 OpenAPI 合同、 插头编组和 Kubernetes 服务参考和共享常数.

**指数保持不变.**

-   每个周期只触及变化:
    -   同时检查仓库;
    -   只重装已更改的文件;
    -   只有文本被重新嵌入的块;
    -   系统图已更新.
-   向量指数随着体积的增大而回转.
-   每个查询所探测的IVF分区数是自动校正以击中 0.95 准确扫描时召回.
-   嵌入器按指数被固定: 使用不同的模型查询或 维度大小是一个错误,从不沉默错误的结果.

* * *

## 规模业绩

用一台12分多分的手提电脑测量,360块超过115万块 ,包含600个混合查询(精确识别码、部分名称、, 自然语言和短语). 这本书是复制真实的 存储器。 使用一个嵌入器,所以时间排除了 嵌入式提供方延迟.

|  |  |
| --- | --- |
| `search_code` 延迟(p50, 1名客户) | **36分钟** |
| `search_exact` 延迟(p50, 1名客户) | **17分钟** |
| 吞吐量,8个同时客户 | **26个q/s** (单位:千美元)`search_code`, (中文(简体) ), **39个q/s** (单位:千美元)`search_exact`(中文(简体) ) |
| 矢量召回@ 10 vs 精确扫描( 自动校正) | **0.977 (英语)** |
| 重新指数,没什么变化 | **~15 s (韩语)** |
| 在一个文件编辑后重新索引( 重排、 图表、 嵌入) | **~30–70 s (英语)** |
| 系统图中的交叉存储边 | **454克级** |

在同一查询中,预期文件以100%的比例排在前十 两个搜索工具中的精确识别查询。 自然语言 91%的问题 `search_code` 和80% `search_exact`。 。 。 .

* * *

## 如何运行它

| 模式 | 命令 | 用它来 |
| --- | --- | --- |
| **当地、 stdio** | `code-search-mcp --local ~/code` | 一个开发者; 索引存在于您的机器上 |
| **GitHub 键** | `code-search-mcp --local "github:my-org/api-*"` | 克隆或刷新匹配的重置器,然后为它们服务 |
| **团队服务器** | `code-search-mcp --serve ~/code --auth api-key` | 每个人一个索引,超流式HTTP at `/mcp` |
| **远程代理** | `code-search-mcp --remote https://search.internal` | 连接团队服务器的细长本地 stdio 桥; 无任何本地索引 |
| **守护进程** | `code-search-daemon --workspace ~/code` | 查看文件和关于更改的再索引; CLI 通过本地套接字查询 |
| **夹克** | `docker build -f Dockerfile.all-in-one …` | Ollama的一幅图像 嵌入器和重排器模型 |

团队服务器在首个索引运行前绑定它的端口,所以健康 探测器立即回答(`/ready` 是503,直到指数可以服务为止. 它服务于每一个 `/mcp` 以无国籍方式请求,这就使得重新开始是免费的,而且 让它横跨核心 `CODE_SEARCH_WORKERS=N`在模式一中 初级是所有写作和N工人服务.

对于无国籍的吊舱,矢量可以活在S3或MinIO(`s3://` LanceDB URIs)和 互联网档案馆的存檔,存档日期2013-12-02 蒙戈DB的索引文物. 见 [运行. md § 对象存储](https://npmcn.com/package/%40esankhan3/code-search-mcp/RUNNING.md#9-stateless-deployments-object-storage)。 。 。 .

* * *

## 配置

五层,最低至最高优先级:

1.  内置默认值
2.  `~/.code-search/config.yaml` (每个用户)
3.  `<workspace>/.code-search.yaml` (每个工作区)
4.  `CODE_SEARCH_*` 环境变量
5.  CLI 旗: 任何设置为 `--<dotted.path> <value>`,比如说. `--retrieval.max-chunks 12`

`code-search --print-config` 用秘密打印解析结果 已编辑 。 一个身份不明的旗下出口有2级,而不是被忽略.

```yaml
# .code-search.yaml
embedding:
  provider: openai          # auto | ollama | openai | voyage | codestral | openai-compatible | gemini-oauth | custom
  model: text-embedding-3-small
  dimensions: 1536
reranker:
  provider: none            # ollama (default, qwen2.5-coder:7b) | cohere | voyage | openai-compatible | none
retrieval:
  max_chunks: 12
indexing:
  reindex_interval_ms: 1800000   # team server: re-index every 30 min
```

| 变量( E)`CODE_SEARCH_…`(中文(简体) ) | 目的 |
| --- | --- |
| `EMBEDDING_PROVIDER` 编号 : `_MODEL` 编号 : `_DIMENSIONS` 编号 : `_API_KEY` 编号 : `_BASE_URL` | 嵌入器 |
| `RERANKER_PROVIDER` 编号 : `_MODEL` 编号 : `_API_KEY` 编号 : `_BASE_URL` | 重排( R)`none` 要禁用) |
| `DATA_DIR` | 指数所在( 默认) `~/.anvil/knowledge-base`(中文(简体) ) |
| `PORT` 编号 : `HOST` | HTTP 绑定( 默认) `127.0.0.1:3100`(中文(简体) ) |
| `AUTH_MODE` 编号 : `AUTH_API_KEYS` 编号 : `AUTH_JWT_SECRET` | `none` 编号 : `api-key` 编号 : `jwt` |
| `REINDEX_INTERVAL` | `30m`, (中文(简体) ), `1h`, (中文(简体) ), `6h` 或者说 `0` |
| `WORKERS` | HTTP工人流程(2-16) |
| `SERVER` 编号 : `API_KEY` | 远程代用目标及其关键 |
| `VECTOR_NPROBES` | 在每个查询中修补IVF探测器( 覆盖自动校正; 下行 = 速度快, 回回转更慢) |
| `STORAGE_VECTOR_URI`, (中文(简体) ), `STORAGE_BLOB_BACKEND`, (中文(简体) ), `STORAGE_MONGO_*`, (中文(简体) ), `STORAGE_S3_*` | 物体储存部署 |

完整名单在 [运行. md § 配置引用](https://npmcn.com/package/%40esankhan3/code-search-mcp/RUNNING.md#configuration-reference)。 。 。 .

* * *

## 安保和行动

-   **奥特.**
    -   `none`: 绑定 `127.0.0.1` 只有这个.
    -   `api-key`数字 : `Authorization: Bearer …`,以恒定时间比较.
    -   `jwt`: HS256; 签字、发行人和所需 `exp` 验证,加 `nbf` 此时此刻 服务器拒绝在没有秘密的情况下启动 .
    -   一个没有认证的公开绑定记录了警告.
-   **限制.** 每名身份滑入-窗口率限制(默认为100分/分). 每个项目的范围和查询配额来自 `<dataDir>/projects/<name>/project.yaml`。 。 。 .
-   **端点.**
    -   `GET /health`, (中文(简体) ), `/ready`, (中文(简体) ), `/version`, (中文(简体) ), `/status`。 。 。 .
    -   `GET /metrics`: 查询计数的Prometheus度量衡,纬度直方图,出错,索引年龄,每回波块和矢量-索引健康.
    -   `GET /admin/api/status`。 。 。 .
    -   `POST /index`:按需重新索引.
-   **记录和追踪.** `CODE_SEARCH_STRUCTURED_LOGS=1` 发出JSON日志. 查询文本不会留下痕迹,除非您选择加入 `CODE_SEARCH_TELEMETRY_RECORD_QUERIES=1`。 。 。 .

* * *

## 支持的语言

| 支助 | 语文/文件 |
| --- | --- |
| AST 分块、 代码图、 交叉检索信号 | TypeScript, TSX, JavaScript, Python, Go, Java, Rust, PHP 软件 |
| 索引搜索 | 以上,加上外壳、YAML、Terraform/HCL、TOML、, `Dockerfile`, (中文(简体) ), `Makefile`, (中文(简体) ), `Jenkinsfile` |

`.gitignore` 受到尊重,以及 `node_modules`, (中文(简体) ), `dist`, (中文(简体) ), `build`, (中文(简体) ), `vendor`, (中文(简体) ), `target` 和类似目录被跳过.

* * *

## 设计原则

-   **多发相先.** 有趣的问题交叉存储库 边框,所以索引,图表和工具都一样.
-   **缩小范围.** 每个指数周期的成本与 换了,不是换了尸体 每个查询层都是以索引为基础的. 每一图相通相入相入相入相.
-   **永不默然错入.** 嵌入器不匹配是一个硬错误. 截断 路人说他们被截断了 坏的工具参数返回原因 .
-   **默认本地, 需要时共享 .** 同样的二进制服务 笔记本电脑在Stdio或整个团队 在HTTP.
-   **很少移动部分.** 嵌入 LanceDB 和 SQLite, 没有数据库服务器可用 运行,一个手滚动的 HTTP 层和零依赖性度量.

* * *

## 发展

这个软件包住在一个单列波 与它的检索引擎, `@esankhan3/anvil-knowledge-core`。 。 。 .

```sh
npm install                                        # at the repo root
npm -w @esankhan3/anvil-knowledge-core run build
npm -w @esankhan3/code-search-mcp run build        # esbuild bundle → dist/
npm -w @esankhan3/code-search-mcp test
npm -w @esankhan3/code-search-mcp run smoke        # end-to-end, needs Ollama with bge-m3
```

内部 : [四、建 议](https://npmcn.com/package/%40esankhan3/code-search-mcp/ARCHITECTURE.md)。检索引擎: [知识核心](https://npmcn.com/package/%40esankhan3/knowledge-core/ARCHITECTURE.md)。 。 。 .

## 许可证

[麻省理工学院](https://npmcn.com/package/%40esankhan3/code-search-mcp/LICENSE)

## 常见问题

### @esankhan3/code-search-mcp 是什么？

多repo 代码搜索的 MCP 服务器 — GitHub org 或本地路径, 零配置

### 如何安装 @esankhan3/code-search-mcp？

在项目目录运行 npm install @esankhan3/code-search-mcp，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 code-search、code-search-mcp、code-search-daemon，可以用 npx code-search 直接运行。

### @esankhan3/code-search-mcp 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/esankhan3\_\_code-search-mcp 是否存在。

### @esankhan3/code-search-mcp 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @esankhan3/code-search-mcp 可以商用吗？

@esankhan3/code-search-mcp 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @esankhan3/code-search-mcp 的下载量有多少？

根据 npm 官方下载统计，@esankhan3/code-search-mcp 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,211 次，日均约 74 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @esankhan3/code-search-mcp 还在维护吗？

最新版本 1\.1\.7 发布于 2026/11/13（1 天前）；至今共发布 33 个版本，其中过去 12 个月发布了 33 个；首次发布于 2026/04/21。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

