mcp-server-bm25-code-search

mcp-server-bm25-code-search

Enables fast, low-token code search for AI coding agents via a local BM25 engine built on SQLite FTS5, with support for camelCase, snake_case, and Japanese text. Provides a stateless MCP stdio server and a Hermes adapter for multi-agent environments.

Category
访问服务器

README

mcp-server-bm25-code-search

AI コーディングエージェント(Claude Code, Codex CLI, Antigravity, Hermes Agent)におけるファイル検索を高速化・低トークン化するための、SQLite FTS5 ベースのローカル BM25 コード検索エンジン & MCP サーバです。


✨ 特徴

  • 📦 外部依存ゼロ (Python 標準ライブラリのみ)
    sqlite3 (FTS5) および標準ライブラリのみで構築されており、pip install などのサードパーティ依存パッケージなしで即座に動作します。

  • 🔤 コード識別子 & 日本語ハイブリッド対応
    getUserProfile (camelCase) や session_token (snake_case) のサブワード分割に加え、日本語技術文書の CJK 2-gram(バイグラム)トークナイズを Python 側で事前処理。FTS5 インデックスと検索クエリの両方に自動適用されます。

  • 📁 ファイルパスブースト (3.0x)
    FTS5 の bm25(code_fts, 3.0, 1.0) 列重み付けにより、ファイルパスとの一致を本文の一致より 3.0 倍優遇。探したいファイルへ少ない検索回数で到達できます。

  • 高速増分更新 & Git Worktree 非干渉
    git ls-files による .gitignore 完全準拠のファイル収集と、git diff / HEAD ハッシュトラッキングによる高速増分更新(通常編集時 0.1〜0.5秒)。インデックス .bm25_index.db は Worktree ローカルに配置され .gitignore で自動除外されます。

  • 🔌 マルチエージェント標準対応 (MCP 2026-07-28 & Hermes)

    • MCP ネイティブ (Claude Code / Codex / Antigravity): 2026-07-28 仕様準拠のステートレス stdio JSON-RPC サーバ。プロンプトキャッシュ効率を高める決定論的ツールソートを実装。
    • Hermes Agent: MCP 非対応環境向けに薄い Function Calling アダプタ層 (hermes_adapter.py) を標準同梱。
  • 🛡️ コンテキスト溢れ防止 & フォールバック
    出力文字制限 (--max-bytes) は UTF-8 のマルチバイト文字境界を保護して安全に切り詰め。検索結果 0 件時は grep/glob への切り替えを促す構造化フォールバックメッセージを返却します。


📁 モジュール構成

mcp-server-bm25-code-search/
├── bm25_search/
│   ├── db.py              # SQLite FTS5 v2 スキーマ (chunks / code_fts / triggers)
│   ├── tokenizer.py       # 事前トークナイザ (camelCase / snake_case / CJK 2-gram)
│   ├── indexer.py         # インデクサ (git ls-files, 80/20 チャンキング, 増分更新)
│   ├── search.py          # 検索エンジン & CLI インターフェース
│   ├── mcp_server.py      # MCP 2026-07-28 ステートレス stdio サーバ
│   └── hermes_adapter.py  # Hermes Agent 向け Function Calling アダプタ
├── docs/
│   ├── specification.md   # 詳細仕様書
│   └── plans/             # 設計ドキュメント
└── tests/                 # pytest テストスイート

🚀 使い方

1. CLI での検索実行

python bm25_search/search.py "<検索クエリ>" --top-k 5 --format markdown --max-bytes 4000

主なオプション:

  • <query>: 検索クエリ(日本語、camelCase、snake_case 対応)
  • --top-k: 返す検索結果の上限件数(デフォルト: 5
  • --format: 出力形式 markdown または json(デフォルト: markdown
  • --max-bytes: 最大出力バイト数。マルチバイト文字を安全に維持して切詰(デフォルト: 4000
  • --mode: クエリトークンの結合モード OR または AND(デフォルト: OR
  • --db: 使用する SQLite インデックス DB パス(デフォルト: .bm25_index.db

2. MCP サーバとしての起動(uvx / npx 対応)

プロジェクトごとに Stdio + 自動インデックス構築で動かすため、uvx または npx で即座に起動できます。 引数未指定の場合、MCP サーバが起動されたプロジェクト(カレントディレクトリ)のコードベースを自動検出・増分インデックス(.bm25_index.db)の作成・同期を行います。

uvx (uv / Python) を使う場合

{
  "mcpServers": {
    "bm25-code-search": {
      "command": "uvx",
      "args": ["mcp-server-bm25-code-search"],
      "alwaysAllow": ["search"]
    }
  }
}

npx (Node.js / npm) を使う場合

{
  "mcpServers": {
    "bm25-code-search": {
      "command": "npx",
      "args": ["-y", "mcp-server-bm25-code-search"],
      "alwaysAllow": ["search"]
    }
  }
}

③ ローカル Python での直接指定

{
  "mcpServers": {
    "bm25-code-search": {
      "command": "python",
      "args": [
        "D:/path/to/mcp-server-bm25-code-search/bm25_search/mcp_server.py",
        "--stdio"
      ],
      "alwaysAllow": [
        "search"
      ]
    }
  }
}

💡 AI エージェントに grep 連打を抑止し BM25 検索を優先させる設定 (AGENTS.md / CLAUDE.md)

AI エージェントが grep を何度もリトライしてトークンやコンテキストを無駄に消費するのを防ぐため、利用するプロジェクトの AGENTS.mdCLAUDE.md(またはシステムプロンプト)に以下の指示を追記することを推奨します。

## コード検索の指示方針
- コードベースの機能調査やコード探索を行う際は、最初に MCP ツール `search` (BM25 Code Search) を優先して使用してください。
- `search` で結果が得られない場合、または特定のシンボル名の完全一致を直接検索する場合にのみ `grep_search``glob` を使用してください。

3. Hermes Agent アダプタの使用

MCP 非対応の Hermes Agent からは、bm25_search.hermes_adapter モジュールを利用します。

from bm25_search.hermes_adapter import hermes_function_schema, run_hermes_tool

# Hermes 用 Tool Schema の取得
schema = hermes_function_schema()

# Hermes からの Function Call 実行
response = run_hermes_tool({
    "name": "bm25_search",
    "arguments": {
        "query": "getUserProfile",
        "top_k": 5
    }
})

🧪 テストの実行

pytest を使ってユニットテストおよび統合テストを実行できます。

pytest tests/

📄 ドキュメント

  • [仕様書 (docs/specification.md)](file:///d:/vagrant/harnesses/mcp-server-bm25-code-search/docs/specification.md)
  • [設計仕様書 (docs/plans/bm25-multi-agent-search-skill-design.md)](file:///d:/vagrant/harnesses/mcp-server-bm25-code-search/docs/plans/bm25-multi-agent-search-skill-design.md)

📚 参考文献・関連リンク


⚖️ ライセンス

本プロジェクトは MIT License の下で公開されています。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选