mcpField
H
Harvest

Harvest

本地服务
github.com搜索与检索15 周前更新

关于 Harvest

Harvest 是一个 MCP 服务,可搜索 Hugging Face 和 GitHub 的训练数据或代码,并将结果整理成带评分的数据包。它面向准备数据集或源码包的 Agent,使用本地混合器,无需在服务内运行 LLM。

主要功能

  1. 01并行搜索 Hugging Face 与 GitHub
  2. 0212 个领域专家查询
  3. 03训练数据包覆盖度评分
  4. 04从所选来源制作代码包
  5. 05解析、下载并打包文件
  6. 06将数据包推送到 GitHub

适用场景

  1. 01为模型训练目标搜寻数据集
  2. 02整理覆盖均衡的训练数据包
  3. 03为 Agent 构建收集源码文件
  4. 04下载并发布含来源记录的数据包

MCP 相关

Harvest 通过 MCP 工具提供搜索、专家查询、组合、数据包创建、文件解析与获取以及 GitHub 发布功能。它作为本地 stdio 服务运行,内部不包含 LLM。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"the-warl0ck-harvest": {
"command": "npx",
"args": [
"-y",
"@the_warl0ck/harvest-mcp"
]
}
}
}
启动命令npx -y @the_warl0ck/harvest-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@the_warl0ck/harvest-mcp0.1.0

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
topicstring是自然语言主题,例如 'image classification' 或 'speech recognition'。
gh_tokenstring否可选的 GitHub token,用于提高速率限制。若未提供,则使用 GITHUB_TOKEN 环境变量。
hf_tokenstring否可选的 Hugging Face token,用于提高速率限制。若未提供,则使用 HF_TOKEN 环境变量。

详细介绍

harvest-mcp

用通俗英语描述主题 → 12 位专家并行检索 Hugging Face + GitHub → 约 30 秒后输出覆盖度评分训练包 JSON。

无需 API 密钥。无需 Bridge。无需账户。连接到任意 MCP 主机后即可开箱即用——内部不含 LLM;由你的 Agent 负责思考。

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 数据、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": […] } → flare-harvest-library v1 JSON,其中包含 coverage: { filled: 12, totalExperts: 12, balance: 0.94 } 以及每项的 ingest: { type: "hf-dataset" | "github-repo", ref } 指针。

后半部分——实际文件。包最初只是指针;通过 pull 将它们变成文件:

harvest.resolve { "item": { "id": "openai/gsm8k", "source": "huggingface" } } → 资源预览:4 个 parquet 分片 + 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 } → 在新建的私有仓库中提交一次:包含文件和清单,提交消息说明内容及来源

同样的流程也适用于代码。第二个会话——构建包:

你: 我想从几个不错的仓库中获取限流代码,打包起来供我的 Agent 构建使用

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-codepack v1 JSON——条目结构相同,不进行训练覆盖度评分

harvest.pull { "pack": {…}, "destination": "download", "kinds": ["code", "docs"] } → 仅拉取源文件(跳过权重/数据集),并生成 .harvest.zip

harvest.push { "bundle": "…", "owner": "you", "repo": "rate-limit-parts", "create_if_missing": true } → 你的 Agent 拉取仓库,并基于这些部分进行构建

工具

工具功能
harvest.search{topic, hf_token?, gh_token?} — 按主题搜索 + 完整的 12 位专家图谱扫描,并去重
harvest.expert{expert, hf_token?, gh_token?} — 运行一位专家精选的查询(12 个 ID: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:供 Agent 提取并构建的零件箱
harvest.resolve{item, kinds?, hf_token?, gh_token?} — 预览单个包条目的拉取列表:包含哪些文件、原因,以及受限条目的 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?} — 通过一次提交将包推送到 GitHub(新建时默认为私有)

catalog 条目的格式为 { id, source, expert, description? } — harvest.search 返回的对象可直接传入。

速率限制

所有请求都会访问 Hugging Face 和 GitHub 的公共 API。未认证时,你可以获得:

  • Hugging Face: /api/datasets 的匿名配额较宽裕(突发请求时偶尔会出现 429;结果会在进程内缓存 12 分钟)
  • GitHub: 搜索每个 IP 每小时 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 — 本地混合器(“无需嘴巴”):为每位专家锚定一个条目,然后平衡 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 — 通过 GitHub 的 Git Data API 将压缩包推送到 GitHub:一次提交,默认私有(已勾勒出 // TODO(GitLab) 扩展接口)
  • src/harvest/index.ts — Agent 端:增补式 index 条目 + resolvePointer / getItemFiles / queryIndex
  • mcp/server.ts — MCP 服务(stdio、底层 SDK API、手写 schema)

许可证

Apache-2.0 — 详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。