Where My Hug

io.github.bikemeardsley由 GitHub 账号 bikemeardsley 发布v0.3.1更新于 Oct 29, 2026

Which parts of an ML need Hugging Face already covers. Every model and dataset checked live.

概览

AI 生成的概览

在 Hugging Face、Kaggle、Zenodo、ModelScope 和 Roboflow Universe 上为机器学习任务的每个环节查找模型与数据集,并实时核验每个结果。

可以做什么
  • 执行方法:先问清算力、许可证、技术栈和数据四个问题,再把需求拆成若干环节并给出 USE、TUNE、TRAIN 或 WRITE 结论
  • 搜索各平台:在 Hugging Face 上按四种方式检索(下载量、趋势、名称关键词、卡片正文),其他平台按关键词检索,并合并跨平台重复项
  • 核验结果:逐个到所属平台实时查询,剔除不存在的条目,标注门控、许可证、过时和低使用量,并按给定算力估算模型大小
  • 生成报告:列出搜到但未选中的条目,并以“从这里开始”的建议收尾
适用场景
适合为新机器学习任务挑选模型或数据集,并希望得到当前可用、与硬件匹配的选项,而不是助手凭记忆给出的答案。也适合核实某个模型或数据集 ID 是否真实存在,以及其许可证和大小。
运行要求
通过 npx 启动的本地 stdio 进程,需要 Node 22.18 或更高版本。公开搜索无需凭据;可选的 HF_TOKEN 可纳入私有或门控的 Hugging Face 仓库,可选的 ROBOFLOW_API_KEY 可加入 Roboflow Universe。需要能访问各平台 API 的网络。
安装前请注意
会把每次生成的搜索词和选中的 ID 发送给 Hugging Face、Kaggle、Zenodo、ModelScope(由阿里云在中国运营),设置密钥时还会发送给 Roboflow;HF_TOKEN 和 ROBOFLOW_API_KEY 各自只发往对应平台。需求原文和报告保留在本地。仅有 GGUF 或 .bin 权重的仓库无法估算大小,许可证标记来自卡片元数据而非许可证正文。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Where My Hug,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[The Where My Hug At? mascot: a round ink-drawn character with its arms open wide, eyes glancing sideways, waiting for a hug]

Where My Hug At?

[Latest release] [npm] [CI tests] [In the official MCP Registry] [On skills.sh] [On cursor.directory] [Antigravity plugin] [On Smithery] [Where My Hug At? MCP server, quality and maintenance score on Glama] [Hugging Face] [Kaggle] [Zenodo] [ModelScope] [Roboflow Universe]
[TypeScript] [Node 22.18 or later] [MIT license] [Buy Me a Coffee] [Donate to ALS research]

Tell your AI agent what you want a model to do. It searches Hugging Face, Kaggle, Zenodo, ModelScope and Roboflow Universe for models and datasets for each part of the job, and tells you which parts already exist: which are an exact fit, which to fine-tune, which to train, and which are just code. One model or dataset on several hubs is one finding, with every hub listed, so you take it from the one you use. Every model and dataset it names is real, checked live, and every model is sized for your hardware. It ends with where to start.

Works with Claude Code, Codex, Copilot, Cursor, Gemini CLI, Cline, Devin, Open WebUI and any other MCP client, or as an Agent Skill.

Its companion, Git for Me!, does the same for open-source repos on GitHub, GitLab and Codeberg.

[Your ML need, a model, a dataset or both, with four questions asked first (compute, license, stack, data), is split into parts: jobs with an input and an output. A part to search goes to Find hug, which searches Hugging Face four ways for models and datasets: most downloaded, trending, names and card text. The same search covers the other hubs, for models and datasets too: Kaggle, Zenodo, ModelScope, and Roboflow with your key. What turns up on several hubs is consolidated into one finding that names every hub it's on, so you pick the one you use. The verdict, use, tune or train, comes from those findings. A part that's just code is marked write and needs no search. Your report checks every pick live, sizes it for your hardware, and ends with where to start.]

Contents

Try it

Add it to your agent (Claude Code here; every other option below):

sh
claude mcp add --scope user where-my-hug -- npx -y where-my-hug

Then ask:

Where my hug at for transcribing handwritten recipe cards?

Your agent asks the few things it can't guess, splits the job into parts, and comes back with a report like the one below, every model and dataset in it looked up live moments before. It works for any job a model might do:

Where my hug at for spotting which birds visit my feeder camera?
Where my hug at for sorting support emails by how urgent they are?
Where my hug at for pulling the totals off scanned receipts?

How it works

1. Four questions first

Ask for "a model that reads handwriting" and you get whatever is popular: often too big for your GPU, under a license you can't ship, or in a format your code can't load. So before anything is named, four details come first. Your agent fills in what the conversation or your codebase already says, and asks you the rest:

What it asksWhat that decides
ComputeWhere will it run, and train if it needs to?
one 24 GB GPU, CPU only, a phone, rented GPUs
How big a model can be, and whether fine-tuning is possible at all
LicenseWhat may the result be used for?
commercial, open source, personal
Which licenses are allowed
StackWhat will call the model?
a Python service, Node, the browser, a mobile app
Which weight formats work
DataWhat training data is there, or could be?
none, about 300 labeled photos, can collect more
Whether fine-tuning or training is realistic

"Not sure yet" is a fine answer: the picks then cover the range, and every model shows the memory it needs, so the report helps you decide.

2. Split the job

The agent breaks the need into parts, each with an input and an output (photo → text, text → fields). A part that isn't a model's job (rules, geometry, parsing, lookups) is marked WRITE: code does it exactly. Most needs have one. A model doing work that code does exactly is a cost, not a feature.

3. Search for each part

What an agent remembers of Hugging Face is as old as its training, and misses the long tail. So nothing is picked from memory. For every other part, the agent writes a search (the Hub's task tag, a few keywords, the job in a few words), and it runs four ways on Hugging Face:

WayWhat it finds
Most downloaded for the taskWhat's proven
Trending for the taskWhat's new, including models released after the agent's training
Names holding each keywordFine-tunes and niche models
The text of model and dataset cardsThe long tail, by what the card says, like a web search

The ways take turns in the results, so a niche fine-tune isn't buried under whatever is popular for the task.

Models and data live elsewhere too, so the same search covers four other hubs, for models and datasets alike, taking turns the same way:

HubWhat it addsKey
KaggleCompetition and community datasets, and Kaggle Modelsnone
ZenodoResearch datasets and models, with DOIsnone
ModelScopeAlibaba's hub: many Hugging Face models under the same names, and strong on Chinese-language datanone
Roboflow UniverseLabeled image sets for detection and segmentation, and models trained on themROBOFLOW_API_KEY, free

ModelScope's search matches names, so it gets each keyword; the others get the job in a few words. An id from one of them keeps its hub's name (kaggle:landlord/handwriting-recognition, zenodo:1297399), so it's never mistaken for a Hugging Face one.

The same model or dataset is often on several hubs: ModelScope carries many of Hugging Face's models under the same owner and name. It's listed once, with the others after "also on", and the report links each, so you take it from whichever hub you use. Hugging Face's id leads where it has one, since it says the most (monthly downloads, gating, who hosts it).

4. Decide each part from what turned up

VerdictMeaning
USEA model the search found does this job as it is.
TUNEOne comes close: fine-tune it, ideally on a dataset the search found.
TRAINNothing it found comes close: train a model, seeded by datasets it found.
WRITENot a model's job: write the code.

The agent judges the results by what they say: task, card, downloads, age. It may add a model it knows that the search missed, but that pick ranks after the search's, and the report marks it from memory.

5. Check every pick

Every pick is looked up live on its own hub. Any that don't exist are dropped, and the agent goes back to the search for others. A pick that's on other hubs too names them, linked; picking it on two hubs gives one finding, not two. The rest are flagged for what would bite later and sized against your compute, and that report is what you see. Every id says whether it's a model or a dataset, and every dataset shows its size where the hub gives one (rows, images or bytes). It also lists what the search found that wasn't picked, so nothing it turned up is hidden. A TRAIN part whose search found models says to check them before training one. Every fact in the report (license, size, downloads, freshness) comes from the hubs themselves.

The report ends with Start here: the agent's pick of what to try first and why, and what to skip.

Under the hood it's an MCP server with three tools: where_my_hug for the method (steps 1, 2 and 4), where_my_hug_search for step 3, and where_my_hug_verify for step 5.

Flags

FlagWhen
UNCHECKEDIts hub didn't answer (down, rate-limited), or it's on Roboflow and no key is set. The id is kept, and asked again next time.
GATEDYou must accept its terms on its hub before downloading.
NO_LICENSENo license on its card.
NON_COMMERCIALNon-commercial or research-only terms (cc-by-nc-*, *-research, …).
OWN_TERMSCustom, use-restricted or no-derivatives terms (other, Llama, Gemma, RAIL, -nd-). Can come with NON_COMMERCIAL: cc-by-nc-nd is both.
STALENot updated in two years.
LITTLE_USEDUnder 100 downloads in the last month (Hugging Face only: the other hubs count downloads for all time, shown as such).

Sizes: what runs here, and what might do better

Every model shows the memory it needs to run: 2.4 bytes per parameter, half precision plus room for activations. A model to fine-tune also shows what that takes: about 1 byte per parameter with QLoRA, 16 in full. Against the compute you gave (its first "N GB"):

  • The first model that fits heads its part.
  • Bigger ones follow under "If you can make it work": the search's picks first, then any from memory. A stretch fits only quantized to 4 bits (0.6 bytes per parameter), or on a bigger GPU. Cloud needs more than that: the report names the providers serving it on Hugging Face, or says rented GPUs.
  • A part where nothing fits still shows its bigger options. It isn't sent back for replacements, since the hardware might be found.

A model named as a dataset (or the other way round) is found under the right kind. Licenses come from the card's metadata: license, license_name for custom terms (reported as other (qwen-research)), or a license: tag.

Example: recipe cards

The prompt above, from a live run on 2026-10-26 for one 24 GB GPU (abridged):

_Searched and checked on Hugging Face and the other hubs just now: 7 named, 0 not there and dropped._
## USE  ·  Read the card**Model: zai-org/GLM-OCR**image-to-text · license mit · 1.3B parameters (~3.2 GB to run) · 1.7M downloads a month · found: most downloaded for image-to-text, trending for image-to-text, name has ocrAlso: deepseek-ai/DeepSeek-OCR (model) · baidu/Unlimited-OCR (model)Models the search also found, not picked:- datalab-to/indra-ocr (5.0k downloads a month): found as trending for image-to-text- kaggle:lohith2007/handwritten-text-recognition: found as Kaggle search
## TUNE  ·  Read the hard hands**Model: microsoft/trocr-base-handwritten**image-to-text · license mit · 333.3M parameters (~0.8 GB to run; to fine-tune, ~0.3 GB with QLoRA, ~5.3 GB in full) · 113.7k downloads a month · also on ModelScope · found: name has handwritten, ModelScope name has handwritten**Data: kaggle:landlord/handwriting-recognition**"Handwriting Recognition" · 1.4 GB · license CC0: Public Domain · 49.7k downloads in all · 483 likes · updated 6 years ago · found: Kaggle searchWatch out: not updated in two years.Also: Voxel51/iam_handwriting_finevision (dataset) · zenodo:1297399 (dataset, stale)
## WRITE  ·  Parse the amountsNo model: write this one.
## At a glance1. Read the card        USE    model zai-org/GLM-OCR2. Read the hard hands  TUNE   model microsoft/trocr-base-handwritten + dataset kaggle:landlord/handwriting-recognition3. Parse the amounts    WRITE  your code
## Start hereRun zai-org/GLM-OCR on a dozen cards first: it fits the GPU, is MIT, and may read most hands as it is.Tune TrOCR only on the lines it misses, starting from the Kaggle handwriting set (CC0, the most used).

Every pick there was turned up by a search: the models and one dataset on Hugging Face, the others on Kaggle and Zenodo. TrOCR is on ModelScope too, under the same name, so the report links both.

Install

Needs Node 22.18 or later. USAGE.md has step-by-step setup and links for 20+ agents: Claude Code and Desktop, Codex, Copilot (CLI and VS Code), Cursor, Windsurf, Devin, Cline, Gemini CLI, Goose, OpenCode, Zed, Junie, Kiro, Amp, Warp, Continue, LM Studio, Hermes, Mistral Vibe and Open WebUI. The quick routes:

Claude Code, Codex, Copilot CLI, as a plugin: the tools, plus a skill that knows when to reach for them. One marketplace serves all three.

sh
/plugin marketplace add bikemeardsley/where-my-hug          # Claude Code/plugin install where-my-hug@where-my-hug
codex plugin marketplace add bikemeardsley/where-my-hug      # Codexcodex plugin add where-my-hug@where-my-hug
copilot plugin marketplace add bikemeardsley/where-my-hug    # Copilot CLIcopilot plugin install where-my-hug@where-my-hug

Any other MCP client: a stdio server in the client's config. Most call the key mcpServers (USAGE.md has the exceptions).

json
{ "mcpServers": { "where-my-hug": { "command": "npx", "args": ["-y", "where-my-hug"] } } }

Antigravity CLI, as a plugin: agy plugin install https://github.com/bikemeardsley/where-my-hug/tree/main/plugin

Gemini CLI, as an extension: gemini extensions install https://github.com/bikemeardsley/where-my-hug

As an Agent Skill, for agents that read SKILL.md: npx skills add bikemeardsley/where-my-hug.

HF_TOKEN (optional). Everything public works without one. To include private or gated repos your account can see, pass a Hugging Face token as HF_TOKEN (how, per agent); the Claude Code plugin asks for it and keeps it in secure storage. Without a token, a private repo looks missing, because Hugging Face answers 401 for both.

ROBOFLOW_API_KEY (optional). Kaggle, Zenodo and ModelScope are searched without a key. To add Roboflow Universe, sign up free at roboflow.com, copy your private API key (Settings → API Keys), and pass it as ROBOFLOW_API_KEY, the same way as HF_TOKEN; the Claude Code plugin asks for it too. Without it, the search says Roboflow wasn't searched.

What leaves your machine

The search the agent writes for each part (a task tag, keywords, a few words about the job) and the ids it picks, as GETs to huggingface.co/api, plus your token if you set one. The same search, and the ids picked from it, also go to the APIs of Kaggle, Zenodo, ModelScope (run by Alibaba Cloud in China) and, with your key, Roboflow. Each key is sent only to its own hub and never appears in a report. The need as you wrote it, the method and the report stay between you and your agent.

Starting it with npx (as the MCP server, or the skill's shell fallback) downloads the where-my-hug package from the npm registry, registry.npmjs.org. Nothing is sent there but the request for the package.

Limits

  • Sizes come from safetensors metadata. Repos with only GGUF or .bin weights show no parameter count, so they can't be sized against the compute.
  • License flags read the card's metadata, not the license text.
  • The search finds what the Hub's own search can: names and tags, and the text of cards. A model with an unrelated name and a bare card can still be missed.
  • Card text is searched through the API behind the Hub's search page, which isn't documented. If it changes, that way fails and the results say so; the other three carry on.
  • The other hubs are searched by the job's few words (ModelScope by each keyword), not by task tag, and Kaggle wants every word to match, so a short, plain phrase finds most there. Their downloads are all-time, so they're never flagged little used.
  • One finding across hubs means the same owner and name. A copy under another name (Kaggle's qwen-lm/qwen2.5-vl for Hugging Face's Qwen) is listed on its own, for the agent to judge.
  • A Roboflow project is a dataset, and a model only once a version of it was trained there. Its search can't be asked for one or the other, so a model search keeps the trained projects.

Security

Report a vulnerability privately through GitHub Security Advisories, not a public issue. SECURITY.md lists what it touches: GETs to Hugging Face and the four other hubs, and nothing on your machine.

Development

sh
node src/server.ts   # the server, straight from sourcenpm test             # offline: every hub is mocked, and the server is driven over stdio and HTTPnpm run check        # types

npm install also builds JavaScript into build/, which is what npx runs: Node won't strip types from a package inside node_modules.

License

MIT

来源:README.md,提交 20d74c2

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

4
  1. v0.3.1最新Oct 29, 2026
  2. v0.2.1Oct 23, 2026
  3. v0.2.0Oct 14, 2026
  4. v0.1.0Oct 13, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分