YaCy peer-to-peer search について
自分のYaCyピアを運用する個人やチーム向けに、検索の実行と評価を行うMCPサーバーです。検索APIや中央サービスを使わず、ウェブ検索、クロール、ピア状態、ランキング調整、関連性評価に対応します。
主な機能
- 01ローカルまたは接続済みYaCyピアを検索
- 02ウェブサイトをクロールして索引化
- 03ピアとクロールの状態を確認
- 04ランキング設定の参照と変更
- 05既知の関連URLでランキングを評価
活用シーン
- 01検索APIなしでP2Pネットワークを検索
- 02ウェブサイトをYaCyピアの索引に追加
- 03ランキングを調整して評価指標を比較
- 04ピア接続の確認とクロール管理
MCP 対応
stdioでエージェントと並行して動作し、設定されたYaCyピアとHTTPで通信します。MCPクライアントに検索、クロール、状態確認、ランキング、評価のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e YACY_URL -e YACY_ADMIN_USER -e YACY_ADMIN_PASSWORD -e YACY_CRAWL_ALLOW_PRIVATE -e YACY_ALLOW_TRUST_SETTINGS ghcr.io/pad01g/yacy-search-mcp:1.0.0YACY_URLBase URL of your YaCy peer as seen from the MCP server container, e.g. http://yacy:8090 on a shared Docker network (docker run --network ...), or http://host.docker.internal:8090YACY_ADMIN_USERYaCy administrator account, needed for crawling and settingsYACY_ADMIN_PASSWORDシークレットYaCy administrator password; without it crawl, settings and the index counts of index_status are not availableYACY_CRAWL_ALLOW_PRIVATE1 lets crawl reach loopback and private addresses (intranets); off by defaultYACY_ALLOW_TRUST_SETTINGS1 lets set_ranking_setting change the trust filter settings (acceptUnverified, excludeTags); off by defaultローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/pad01g/yacy-search-mcp:1.0.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
yacy-search MCP サーバー
1 つの YaCy ピア向けのMCPサーバーです。検索 API や API キーを使わずにウェブ検索、クロール、ランキング設定、検索品質の評価を行えます。エージェントの隣で(stdio で)実行され、HTTP 経由でエージェント自身のピアと通信します。中央サービスはありません。ピアはあなたのものであり、そのピアが属するピアツーピアネットワークを検索します。レジストリ名:io.github.pad01g/yacy-search。
improved-search fork向けに開発されています(検索結果には作者の署名判定とタグが付与されます)。検索、クロール、ステータス、設定は、上流の YaCy でも動作します。
実行
1 つの Docker ネットワーク上で、ピアと MCP サーバーを起動します。
docker network create yacy 2>/dev/null || true
docker run -d --name yacy --network yacy -p 127.0.0.1:8090:8090 \
-v yacy_data:/opt/yacy_search_server/DATA ghcr.io/pad01g/yacy-improved-search:latest
# Claude Code
claude mcp add yacy -- docker run -i --rm --network yacy \
-e YACY_URL=http://yacy:8090 -e YACY_ADMIN_PASSWORD='<your password>' ghcr.io/pad01g/yacy-search-mcp:1.0.0
fork のイメージは、管理者アカウント admin / yacy で起動します。MCP サーバーに接続する前に、http://127.0.0.1:8090/ConfigAccounts_p.html でパスワードを変更し、新しいパスワードを渡してください。
その他のクライアント(mcp.json 形式):
{
"mcpServers": {
"yacy": {
"command": "docker",
"args": ["run", "-i", "--rm", "--network", "yacy", "-e", "YACY_URL=http://yacy:8090", "-e", "YACY_ADMIN_PASSWORD=<your password>", "ghcr.io/pad01g/yacy-search-mcp:1.0.0"]
}
}
}
Docker の外部にあるピアには、-e YACY_URL=http://host.docker.internal:8090 を使用します(Linux の場合は --add-host=host.docker.internal:host-gateway を追加してください)。Docker を使わない場合は、このディレクトリで npm ci && node src/server.ts を実行します(Node 24)。
| 変数 | デフォルト | 説明 |
|---|---|---|
YACY_URL | http://localhost:8090 | ピアのベース URL |
YACY_ADMIN_USER | admin | 管理者アカウント(クロール、ステータス件数、設定) |
YACY_ADMIN_PASSWORD | 未設定 | 管理者パスワード。設定しない場合、crawl_site、control_crawl、delete_document、set_ranking_setting は拒否されます(ピアがパスワードなしのローカルリクエストを許可している場合も同様です)。読み取り用の管理者ツールは、ピアがパスワードなしで許可する場合にのみ使用できます。 |
YACY_CRAWL_ALLOW_PRIVATE | 未設定 | 1:crawl_site がループバックアドレスやプライベートアドレス(イントラネット)にアクセスできるようになります。それ以外の場合、公開ホストの http(s) URL のみ許可されます。これは開始 URL のみを確認します。YaCy がたどるリンクとリダイレクトは、YaCy 独自の network.unit.domain によって制限されます(公開ピアでは global に設定するとローカルアドレスが拒否されます)。 |
YACY_TIMEOUT_MS | 30000 | ピアへの 1 回のリクエストのタイムアウト |
YACY_ALLOW_TRUST_SETTINGS | 未設定 | 1:set_ranking_setting で trust.search.acceptUnverified と trust.policy.excludeTags も変更できるようになります |
improved-search fork では、ベクトル検索(短い質問でも、完全に一致する単語がなくてもページを見つけられる機能)は、ピアの管理者またはそのホストからの検索でのみ使用されます。MCP サーバーを別のコンテナで実行する場合は、ピアで search.vector.public=true を設定してください(設定すると、検索ページへの新しいクエリがすべて埋め込み処理されます)。
ツール
| ツール | 機能 |
|---|---|
search_web | 全文検索。resource: "global" は接続済みのピアにも検索を依頼し、waitMs の時間だけ待ってからすべての回答を順位付けします |
crawl_site | クロールを開始します(url、depth、range:domain / subpath / wide、ホストごとのmaxPages、デフォルトは200) |
get_index_status | インデックス済みドキュメント、クロールキュー、ピアの種類と接続を表示します。一時停止中のクローラー(負荷平均)や、公開アドレスを持たないピアについても説明します |
list_peers | 接続済みのピア:署名済みシード、接続方法(直接/リレー)、タグ |
get_ranking_settings | 順位付けとフィルタリングの設定、およびその意味 |
set_ranking_setting | 設定を1つ変更します(許可リストのみ:最小一致数、カバレッジと内容の薄いページの重み、タイトルフレーズのブースト、待機時間。未検証の結果と除外タグはYACY_ALLOW_TRUST_SETTINGS=1の場合のみ変更できます) |
evaluate_ranking | 関連URLが既知のクエリを評価します:precision@k、recall@k、R-precision、各関連URLの順位。約50秒以内に終了します(収まらないクエリはskippedとして報告されます) |
get_trust_status | ピアが保持する署名済み委任情報とピアリスト |
list_crawls | ピアで開始されたクロールと、control_crawlに必要なハンドル |
control_crawl | ローカルクローラーを一時停止または再開するか、1つのクロールを停止します(インデックス済みページは保持されます) |
delete_document | ピア自身のインデックスから1ページを削除します(先にそのサイトの実行中のクロールを停止してください) |
1.0.0ではツール名が変更され、一貫したverb_noun形式になりました(別名はありません):search → search_web、crawl → crawl_site、
crawls → list_crawls、crawl_control → control_crawl、index_status → get_index_status、peers → list_peers、
trust_status → get_trust_status。ツール名を指定して呼び出すクライアントでは、新しい名前を使う必要があります。
結果を改善する一般的なサイクル:evaluate_ranking → set_ranking_setting → evaluate_ranking。
タイトルとスニペットはページの作成者やほかのピアから取得されます。ツールの説明では、モデルに対して、これらを指示ではなくデータとして扱うよう伝えています。crawl_site、control_crawl、delete_document、set_ranking_settingには破壊的操作のマークが付いているため、クライアントは呼び出す前に確認を求めます。設定値はキーごとに検証され、YaCyが異なる値として保存した場合はロールバックされます。
テスト
npm ci && npm run typecheck && npm test # unit tests
YACY_URL=http://localhost:8090 YACY_ADMIN_PASSWORD=yacy npm test # also calls every tool on a live peer
ライセンス
このディレクトリ(MCP サーバー)はMITライセンスの下で提供されています。YaCyとはHTTP経由でのみ通信し、YaCyのコードは含みません。このリポジトリの残りの部分であるYaCy自体は、引き続きGPLの下で提供されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。