Harvest

io.github.The-Warl0ck由 GitHub 帳號 The-Warl0ck 發布v0.1.0更新於 Oct 24, 2026

Plain-English training-data scout: 12 experts sweep HuggingFace + GitHub, compose scored packs.

概覽

AI 產生的概覽

本機訓練資料偵察工具:用自然語言主題搜尋 Hugging Face 與 GitHub,組合帶評分的訓練包,並可下載或推送。

可以做什麼
依主題搜尋 Hugging Face 資料集與 GitHub 儲存庫,或執行 12 個領域專家之一,或列出熱門項目,結果會去重並短期快取。從目錄組合出均衡、具覆蓋度評分的選集,輸出訓練庫包或程式碼零件包。預覽某個包項目將抓取哪些檔案,而不實際下載。將整個包拉取到本機或下載資料夾,可只取程式碼與文件,並打包成含來源清單的壓縮檔。把打包結果以單次提交推送到 GitHub 新建的私有儲存庫。
適用情境
適合讓助理為訓練或程式碼重用尋找候選資料集與儲存庫、整理均衡候選清單,並在對話中完成抓取或發布。若只需要臨時網頁搜尋或已有成熟資料流程,則幫助不大。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js 20 或更新版本。需要連線 Hugging Face 與 GitHub 公開 API 的網路。不需帳號或金鑰,但選用的 HF_TOKEN、GITHUB_TOKEN 環境變數或每次呼叫的 hf_token、gh_token、token 參數可提高速率上限並存取受限資料集;harvest.push 需要 GitHub 權杖。
安裝前請注意
harvest.pull 會把檔案下載到磁碟,可能抓取大型資料集,需注意容量確認與磁碟用量。harvest.push 會寫入 GitHub,建立儲存庫並提交檔案。權杖按次傳入,README 稱不會儲存,但仍會送往 Hugging Face 與 GitHub。未聲明授權時會標為未知,訓練前應自行確認使用權利。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Harvest,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

harvest-mcp

Plain-English topic in → 12 experts fan out over Hugging Face + GitHub in parallel → coverage-scored training pack JSON out in ~30 seconds.

No API keys. No Bridge. No account. Works out of the box once connected to any MCP host — no LLM inside; your agent brings the thinking.

Harvest is a training-data scout: you describe what you want to train on in plain English ("image classification", "medical question answering"), and 12 domain experts — code, math, science, language, vision, audio, medical, law, knowledge, safety, affect, systems — each sweep Hugging Face datasets and GitHub repos with their own curated queries. The local mixer then composes the hits into a balanced, coverage-scored training library pack (flare-harvest-library v1 JSON) you can hand to any training pipeline.

Install

bash
npx github:The-Warl0ck/harvest-mcp

Or add it to Claude Desktop (claude_desktop_config.json):

json
{  "mcpServers": {    "harvest": {      "command": "npx",      "args": ["github:The-Warl0ck/harvest-mcp"]    }  }}

With optional tokens for higher rate limits:

json
{  "mcpServers": {    "harvest": {      "command": "npx",      "args": ["github:The-Warl0ck/harvest-mcp"],      "env": {        "HF_TOKEN": "hf_...",        "GITHUB_TOKEN": "ghp_..."      }    }  }}

Requirements: Node.js ≥ 20.

Example session

You: find me training data for a small vision-language model

harvest.search { "topic": "vision language instruction tuning" } → ~40 hits: LLaVA-NeXT data, the Cauldron, DOCCI, LLaVA repo… plus the 12-expert atlas sweep for breadth (code, math, safety…)

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": […] } → flare-harvest-library v1 JSON with coverage: { filled: 12, totalExperts: 12, balance: 0.94 } and per-item ingest: { type: "hf-dataset" | "github-repo", ref } pointers.

The second half — the hands. Packs start as pointers; pull turns them into files:

harvest.resolve { "item": { "id": "openai/gsm8k", "source": "huggingface" } } → the loot preview: 4 parquet shards + README, each with a one-line reason, nothing stupid

harvest.pull { "pack": {…}, "destination": "download" } → resolves + fetches every item, updates the pack's index stanza, and builds VLM Mix v1.harvest.zip — one file with everything plus MANIFEST.json provenance

harvest.push { "bundle": "/path/to/VLM Mix v1.harvest.zip", "owner": "you", "repo": "my-data", "token": "ghp_…", "create_if_missing": true } → one commit on a new private repo: files + manifest, message says what it is and where it came from

The same loop works for code. Second session — the build pack:

You: I want the rate-limiting code from a few good repos, packaged so my agent can build with it

harvest.search { "topic": "express rate limiting middleware" } → the code expert surfaces the repos with the parts you want

harvest.pack { "goal": "add rate-limiting to my API", "name": "Rate Limit Parts v1", "catalog": […], "purpose": "code" } → flare-harvest-codepack v1 JSON — same item envelope, no training-coverage scoring

harvest.pull { "pack": {…}, "destination": "download", "kinds": ["code", "docs"] } → pulls just the source files (skips weights/datasets), builds the .harvest.zip

harvest.push { "bundle": "…", "owner": "you", "repo": "rate-limit-parts", "create_if_missing": true } → your agent pulls the repo and builds from the parts

Tools

ToolWhat it does
harvest.search{topic, hf_token?, gh_token?} — topic search + full 12-expert atlas sweep, deduplicated
harvest.expert{expert, hf_token?, gh_token?} — run one expert's curated queries (12 ids: code, math, science, language, vision, audio, medical, law, knowledge, safety, affect, systems)
harvest.latest{} — trending: recently-updated HF datasets, hot/recent GitHub repos
harvest.compose{goal, catalog} — local mixer composes a balanced set; picks + rationale (the mixer itself needs no LLM)
harvest.pack{goal, catalog, name, purpose?: "training" | "code"} — compose → pack JSON. training (default) scores the mix and emits flare-harvest-library v1; code emits a flare-harvest-codepack v1: a parts bin an agent pulls and builds from
harvest.resolve{item, kinds?, hf_token?, gh_token?} — pull-list preview for one pack item: which files, why, and needs_token for gated items. kinds (e.g. ["code","docs"]) previews only those file kinds. No downloading
harvest.pull{pack, destination: "local" | "download", kinds?, dir?, confirm_large?, hf_token?, gh_token?} — resolve + fetch + index update for the whole pack; "download" also builds a .harvest.zip. kinds (e.g. ["code","docs"]) is the code-pack flow: just the source files, no weights/datasets. Oversized pulls return needs_confirm first
harvest.push{bundle, pack_name?, owner, repo, token, create_if_missing?, branch?, path?} — push a bundle to GitHub in one commit (private by default when creating)

catalog items are { id, source, expert, description? } — the objects harvest.search returns drop straight in.

Rate limits

Everything hits the public Hugging Face and GitHub APIs. Unauthenticated, you get:

  • Hugging Face: generous anonymous quota on /api/datasets (occasional 429s on bursts; results are cached 12 min in-process)
  • GitHub: 60 requests/hour per IP for search — the 12-expert sweep is the hungriest call

For real use, set HF_TOKEN / GITHUB_TOKEN (free accounts) via env or the per-call hf_token / gh_token args. See .env.example.

Pack format

Packs are flare-harvest-library v1 JSON — see PACK-FORMAT.md.

Pointer vs. pulled

A fresh pack is pointers, not data: each item names its source and how to ingest it, but no files. harvest.pull turns pointers into files and records the result in an additive index stanza on the pack JSON:

json
{ "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 readers ignore the stanza safely; packs without it load as pointer-only. destination: "download" additionally produces a .harvest.zip containing the files plus MANIFEST.json (source, URL, license, SHA-256 per file — licenses are reported as unknown when the pack doesn't state one, never guessed).

Token story

Tokens are passed per call, never stored:

  • harvest.search / harvest.expert / harvest.latest / harvest.resolve / harvest.pull accept hf_token / gh_token (or the HF_TOKEN / GITHUB_TOKEN env vars) — used for higher rate limits and gated datasets, sent only as an Authorization header.
  • harvest.push takes a per-call token (GitHub PAT, or GITHUB_TOKEN env).
  • No token is ever written to disk, to logs, to a pack file, or to a manifest. Fetch resume ledgers (.harvest-fetch.json) hold only paths, byte counts, and hashes.

How it works

  • src/harvest/scan-core.ts — parallel HF/GitHub scanning, 12-min result cache
  • src/experts.ts — the 12-expert atlas (curated queries + seed items)
  • src/harvest/compose-local.ts — the local mixer ("No mouth required"): anchors one item per expert, then balances HF/GitHub sources, then fills for coverage
  • src/coverage.ts — entropy-based coverage/balance scoring across the 12 experts
  • src/harvest/compose-mouth.ts — opt-in: compose via any OpenAI-compatible /v1 endpoint (LM Studio, etc.) instead of the local mixer
  • src/harvest/resolve.ts — the "which files" intelligence: HF Hub / GitHub tree listings classified into data, weights, config, code, docs (pure functions + thin API clients)
  • src/harvest/fetch.ts — the hands: streaming downloads with resume, size guards, progress, SHA-256 per file; token arrives as a function arg, never stored
  • src/harvest/bundle.ts — zips a fetched dir + MANIFEST.json provenance into a .harvest.zip
  • src/harvest/push.ts — pushes a bundle to GitHub via the Git Data API: one commit, private by default (// TODO(GitLab) seam sketched)
  • src/harvest/index.ts — the agent side: additive index stanza + resolvePointer / getItemFiles / queryIndex
  • mcp/server.ts — the MCP server (stdio, low-level SDK API, hand-written schemas)

License

Apache-2.0 — see LICENSE.

來源:README.md,提交 6645008

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 26, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分