Formula
One score from 5 public signals, each ranked within its own kind
Signals
5 exist today. A tool is scored on whichever ones it has: nothing is taken off for a missing signal or a recorded zero, though the last 20 points need a second signal (see Confidence). The strongest number a tool holds is always the one it leads with; the weight only decides which leads when two rank the same.
Percentiles
Each number is swapped for its place among things measured the same way — a repo's stars against other repos' stars, a registry's installs against other registries'. A kind with fewer than 30 measured things is too small to rank within, so those are ranked against every kind. Listed twice on the same link? It counts once. On this page, p90 means the 90th percentile: higher than 90% of its kind.
Confidence
One signal can be luck, a launch, or marketing. Several sources agreeing is stronger evidence than one. So we take your strongest number as 0.8 of the score, and your second strongest adds the last 0.2. With one signal the most you can reach is 80. A third counts only when it beats one of those two, so earning more evidence is never punished.
Worked Examples
0.8 × the best rank a tool holds, plus 0.2 × its second best, cut to one decimal at the end and never rounded up, so only a perfect row shows 100.0. Ranked tables print three decimals from the full score, or four when three would make two different scores look alike, and rows with the same full score share a rank. These sums use the same numbers as the score.
| Component | Signals | Calculation | Score |
|---|---|---|---|
openclaw-openclaw 3 Signals Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 | 167 mentions → p99.3151 (not used: weaker than both) 388,568 stars → p100 ← strongest 81,586 forks → p100 ← second | 0.8 × 100 + 0.2 × 100 = 80 + 20 | 100.0 |
karpathy-coding-discipline 2 Signals Drop into CLAUDE.md/AGENTS.md as the first behavior norm a coding agent ingrains — think… | 209,417 stars → p99.9845 ← strongest 21,315 forks → p99.9501 ← second | 0.8 × 99.9845 + 0.2 × 99.9501 = 79.99 + 19.99 | 99.9 |
circle-mcp-server 1 Signal · Most-Starred Single-Signal Row Operate and audit your Circle.so community from Claude with tools for spaces, posts… | 2,621 stars → p98.7409 ← strongest | 0.8 × 98.7409 + 0.2 × 0 (nothing else to corroborate) = 78.99 + 0 | 78.9 |
math-mcp Registry Listing Enable your LLMs to perform accurate numerical calculations with a simple API. Leverage… | 2,058,825 installs → p100 ← strongest | 0.8 × 100 + 0.2 × 0 (nothing else to corroborate) = 80 + 0 | 80.0 |
falahgs-gemini-data-analysis-research Median Bridges to Google's Gemini model for data analysis, email communication, and reasoning… | 4 stars → p54.094 ← strongest 3 forks → p53.55 ← second | 0.8 × 54.094 + 0.2 × 53.55 = 43.28 + 10.71 | 53.9 |
anon Tested · Failed Delegated account access for agents — a user grants access without sharing credentials. | failed install test → p4.0541 ← strongest | 0.8 × 4.0541 + 0.2 × 0 (nothing else to corroborate) = 3.24 + 0 | 3.2 |
additional-directories Unmeasured Grant access to additional directories outside the current project. Useful for monorepo… | Unmeasured | No Value | — |
Coverage
The 36,127 blank rows point at 27,740 different GitHub repositories, and we asked GitHub about every one; some repositories are listed in more than one row. Most have nothing to measure yet. The counts below are rows.
Separately: we record when a repo was last pushed to, and flag anything untouched for two years as Stale. It is a warning label, never a term in the score — being freshly pushed proves a tool is alive, not that anyone uses it, and a brand-new repo nobody has starred must not outrank a maintained one. It breaks ties. Rows are ordered by the full score, then by how many signals back it, then by the latest commit, then by stars, then by name, so among tools on the same score the ones still being worked on come first. We hold a push date for 54,694 rows; 8 of them are stale.
API
The same ranked JSON, three ways in.
GET /api/rank?component=mcp&vertical=finance GET /api/search?q=browser+automation
Not on npm yet · build from cli/ in the repository, then: armory rank --domain payments armory search "oauth"
rank_components · search_catalog
Weights are versioned in the repository (lib/rank.mjs) · Open Issue