Harvest について
Harvestは、Hugging FaceとGitHubから学習データやコードを検索し、スコア付きのパックにまとめるMCPサーバーです。データ収集やソースコードの整理を行うエージェント向けで、サーバー内にLLMを含まずローカルミキサーを使います。
主な機能
- 01Hugging FaceとGitHubの並列検索
- 0212分野の専門クエリ
- 03学習データパックのカバレッジ評価
- 04選択元からのコードパック作成
- 05ファイルの解決・取得・バンドル
- 06GitHubへのバンドル公開
活用シーン
- 01モデル学習の目的に合うデータセット探し
- 02バランスの取れた学習データパックの作成
- 03エージェントのビルド用ソース収集
- 04出典情報付きバンドルの取得と公開
MCP 対応
HarvestはMCPツールとして、検索、専門クエリ、構成、パック作成、ファイルの解決と取得、GitHubへの公開を提供します。ローカルのstdioサーバーとして動作し、内部にLLMを含みません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| topic | string | はい | 自然言語のトピック。例:'image classification' または 'speech recognition'。 |
| gh_token | string | いいえ | レート制限を緩和するための任意の GitHub token。指定しない場合は GITHUB_TOKEN 環境変数にフォールバックします。 |
| hf_token | string | いいえ | レート制限を緩和するための任意の Hugging Face token。指定しない場合は HF_TOKEN 環境変数にフォールバックします。 |
詳細
harvest-mcp
平易な英語でトピックを入力 → 12 人の専門家が Hugging Face と GitHub を並行して調査 → 約 30 秒でカバレッジ評価済みのトレーニングパック JSON を出力します。
API キー不要。Bridge 不要。アカウント不要。任意の MCP ホストに接続すれば、すぐに使えます。LLM は内蔵していないため、考える役割はエージェントが担います。
Harvest はトレーニングデータを探すツールです。トレーニングしたい内容を平易な英語で説明すると
(「画像分類」「医療の質問応答」など)、12 人のドメイン専門家 —
コード、数学、科学、言語、ビジョン、音声、医療、法律、ナレッジ、安全性、感情、システム —
がそれぞれ独自に厳選したクエリを使って、Hugging Face のデータセットと GitHub のリポジトリを調査します。ローカルミキサーが調査結果を組み合わせ、バランスが取れた、カバレッジ評価済みのトレーニングライブラリパック
(flare-harvest-library v1 JSON)を作成します。これはあらゆるトレーニングパイプラインに渡せます。
インストール
npx github:The-Warl0ck/harvest-mcp
または、Claude Desktop に追加します(claude_desktop_config.json):
{
"mcpServers": {
"harvest": {
"command": "npx",
"args": ["github:The-Warl0ck/harvest-mcp"]
}
}
}
レート制限を引き上げるためのオプショントークンを指定する場合:
{
"mcpServers": {
"harvest": {
"command": "npx",
"args": ["github:The-Warl0ck/harvest-mcp"],
"env": {
"HF_TOKEN": "hf_...",
"GITHUB_TOKEN": "ghp_..."
}
}
}
}
要件:Node.js ≥ 20。
セッション例
あなた: 小規模なビジョン言語モデル用のトレーニングデータを探してください
harvest.search
{ "topic": "vision language instruction tuning" }→ 約 40 件の結果:LLaVA-NeXT のデータ、the Cauldron、DOCCI、LLaVA のリポジトリなど…さらに 幅広くカバーする 12 人の専門家による総合調査(コード、数学、安全性など)
harvest.compose
{ "goal": "small vision-language model", "catalog": […] }→{ "title": "small vision-language model", "picks": [ { "id": "lmms-lab/LLaVA-NeXT-Data", "expert": "vision", "why": "Anchor Vision on Hugging Face" }, … ], "rationale": "Local mixer staged 22 items across 12/12 experts. No mouth required.", "engine": "local" }
harvest.pack
{ "goal": "small vision-language model", "name": "VLM Mix v1", "catalog": […] }→coverage: { filled: 12, totalExperts: 12, balance: 0.94 }を含むflare-harvest-libraryv1 JSON と、各アイテムのingest: { type: "hf-dataset" | "github-repo", ref }ポインター。
後半は、実際にファイルを扱う部分です。パックは最初はポインターであり、pull するとファイルになります。
harvest.resolve
{ "item": { "id": "openai/gsm8k", "source": "huggingface" } }→ 取得対象のプレビュー:Parquet シャード 4 つと README。それぞれに一行の理由が付き、余計なものはありません
harvest.pull
{ "pack": {…}, "destination": "download" }→ すべてのアイテムを解決して取得し、パックのindexスタンザを更新して、VLM Mix v1.harvest.zipを作成します。すべてのファイルと出所情報を示すMANIFEST.jsonがひとつにまとまります
harvest.push
{ "bundle": "/path/to/VLM Mix v1.harvest.zip", "owner": "you", "repo": "my-data", "token": "ghp_…", "create_if_missing": true }→ 新しいプライベートリポジトリに、ファイルとマニフェストをひとつのコミットとして追加します。コミットメッセージには内容と入手元が記載されます
コードでも同じ流れを使えます。2 つ目のセッションでは、ビルド用パックを作成します。
あなた: いくつかの優れたリポジトリからレート制限のコードを集めて、エージェントが使ってビルドできるようにパッケージ化したいです
harvest.search
{ "topic": "express rate limiting middleware" }→code専門家が、必要な部分を含むリポジトリを見つけます
harvest.pack
{ "goal": "add rate-limiting to my API", "name": "Rate Limit Parts v1", "catalog": […], "purpose": "code" }→flare-harvest-codepackv1 JSON。アイテムの形式は同じですが、トレーニングカバレッジの評価はありません
harvest.pull
{ "pack": {…}, "destination": "download", "kinds": ["code", "docs"] }→ ソースファイルだけを取得します(重みとデータセットはスキップし)、.harvest.zipを作成します
harvest.push
{ "bundle": "…", "owner": "you", "repo": "rate-limit-parts", "create_if_missing": true }→ エージェントがリポジトリを取得し、その部品を使ってビルドします
ツール
| ツール | 機能 |
|---|---|
harvest.search | {topic, hf_token?, gh_token?} — トピック検索と、12 人の専門家によるアトラス全体の一括検索を行い、重複を除去します |
harvest.expert | {expert, hf_token?, gh_token?} — 1 人の専門家が厳選したクエリを実行します(ID は 12 種類:code、math、science、language、vision、audio、medical、law、knowledge、safety、affect、systems) |
harvest.latest | {} — トレンド情報:最近更新された HF データセット、注目または最近の GitHub リポジトリ |
harvest.compose | {goal, catalog} — ローカルのミキサーがバランスの取れたセットを構成し、選択内容とその理由を提示します(ミキサー自体に LLM は不要です) |
harvest.pack | {goal, catalog, name, purpose?: "training" | "code"} — 構成して JSON にパックします。training(デフォルト)はセットをスコアリングし、flare-harvest-library v1 を出力します。code は flare-harvest-codepack v1 を出力します。これはエージェントが取得して組み立てる部品セットです |
harvest.resolve | {item, kinds?, hf_token?, gh_token?} — パック内の 1 項目について、取得するファイル、その理由、アクセス制限のある項目に対する needs_token を含む取得リストをプレビューします。kinds(例:["code","docs"])を指定すると、その種類のファイルだけをプレビューします。ダウンロードは行いません |
harvest.pull | {pack, destination: "local" | "download", kinds?, dir?, confirm_large?, hf_token?, gh_token?} — パック全体を解決し、取得して、インデックスを更新します。"download" を指定すると、.harvest.zip も作成します。kinds(例:["code","docs"])はコードパックのフローで使用し、ソースファイルのみを対象とします。重みやデータセットは含まれません。サイズ超過の取得では、まず needs_confirm が返されます |
harvest.push | {bundle, pack_name?, owner, repo, token, create_if_missing?, branch?, path?} — 1 回のコミットでバンドルを GitHub にプッシュします(作成時はデフォルトで非公開) |
catalog の各項目は { id, source, expert, description? } です。harvest.search が返すオブジェクトをそのまま渡せます。
レート制限
すべて パブリックな Hugging Face API と GitHub API を利用します。認証なしの場合、次の制限があります。
- Hugging Face:
/api/datasetsでは匿名利用に十分なクォータがあります(一時的にリクエストが集中すると 429 が発生することがあります。結果はプロセス内で 12 分間キャッシュされます) - GitHub: 検索は IP ごとに 1 時間あたり 60 リクエストです。12 人の専門家による一括検索が最もリクエスト数の多い呼び出しです
実際に使用する場合は、環境変数または呼び出しごとの
hf_token / gh_token 引数で HF_TOKEN / GITHUB_TOKEN(無料アカウントで取得可能)を設定してください。.env.example を参照してください。
パック形式
パックは flare-harvest-library v1 JSON です。詳しくは PACK-FORMAT.md を参照してください。
ポインターと取得済みデータ
新しいパックはデータではなくポインターです。各項目にはデータソースと取り込み方法が記載されますが、ファイルは含まれません。harvest.pull を実行すると、ポインターがファイルに変換され、その結果がパック JSON の追記型 index セクションに記録されます。
{ "index": { "openai/gsm8k": { "local": "/tmp/harvest-pulls/pack/openai__gsm8k",
"url": "https://huggingface.co/datasets/openai/gsm8k", "kind": "dataset",
"license": null, "fetched_at": "2026-09-26T…", "files": ["main/train-….parquet", …] } } }
v1 リーダーはこのセクションを安全に無視します。セクションがないパックは、ポインターのみのパックとして読み込まれます。destination: "download" を指定すると、ファイルと MANIFEST.json を含む .harvest.zip も作成されます(マニフェストには、ファイルごとのソース、URL、ライセンス、SHA-256 が含まれます。パックにライセンスの記載がない場合は、推測せず unknown と報告します)。
トークンの扱い
トークンは呼び出しごとに渡し、保存しません。
harvest.search/harvest.expert/harvest.latest/harvest.resolve/harvest.pullはhf_token/gh_token(またはHF_TOKEN/GITHUB_TOKEN環境変数)を受け付けます。 レート制限の緩和とアクセス制限のあるデータセットの取得に使用され、Authorizationヘッダーでのみ送信されます。harvest.pushでは、呼び出しごとのtoken(GitHub PAT、またはGITHUB_TOKEN環境変数)を指定します。- トークンがディスク、ログ、パックファイル、マニフェストに書き込まれることはありません。
取得再開用の記録ファイル(
.harvest-fetch.json)に保存されるのは、パス、バイト数、 ハッシュのみです。
仕組み
src/harvest/scan-core.ts— HF/GitHub を並列スキャンし、結果を 12 分間キャッシュしますsrc/experts.ts— 12 人の専門家のアトラス(厳選したクエリ+シード項目)src/harvest/compose-local.ts— ローカルミキサー(「口は不要」):専門家ごとに項目を 1 つ選び、次に HF/GitHub のソースのバランスを取り、その後カバレッジを補うように項目を追加しますsrc/coverage.ts— 12 人の専門家全体にわたるエントロピーベースのカバレッジ/バランス評価src/harvest/compose-mouth.ts— オプトイン機能:ローカルミキサーの代わりに、OpenAI 互換の/v1エンドポイント(LM Studio など)経由で構成しますsrc/harvest/resolve.ts— 「どのファイルを使うか」を判定する機能:HF Hub/GitHub のツリー一覧をデータ、重み、設定、コード、ドキュメントに分類します(純粋関数+薄い API クライアント)src/harvest/fetch.ts— 実行部分:再開対応のストリーミングダウンロード、サイズ制限、進捗表示、ファイルごとの SHA-256 を提供します。トークンは関数の引数として渡され、保存されることはありませんsrc/harvest/bundle.ts— 取得したディレクトリと出所を記録するMANIFEST.jsonを.harvest.zipに圧縮しますsrc/harvest/push.ts— Git Data API 経由でバンドルを GitHub にプッシュします。コミットは 1 つで、デフォルトでは非公開です(// TODO(GitLab)の拡張箇所を概略実装済み)src/harvest/index.ts— エージェント側:追加的なindexスタンザとresolvePointer/getItemFiles/queryIndexmcp/server.ts— MCP サーバー(stdio、低レベル SDK API、手書きのスキーマ)
ライセンス
Apache-2.0 — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。