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 分