CLI and MCP
Everything the site does, from a terminal or from your own agent: rank models under any index, read any benchmark, compare, chart, and, with your token, run your page. One set of 35 tools serves the MCP server, the CLI and a plain HTTP API, so they never disagree with each other or with mypriors.com.
Connect an agent (MCP)
The hosted server needs no install. Reading is public. Tools that change your page read your agent token from the header, so add it only if you want your agent to edit your page.
claude mcp add --transport http priors https://mypriors.com/mcp
claude mcp add --transport http priors https://mypriors.com/mcp \ --header "Authorization: Bearer pri_your_token"
{
"mcpServers": {
"priors": {
"url": "https://mypriors.com/mcp",
"headers": { "Authorization": "Bearer pri_your_token" }
}
}
}Clients that only start local programs use the CLI as a stdio server instead (install it below first).
{
"mcpServers": {
"priors": {
"command": "priors",
"args": ["mcp"],
"env": { "PRIORS_TOKEN": "pri_your_token" }
}
}
}[mcp_servers.priors]
command = "priors"
args = ["mcp"]
env = { PRIORS_TOKEN = "pri_your_token" }Install the CLI
One file, no dependencies, Node 18 or newer.
curl -fsSL https://mypriors.com/install.sh | sh
npm install -g https://mypriors.com/cli/priors-cli.tgz
npx -y https://mypriors.com/cli/priors-cli.tgz rank --top 10
priors update
priors rank --top 10 # the default General frontier index
priors rank --index @adamholter # someone's published index, with their imported benchmarks
priors rank --weights simplebench:3,arc-agi-3:1 --lab anthropic
priors model "opus 5.5" # ranking plus every benchmark value
priors bench terminal-bench-4 --limit 15 # a leaderboard as published
priors compare "opus 5.5" "gpt-6.1 sol" # points per benchmark behind the gap
priors history --mode adapting # the ranking over time
priors link --index @adamholter # builder, share-card and chart links
priors login pri_your_token # once, for your own page
priors whoami
priors index set coding.json # add or change one index; the others stay
priors section set '{"id":"c","kind":"pareto","indexId":"coding"}' --at 1
priors theme --preset night --accent "#C2410C"
priors import mybench.json # your own benchmark's results
priors call fit_ranking order='["opus 5.5","gpt-6.1 sol","fable 5.1"]'Add --json to any command for raw JSON. priors tools lists every tool and priors call <tool> key=value … runs any of them, so nothing in this page is out of the CLI's reach.
Your agent token
To change your own page you need a token: on your page, Edit page, Agent access, Mint token. It looks like pri_ and 48 characters, is shown once, and minting a new one replaces the old. Give it to the CLI with priors login (saved to ~/.config/priors/config.json, readable only by you) or set PRIORS_TOKEN. No page yet? Claim a handle first; signing in, claiming a handle, uploading images and deleting a page stay in the browser.
The index argument
Most read tools rank under an index. Leave it out for the default. Otherwise pass any of:
- a published page:
@handle, or@handle/index-idfor one of its tabs. That page's own imported benchmarks come along. - a mypriors.com link, or the
i=value from one (decode_index_linkturns it into an editable object). - an object:
{ "weights": { "simplebench": 3, "arc-agi-3": 1 }, "strictness": 80 }. Any IndexConfig field works, merged onto the default.
Plain HTTP
curl -s https://mypriors.com/api/tools/rank_models -d '{"top":5,"index":{"weights":{"simplebench":1}}}'
curl -s https://mypriors.com/api/tools # the catalog with JSON schemas
curl -s https://mypriors.com/api/tools/whoami -H "Authorization: Bearer $PRIORS_TOKEN" -d '{}'The MCP endpoint is POST https://mypriors.com/mcp (Streamable HTTP, stateless). Failures come back as { "error": "..." } with the right status. The older POST /api/agent that the skill uses keeps working.
Read tools public
data_statusno argumentsHow fresh the data is: snapshot date, when it was built, and counts of benchmarks, models and measurements. Priors rebuilds its data about every 15 minutes.
list_benchmarksquery, category, limitThe benchmark catalog: id, name, category, unit, direction, how many measurements and models it has, when the publisher last updated it, and what it measures. Filter by words or category.
get_benchmarkbenchmark*, limit, effortOne benchmark's leaderboard exactly as published: every model and effort with its score, confidence interval, cost per task and source link, best first.
list_modelsquery, lab, open_weights, limitModels in the data with lab, release date, open-weights flag and the reasoning efforts measured. Filter by words, lab or open weights.
get_modelmodel*, indexEverything about one model: identity, its efforts, every benchmark value published for each effort (with cost, tokens and time where measured), and where it ranks under the index.
rank_modelstop, efforts, lab, models, indexThe leaderboard under an index, as the site shows it: rank, score, measuredPct (how much of the score is measured, not estimated), cost per task, speed. Also `settings` (what decides who is ranked) and `excluded`: models left out for too little measured data or a missing required benchmark, best covered first, with what they lack.
pareto_frontierx, efforts, indexIndex score against cost, time, speed, latency or output tokens, exactly as the chart on mypriors.com computes it: every point, which ones are on the Pareto frontier (nothing else is both better on x and higher in score), and a PNG of the site's chart (`image`) to show the user plus the interactive chart (`link`). Use it for any 'best value', 'fastest for its score' or tradeoff question.
index_historymode, top, indexHow an index's ranking moved: the top models on each snapshot date. mode fixed scores every day with the index as written; adapting drops benchmarks that were not yet established that day.
default_indexno argumentsThe default General frontier index (used whenever `index` is omitted): `index` is the object to edit and pass back as `index`; `settings` explains who it ranks and leaves out, and `benchmarks` names what each weight is.
index_linkindexShareable mypriors.com links for an index: the builder, the share-card image, and chart cards for cost, time and speed. Also the encoded `i=` string.
decode_index_linklink*Read an index out of a mypriors.com link (or an `i=` value) as a full index object, which can be edited and passed back as `index`.
get_pagehandle*A published page by handle: name, bio, theme, sections and indices, and which benchmarks the owner imported. Same as mypriors.com/<handle>.
explore_pagesquery, limitPublished pages, newest first (what /explore shows): handle, name, bio and the main index's name and size.
theme_presetsno argumentsPage themes a page can use (`preset` in set_theme), with their light or dark mode.
get_mixindexThe index's benchmark shares, mix metrics and top of the ranking. Takes an optional `index`.
explain_modelmodel*, indexWhy a model ranks where it does: each benchmark's share, the model's normalized score on it, its rank on that benchmark, and how much each benchmark pulls it ahead of (+) or behind (−) its neighbors above and below, in index points. Takes an optional `index`.
compare_modelsa*, b*, indexWhy one model ranks above or below another under the current mix: each benchmark's share, both models' normalized scores on it, and how many index points it gives to which model. The points add up to the score gap. Takes an optional `index`.
find_benchmarksmodel*, direction*, against, indexBenchmarks (in or out of the mix) where a model is unusually strong or weak versus a comparison set (default: the other top-10 models). Use to find benchmarks to add or reweight to move a model. Takes an optional `index`.
search_benchmarksquery*, indexFind benchmarks by what they measure: words from the task, a name, or a category (coding, agentic, reasoning, knowledge, math, long-context, instruction, creative, safety, economics). Any word can match. Returns each benchmark's id, category, quality, how many models it covers and what it measures, so you can pick by description. Takes an optional `index`.
try_mixpin, weights*, indexEvaluate a hand-written mix (benchmark → percent share) against the index: metrics, churn and the ranking with each model's previous rank. Nothing is saved. Takes an optional `index`.
solve_editmoves, exclude, include, keep_top, max_benchmarks, allow_add, indexOptimizer: the smallest change to the index's mix that satisfies ranking moves and benchmark constraints. Returns candidates; nothing is saved. Apply one with upsert_index. Takes an optional `index`.
fit_rankingorder, exclude, focus, indexBuild a fresh mix that reproduces a model order (the onboarding algorithm). Returns weights; nothing is saved. Apply with upsert_index. Takes an optional `index`.
query_datametrics*, models, labs, weights, top, efforts, indexA table of values per model under the index. Metrics: index (index score), cost (cost per task, USD), time (time per task, s), speed (output tok/s), latency (time to first token, s), tokens (output tokens per task), or any benchmark by name or id (its published value). Pick models by name, a lab, or the top N of the ranking (default 10, at most 200). efforts: best (one row per model, its best-scoring effort), all, or a list like ["xhigh","max"]. Default: all when a cost, time, speed, latency or tokens metric is asked for (each effort has its own score, cost and time), else best. Rows carry rank, effort and measuredPct (how much of the index score is measured, not estimated). Read `note`: it says which named models are unranked and why, and when the rows are only the top of a longer ranking. For a cost or time frontier use pareto_frontier instead. Takes an optional `index`.
make_charttype*, metric*, x_metric, models, variants, labs, weights, top, efforts, from_effort, to_effort, delta, title, indexDraw a chart from the data and get it back as a PNG URL (`image`) to show the user and a link to the interactive chart on mypriors.com (`link`). Every value comes from the data. Types: bar (one value per model), effort_lines (a metric across reasoning efforts), effort_compare (grouped bars for listed efforts), effort_delta (to_effort minus from_effort), scatter (metric on y against x_metric; every reasoning effort is its own point unless efforts says otherwise). Metrics as in query_data. Default models: the top of the ranking (at most 40). `variants` draws exact model + effort configurations ("GPT-6 Sol max"). Takes an optional `index`.
Page tools need your token
whoamino argumentsYour own page: handle, display name, bio, socials, theme, every index (full configs) and every section. Read this before changing anything.
update_pagedisplayName, bio, socials, avatarUrlChange any of: displayName, bio, socials ([{label,url}]), avatarUrl. Only the fields you give change.
set_themepreset, mode, accent, surface, serif, mono, cssChange the page's look. Only the fields you give change; pass css as an empty string to clear it. preset: see theme_presets. css is scoped by convention to .page-root and limited to 10KB.
set_indicesindices*Replace the whole list of indices (tabs). Prefer upsert_index and delete_index, which never touch the others. Each needs id, name, weights, required, cutoff, estimateMissing, variants.
upsert_indexindex*, positionCreate an index or change one by id, leaving every other index alone. Fields you give replace the stored ones (weights as a whole); fields you omit stay. Any IndexConfig field works: weights, required, strictness, estimateMissing, effortMatching, rankingVariants, paretoVariants, efforts, excludeModels, releasedAfter, costSource, costBasis, timeSource, highlight, labs.
delete_indexid*Remove one index (tab) by id. The last index cannot be removed.
set_sectionssections*Replace the page layout: the ordered list of sections. Prefer upsert_section and remove_section. A section is { id, kind, title?, indexId?, benchmarkId?, body?, links?, hidden?, view?, metrics? }; kind is rankings, pareto, speed, benchmark, history, gallery, text or links.
upsert_sectionsection*, positionAdd a section or change one by id, leaving the others alone. position is the 0-based place for a new section (default: end).
remove_sectionid*Remove a section by id.
import_benchmarkbenchmark*, rows*, missingAdd your own benchmark's results to your page (re-importing the same benchmark id replaces it). Rows whose model name Priors does not recognize are dropped. Never invent scores; costUsd only if the source publishes it. Wire it into an index afterwards with upsert_index.
list_importsno argumentsBenchmarks you imported on your page: id, name and row count.
* required. The list above is generated from the running server.
What stays true
Scores come back as published. Nothing is stretched, estimated or invented; a score the index had to estimate is marked by how much of it is measured (measuredShare). A model is a model plus a reasoning effort. Cost is measured cost per task, never token price. Tools that only compute (try_mix, solve_edit, fit_ranking) never save; saving is always an explicit upsert_index.
Not covered: the in-app assistant (it needs a browser sign-in), claiming a handle, image uploads, deleting a page, and removing an imported benchmark (re-importing the same id replaces it).