{"name":"ai.hashgrid/dna","slug":"hashgrid-dna","title":"Hashgrid DNA","description":"A search engine that learns from feedback, over embeddings: one tool per API route.","url":"https://mcp.market/server/hashgrid-dna","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T06:46:13.641Z","last_ok_at":"2026-11-04T06:46:13.641Z","latency_ms":689},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://dna.hashgrid.ai","version":"1.1.0","remotes":[{"type":"streamable-http","url":"https://dna.hashgrid.ai/mcp","headers":[{"description":"Your DNA API key, as \"Bearer hg-…\". No key yet? Write to office@hashgrid.ai.","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"create_edge","description":"POST /nodes/{nid}/edges, the search: from query node `nid`, the best node it has not been shown yet,\namong those whose key starts with `prefix` (\"\" for any), stored as a new edge: `id` is the found node's id,\n`score` is null until you score it (update_edge). Null when nothing is left. Call again for the next.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"prefix":{"default":"","title":"Prefix","type":"string"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid"],"title":"create_edgeArguments"}},{"name":"create_grid","description":"POST /: create a grid, your own space of nodes and scores; no API key needed. Returns its `api_key`, shown\nonly now: pass it as `api_key` to every other tool, or send it as the header `Authorization: Bearer hg-…`.\nIt holds up to `max_nodes` nodes. Each address may create only a few grids a day.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"default":"hashgrid","title":"Name","type":"string"}},"title":"create_gridArguments"}},{"name":"create_node","description":"POST /nodes: add a node. An item gets a `key`, a path unique in the grid (e.g. \"/items/42\"), so searches\ncan find it; a query gets none. `emb` is its embedding, 1 to 2048 floats from any model; use one model per\ngrid. Returns its id and key (not its emb, to keep replies short; get_node has it).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"emb":{"items":{"type":"number"},"title":"Emb","type":"array"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Key"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["emb"],"title":"create_nodeArguments"}},{"name":"delete_edge","description":"DELETE /nodes/{nid}/edges/{eid}: forget a result, so it can be suggested again; its score no longer\ntrains.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"eid":{"title":"Eid","type":"string"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid","eid"],"title":"delete_edgeArguments"}},{"name":"delete_node","description":"DELETE /nodes/{nid}: delete a node and every edge from or to it; its scores no longer train.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid"],"title":"delete_nodeArguments"}},{"name":"get_edge","description":"GET /nodes/{nid}/edges/{eid}: one result of query `nid`, and its score (null if not scored).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"eid":{"title":"Eid","type":"string"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid","eid"],"title":"get_edgeArguments"}},{"name":"get_grid","description":"GET /: the grid the API key opens: its name, and the most nodes it holds, `max_nodes` (null: no limit).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"title":"get_gridArguments"}},{"name":"get_node","description":"GET /nodes/{nid}: a node, with its key (null if it has none) and its embedding `emb`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid"],"title":"get_nodeArguments"}},{"name":"list_edges","description":"GET /nodes/{nid}/edges: a query's results so far, each an edge with the found node's `id` and its\n`score` (null if not scored), in id order. `limit` is 1 to 1024; for the next page, pass the last id as\n`cursor`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cursor"},"limit":{"default":32,"title":"Limit","type":"integer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid"],"title":"list_edgesArguments"}},{"name":"list_nodes","description":"GET /nodes: the grid's nodes, each with its id, key and emb, in id order. `limit` is 1 to 1024; for the\nnext page, pass the last id as `cursor`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cursor"},"limit":{"default":32,"title":"Limit","type":"integer"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"title":"list_nodesArguments"}},{"name":"put_edge","description":"PUT /nodes/{nid}/edges/{eid}: score how well node `eid` fits query `nid`, from -1 (wrong) to 1\n(perfect), creating the edge if DNA never suggested it, e.g. scores you already have. Only scores train\nDNA; a new score replaces the last.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"eid":{"title":"Eid","type":"string"},"score":{"title":"Score","type":"number"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid","eid","score"],"title":"put_edgeArguments"}},{"name":"update_edge","description":"PATCH /nodes/{nid}/edges/{eid}: score a result of query `nid` that create_edge returned, from -1 (wrong)\nto 1 (perfect). Only scores train DNA; a new score replaces the last.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"eid":{"title":"Eid","type":"string"},"score":{"title":"Score","type":"number"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid","eid","score"],"title":"update_edgeArguments"}},{"name":"update_node","description":"PATCH /nodes/{nid}: change a node. `key`: a new path, or null to remove it, so the node can no longer be\nfound; leave it out to keep it. `emb`: a new embedding; leave it out to keep it. Its scores keep training,\non the new embedding. Returns its id and key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"nid":{"title":"Nid","type":"string"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"","title":"Key"},"emb":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"title":"Emb"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Api Key"}},"required":["nid"],"title":"update_nodeArguments"}}],"scan":{"score":72,"grade":"B","scanned_at":"2026-10-27T18:16:28.672Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-27T18:16:28.617Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1498ms"]},"poisoning":{"score":15,"max":15,"notes":["13 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://dna.hashgrid.ai/mcp","reachable":true,"authRequired":false,"latencyMs":1498,"serverInfo":{"name":"dna","version":"1.2.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://dna.hashgrid.ai/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}