Humans · developers and builders
Find the action that does the job. Then call it with confidence.
One search over 2.2 million tool actions inside MCP servers, APIs, CLIs, SDKs, models, robots and devices. Every result carries a label our instruments measured. Use it in the box, from your code, inside your editor's agent, or on the command line.
Two searches, same doors
- 1. Search over our own index live
- 2.2 million tool actions inside the software agents and robots can invoke, every result labelled by our checks. This is what answers today, through the box, the API, your editor's agent or the CLI.
- 2. The neutral router next
- One call that decides, on the question itself, which search source to ask: our index first, then outside engines, judged on quality, latency and cost, with the source named. Not built yet; it will arrive as its own endpoint and MCP tool.
1. Ask in the box
The search box runs the same call your code will. Type the task in plain words (“refund a stripe payment”, “turn off the living room lights”). You get one answer on top, with the reason and a question back when the task is ambiguous, then every result grouped by the software it lives in. Nothing is softened: a result found in code says so.
2. Call the API from your code
Free, no key. GET /api/v1/find takes q (the task), k (1 to 25 results) and answer=1 for the one definite pick. The full reference is in the API docs.
curl "https://unfragile.ai/api/v1/find?q=refund+a+stripe+payment&k=5&answer=1"import json, urllib.parse, urllib.request
q = urllib.parse.quote("refund a stripe payment")
with urllib.request.urlopen(f"https://unfragile.ai/api/v1/find?q={q}&k=5&answer=1") as r:
data = json.load(r)
pick = data["answer"]["pick"]
if pick:
print(pick["name"], pick["action"], pick["label"]) # e.g. Stripe API PostChargesChargeRefund verified and signed
else:
print("no fit:", data["answer"]["why"], data["answer"]["question"])
for row in data["results"]:
print(row["label"].ljust(32), row["name"], "·", row["action"])const q = encodeURIComponent("send a slack message");
const res = await fetch(`https://unfragile.ai/api/v1/find?q=${q}&k=5&answer=1`);
if (!res.ok) throw new Error(`find ${res.status}`); // 503 = the search service is down; nothing is guessed
const { results, answer } = await res.json();
console.log(answer.pick ? `${answer.pick.name}: ${answer.pick.action} [${answer.pick.label}]` : answer.why);Each result has name (the software), action, description, tier and label, verification_score, downloads_monthly, and url: the signed passport for verified records, null for the rest. The answer has pick, why, question and confidence. When the search service is down the call returns 503 and says so.
3. Give your editor's agent the same search
Claude Code, one command:
claude mcp add unfragile -- npx -y @unfragile/mcp-serverClaude Desktop, Cursor, Windsurf, Cline or any MCP client: add this to its MCP configuration file.
{
"mcpServers": {
"unfragile": { "command": "npx", "args": ["-y", "@unfragile/mcp-server"] }
}
}Your agent then has unfragile_find and six more tools. Ask it: “find the tool that refunds a Stripe payment and tell me its label.” Details on the MCP server page.
4. Check before you install
The same package ships a command-line guard. verify prints a signed verdict for a package or MCP server; guard wraps an install command and blocks a flagged target.
npx -p @unfragile/mcp-server unfragile verify npm:postmark-mcpnpx -p @unfragile/mcp-server unfragile guard -- claude mcp add pg -- npx -y @scope/pg-mcpVerdicts are trusted, caution, unverified or flagged. Unknown is never trusted. If the service is unreachable the guard says so and treats the target as unverified; it never fails open.
5. What the labels mean
- verified and signed
- The software behind it answered our checks (its package resolves or its endpoint responds) and carries an Ed25519-signed passport you can verify offline.
- official
- Published by the vendor itself. Shown with the verified label when both hold.
- found in code, not yet checked
- We read this action from the software's own source or schema. It exists in the code; we have not yet confirmed the door answers. Read the source before relying on it.
- demo or tutorial
- Example code, a sample or a teaching repository. Shown so you can see it; never the recommended pick while anything else fits.
- failed its last check
- The door did not answer on our last check. Do not invoke it.
Labels are decided by our checks and never changed by ranking, by a model, or by anyone paying. How we check.