Skip to content

Latest commit

 

History

History
295 lines (219 loc) · 13.3 KB

File metadata and controls

295 lines (219 loc) · 13.3 KB

buddha-cli

CBETA(漢文)、パーリ三蔵(ローマ字)、GRETIL(サンスクリット TEI)、SARIT(TEI P5)、SAT(オンライン)、浄土宗全書(オンライン)に加え、チベット大蔵経系のオンライン全文検索(BUDA/BDRC・Adarshah)にも対応した、高速な仏教テキスト検索・取得のための MCP サーバーおよび CLI です。Rust で実装し、高速・堅牢に動作します。

関連: English README | 繁體中文 README

特長

  • ダイレクトIDアクセス: テキストIDが分かっていれば即座に取得(最速!)
  • CBETA / Tipitaka / GRETIL / SARIT / MUKTABODHA に対する高速な正規表現検索(行番号つき)
  • CBETA検索は新字体など"現代の表記"でもヒットするよう正規化(旧字体・簡繁などの揺れを吸収)
  • タイトル検索(CBETA / Tipitaka / GRETIL / SARIT / MUKTABODHA)
  • 行番号や文字位置での前後コンテキスト取得
  • SAT オンライン検索(スマートキャッシュ付き)
  • 浄土宗全書(オンライン)の検索・本文取得(キャッシュ付き)
  • チベット語のオンライン全文検索(BUDA/BDRC + Adarshah、EWTS/Wylieの簡易自動変換つき)
  • ワンコマンド・ブートストラップとインデックス構築

インストール

前提: Git が必要です。

クイックインストール:

curl -fsSL https://raw.githubusercontent.com/sinryo/buddha-cli/main/scripts/bootstrap.sh | bash -s -- --yes --write-path

手動セットアップ:

cargo build --release
scripts/install.sh --prefix "$HOME/.buddha" --write-path

MCP クライアント連携

Claude Code CLI:

claude mcp add buddha "$HOME/.buddha/bin/buddha" mcp

Codex CLI(~/.codex/config.toml):

[mcp_servers.buddha]
command = "/Users/you/.buddha/bin/buddha"
args = ["mcp"]

互換性: $HOME/.buddha/bin/buddha-mcp も互換aliasとして利用できます。レガシーalias daizo, daizo-mcp, daizo-cli も後方互換のため維持されています。

CLI 例

ダイレクトIDアクセス(最速!)

テキストIDが分かっていれば、検索をスキップして直接取得:

# CBETA: 大正番号(T + 4桁の数字)
buddha cbeta-fetch --id T0001      # 長阿含經
buddha cbeta-fetch --id T0262      # 妙法蓮華經
buddha cbeta-fetch --id T0235      # 金剛般若波羅蜜經

# Tipitaka: ニカーヤコード(DN, MN, SN, AN, KN)
buddha tipitaka-fetch --id DN1     # 梵網経
buddha tipitaka-fetch --id MN1     # 根本法門経
buddha tipitaka-fetch --id SN1     # 相応部第1

# GRETIL: サンスクリットテキスト名
buddha gretil-fetch --id saddharmapuNDarIka         # 法華経(梵文)
buddha gretil-fetch --id vajracchedikA              # 金剛般若経(梵文)
buddha gretil-fetch --id prajJApAramitAhRdayasUtra  # 般若心経(梵文)

# SARIT: TEI P5 コーパス(ファイルstem)
buddha sarit-fetch --id asvaghosa-buddhacarita

# MUKTABODHA: 梵文ライブラリ(ファイルstem。ローカルに $BUDDHA_DIR/MUKTABODHA を配置)
buddha muktabodha-fetch --id "<file-stem>"

検索

# タイトル検索
buddha cbeta-title-search --query "楞伽經" --json
buddha tipitaka-title-search --query "dn 1" --json
buddha sarit-title-search --query "buddhacarita" --json
buddha muktabodha-title-search --query "yoga" --json

# 内容検索(行番号つき)
buddha cbeta-search --query "阿弥陀" --max-results 10
buddha tipitaka-search --query "nibbana|vipassana" --max-results 15
buddha gretil-search --query "yoga" --max-results 10
buddha sarit-search --query "yoga" --max-results 10
buddha muktabodha-search --query "yoga" --max-results 10

コンテキスト付き取得

# IDとオプション指定で取得
buddha cbeta-fetch --id T0858 --part 1 --max-chars 4000 --json
buddha tipitaka-fetch --id s0101m.mul --max-chars 2000 --json
buddha gretil-fetch --id buddhacarita --max-chars 4000 --json
buddha sarit-fetch --id asvaghosa-buddhacarita --max-chars 4000 --json
buddha muktabodha-fetch --id "<file-stem>" --max-chars 4000 --json

# 行番号の前後コンテキスト
buddha cbeta-fetch --id T0858 --line-number 342 --context-before 10 --context-after 200
buddha tipitaka-fetch --id s0305m.mul --line-number 158 --context-before 5 --context-after 100

管理

buddha init                      # 初期セットアップ(データ取得とインデックス構築)
buddha doctor --verbose          # インストール/データ診断
buddha index-rebuild --source all
buddha uninstall --purge         # バイナリとデータ/キャッシュを削除
buddha update --yes              # CLI の再インストール

AI エージェント連携

buddha CLI は AI エージェント(Claude Code、Codex など)から直接呼べるよう設計されています。

非TTY時のJSON自動出力: stdout がパイプやリダイレクトの場合、自動的にJSON出力になります。毎回 --json を指定する必要はありません。

buddha cbeta-title-search --query "般若" | jq .    # 自動JSON(パイプ時)
BUDDHA_JSON=1 buddha cbeta-title-search --query "般若"  # 環境変数でJSON強制
buddha --json cbeta-title-search --query "般若"    # グローバル --json フラグ

静音モード (--quiet / -q): stderr への進捗メッセージを抑制し、出力パースを容易にします。

コマンド自己発見 (buddha schema): 全サブコマンドと引数スキーマを機械可読JSONで取得できます。

buddha schema                          # 全コマンド一覧
buddha schema --command cbeta-fetch    # 特定コマンドのスキーマ

構造化エラー出力: JSONモード時、エラーは stderr に {"error":{"message":"...","code":"NOT_FOUND"}} 形式で出力されます。

終了コード 意味
0 成功
1 汎用エラー
2 使用方法エラー(引数不正)
10 データ未検出(結果なし)
11 ネットワークエラー(タイムアウト、接続)
12 データ未準備(clone/download が必要)

MCP ツール

基本:

  • buddha_version(サーバーのバージョン/ビルド情報)
  • buddha_usage(AI クライアント向けの使い方ガイド。低トークン運用の推奨フロー)
  • buddha_system_prompt(AI向けのsystem promptテンプレ(1枚)。低トークン運用の既定値をまとめたもの)
  • buddha_profile(ツール呼び出しの簡易ベンチマーク)

解決:

  • buddha_resolve(タイトル/別名/ID からコーパス候補と、次に呼ぶべき取得ツール呼び出しを返す。対象: cbeta/tipitaka/gretil/sarit/muktabodha)

検索:

  • cbeta_title_search, cbeta_search
  • tipitaka_title_search, tipitaka_search
  • gretil_title_search, gretil_search
  • sarit_title_search, sarit_search
  • muktabodha_title_search, muktabodha_search
  • sat_search(SAT大正新脩大蔵経の検索。_meta.results + sat_detail 用の _meta.fetchSuggestions を返す。fq でT番号レンジ絞り込み可)
  • jozen_search
  • tibetan_search(チベット語のオンライン全文検索。sources:["buda","adarshah"]。BUDAは exact でフレーズ検索、Adarshahは wildcardmaxSnippetChars でスニペット長)

取得:

  • cbeta_fetchlb, lineNumber, contextBefore, contextAfter, headQuery, headIndex, format:"plain", focusHighlight をサポート。plain は XMLタグ除去・gaiji解決・teiHeader除外・改行保持。focusHighlight は最初のハイライト一致箇所付近にジャンプ)
  • tipitaka_fetchlineNumber, contextBefore, contextAfter をサポート)
  • gretil_fetchlineNumber, contextBefore, contextAfter, headQuery, headIndex をサポート)
  • sarit_fetchlineNumber, contextBefore, contextAfter をサポート)
  • muktabodha_fetchlineNumber, contextBefore, contextAfter をサポート)
  • sat_fetch, sat_detail, sat_pipeline(SAT詳細取得。sat_pipeline はベストヒットを選んで自動取得。exact をサポート。デフォルトはフレーズ検索)
  • jozen_fetchlineno 指定で1ページ取得。[J..] ... 形式で返す)

パイプライン:

  • cbeta_pipeline, gretil_pipeline, sarit_pipeline, muktabodha_pipeline, sat_pipeline(要約優先なら autoFetch=false 推奨)

低トークン運用(AI クライアント向け)

最速: ダイレクトIDアクセス

テキストIDが分かっている場合は 検索をスキップ:

コーパス ID形式
CBETA T + 4桁数字 cbeta_fetch({id: "T0262"})
Tipitaka DN, MN, SN, AN, KN + 番号 tipitaka_fetch({id: "DN1"})
GRETIL サンスクリットテキスト名 gretil_fetch({id: "saddharmapuNDarIka"})
SARIT TEIファイルstem sarit_fetch({id: "asvaghosa-buddhacarita"})
MUKTABODHA ファイルstem muktabodha_fetch({id: "FILE_STEM"})

よく使うID一覧

CBETA(漢文大蔵経):

  • T0001 = 長阿含經
  • T0099 = 雜阿含經
  • T0262 = 妙法蓮華經(法華経)
  • T0235 = 金剛般若波羅蜜經(金剛経)
  • T0251 = 般若波羅蜜多心經(般若心経)

Tipitaka(パーリ三蔵):

  • DN1-DN34 = 長部(Dīghanikāya)
  • MN1-MN152 = 中部(Majjhimanikāya)
  • SN = 相応部(Saṃyuttanikāya)
  • AN = 増支部(Aṅguttaranikāya)

GRETIL(梵文):

  • saddharmapuNDarIka = 法華経
  • vajracchedikA = 金剛般若経
  • prajJApAramitAhRdayasUtra = 般若心経
  • buddhacarita = 仏所行讃(馬鳴)

通常フロー(IDが不明な場合)

  1. buddha_resolve で候補ID(コーパス)を決める
  2. *_fetch{ id }(必要なら partheadQuery など)で呼ぶ
  3. フレーズ検索が必要なら *_search_meta.fetchSuggestions*_fetchlineNumber)を使う
  4. *_pipeline は多ファイル要約が必要な時のみ使用。既定で autoFetch=false を推奨

crosswalk(横断解決)とは

buddha でいう crosswalk は、「人間のクエリ(経典名・別名・略称など)」から「実際に叩くべきコーパスID」と「次に呼ぶべき *_fetch」へ最短で橋渡しすることです。

  • buddha_resolve({query}) を呼ぶ
  • 返ってくる候補と _meta.fetchSuggestions を使って、最小トークンで *_fetch に移る

各ツールの description にも案内を記載。initialize 応答の prompts.low-token-guide でも方針を提示します。

Tips: BUDDHA_HINT_TOP でサジェスト件数を制御(既定 1)。

データソース

ディレクトリと環境変数

  • BUDDHA_DIR(既定: ~/.buddha、レガシーフォールバック: DAIZO_DIR / ~/.daizo
    • データ: xml-p5/, tipitaka-xml/romn/, GRETIL/, SARIT-corpus/, MUKTABODHA/
    • キャッシュ: cache/
    • バイナリ: bin/
  • BUDDHA_JSON=1 で全 CLI コマンドをJSON出力に強制(--json と同等)
  • BUDDHA_DEBUG=1 で簡易 MCP デバッグログ(レガシー: DAIZO_DEBUG
  • ハイライト関連: BUDDHA_HL_PREFIX, BUDDHA_HL_SUFFIX, BUDDHA_SNIPPET_PREFIX, BUDDHA_SNIPPET_SUFFIX
  • 取得ポリシー(レート/robots 配慮):
    • BUDDHA_REPO_MIN_DELAY_MS, BUDDHA_REPO_USER_AGENT, BUDDHA_REPO_RESPECT_ROBOTS

スクリプト

スクリプト 役割
scripts/bootstrap.sh ワンライナーインストーラー: 依存チェック → リポジトリclone → install.sh実行 → MCP自動登録(buddha mcp
scripts/install.sh メインインストーラー: buddha をビルド → バイナリ配置(buddha-mcp 互換alias含む) → GRETILダウンロード → インデックス構築
scripts/link-binaries.sh 開発用: リリースバイナリへのシンボリックリンク作成
scripts/release.sh リリース用: バージョンバンプ → タグ作成 → GitHub Release

リリース補助の例

# 自動一括(バンプ → コミット → タグ → プッシュ → GitHub リリース自動ノート)
scripts/release.sh 0.6.13 --all

# CHANGELOG をノートに使用
scripts/release.sh 0.6.13 --push --release

# ドライラン
scripts/release.sh 0.6.13 --all --dry-run

ライセンス

MIT または Apache-2.0 © 2025 Shinryo Taniguchi

コントリビューション

Issue や PR を歓迎します。バグ報告には buddha doctor --verbose の出力を添付してください。