Hashgrid DNA (local)

ai.hashgrid由 hashgrid.ai 发布v1.3.0更新于 Oct 31, 2026

Search that learns from feedback, over text and images: embeds locally, sends DNA only vectors.

发布方自己的服务:Hashgrid DNA

已验证STDIO仅桌面知识与记忆AI 与机器学习

概览

AI 生成的概览

Hashgrid DNA 的本地 MCP 服务器:基于反馈学习的文本与图片搜索索引,内容留在本机,只上传向量。

可以做什么
  • 把文本或图片条目加入可搜索的网格,按路径键存储,便于用前缀缩小范围
  • 用文本查询或图片文件搜索条目,并继续翻取后续结果
  • 对结果打 -1 到 1 的分数,让之后的搜索排序更准
  • 为本服务器创建网格,或彻底删除网格及其全部条目和分数
  • 删除单个条目及其在索引中的内容
适用场景
适合需要一个小型私有搜索索引、用来检索自己的笔记、文档或图片,并能通过相关性反馈逐步改善结果的场景,而不是通用网页搜索。
运行要求
通过 uvx 从 PyPI 的 hashgrid 包本地运行(Python)。需要设置嵌入模型(HASHGRID_EMBEDDER,如 fastembed、openai 或 voyage)和本地 sqlite 索引路径(HASHGRID_INDEX)。需要网格 API 密钥(HASHGRID_API_KEY)或使用 create_grid;若选用 openai 或 voyage 嵌入模型,还需 OPENAI_API_KEY 或 VOYAGE_API_KEY。
安装前请注意
需要保管密钥 HASHGRID_API_KEY、OPENAI_API_KEY 和 VOYAGE_API_KEY。内容留在本机,但向量会发送给 Hashgrid;使用 openai 或 voyage 嵌入模型时,文本或图片会发送给相应服务。delete_item 与 delete_grid 会永久删除数据,delete_grid 需以网格名称确认。自助注册的网格最多容纳 1024 个条目。

安装

在 SourceWeft 中

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

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

其他 MCP 客户端

参照 仓库 中的启动说明。

README

hashgrid

The Python client for Hashgrid DNA, a search engine that learns from your grades. You store items, ask a question, get the items that fit it best, and grade them with an LLM, a smaller model or your users. Each grade improves the results for every question.

bash
pip install hashgrid

Sign up

Each grid has its own API key (hg-…). DNA.signup makes a grid, no key needed, and returns its key:

python
from hashgrid import DNA
api_key = DNA.signup("mine")print(api_key)   # shown only now: store it, e.g. as $HASHGRID_API_KEY

DNA(api_key) opens the grid, and DNA() opens it from $HASHGRID_API_KEY. A grid made this way holds up to 1024 items, queries included (dna.info().max_items), and each address can sign up a few times a day. Need more? Write to [email protected].

The loop

python
from hashgrid import DNA
dna = DNA()
dna.put("cities/lisbon", "Lisbon, a hilly coastal capital")dna.put("cities/oslo", "Oslo, between fjords and forest")
query = dna.query("a capital by the sea")results = query.results(limit=2, prefix="cities/")results[0].key                      # "cities/lisbon"query.grade(results[0], 1.0)        # a good resultquery.grade(results[1], -0.5)       # a poor one
  • Items live at keys, like 42 or tools/42. prefix narrows results and listings to keys that start with it. Results return keys and metadata, not content: map the keys back to your own data.
  • Queries have an id. To ask the same question again, reopen it with dna.query(id=query.id), so its grades add up.
  • Grades run from -1 (wrong) to 1 (right). You can grade any item, not only those a query returned. Only grades train DNA, and a grade shows in results within a few seconds.

Content

An item or a query is text (str), a record (a dict), an image (its bytes, or a Path to its file), or an embedding from the grid's model (a list of floats). DNA embeds the rest itself.

python
from pathlib import Path
dna.put("tools/search", {"name": "search", "description": "Search the web"})dna.put("photos/beach", Path("beach.jpg"))dna.put("raw", '{"a": 1}', type="text/plain")   # text that looks like JSON

DNA keeps only what it matches on: text and records up to 8 KB, images as a 512 px WebP. dna.get(key) reads one item back, as kept.

Everything else

methodroute
DNA.signup(name), returns the API keyPOST /
dna.info()GET /
dna.delete_grid()DELETE /
dna.put(key, content, type=, if_match=, if_none_match=), dna.put_many({key: content})PUT /items/{key}
dna.get(key)GET /items/{key}
dna.delete(key)DELETE /items/{key}
dna.items(prefix), every pageGET /items
dna.query(content), or dna.query(id=…) to reopen onePOST /queries
query.results(limit, prefix, ungraded=)GET /queries/{id}/results
query.grade(key, score)PUT /queries/{id}/grades/{key}
query.grades(), as {key: score}GET /queries/{id}/grades
query.delete_grade(key)DELETE /queries/{id}/grades/{key}
query.delete()DELETE /queries/{id}

Methods take a key or the Item / Result itself. AsyncDNA and AsyncQuery have the same methods, awaited. Errors are subclasses of DNAError: Unauthorized (401), Forbidden (403, the grid is full), NotFound (404), PreconditionFailed (412), TooLarge (413), UnsupportedType (415), Invalid (422) and TooManyRequests (429).

For agents, DNA has a hosted MCP server at https://dna.hashgrid.ai/mcp.

License

MIT

来源:README.md,提交 aeb2def

工具

7

add_item

Add an item to search: `text`, or `image`, the path of an image file (images need an image embedder). `key` is a path unique in the grid (e.g. "/docs/intro"), so searches can narrow by prefix; left out, it is a hash of the content, and adding the same content again changes nothing. Returns the item's id and key.

输入参数keytextimage

more_results

The next `k` results of a search (1 to 50), not shown before; empty when none are left.

输入参数kprefixquery_id必填

score

Score how well item `item_id` fits search `query_id`, from -1 (wrong) to 1 (perfect): a result of the search, or any item. Only scores train DNA; a new score replaces the last.

输入参数score必填item_id必填query_id必填

delete_item

Delete an item, its content in the index and its scores.

输入参数item_id必填

create_grid

Create a DNA grid for this server, when it has none (no key needed): its API key is saved in the local index, and the other tools use it from then on.

输入参数name

delete_grid

Delete this server's grid, every item and score in it and its content in the local index, for good. `confirm` must be the grid's name. Only when the user asks for it.

输入参数confirm必填

版本历史

3
  1. v1.3.0最新Oct 24, 2026
  2. v1.1.0Oct 19, 2026
  3. v1.0.0Oct 19, 2026

评分

已满足适用检查项的 90%

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

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Hashgrid 集成