{"name":"rank.md","title":"RANK.md MCP server","does":"rank.md is a map of 3,271 ranking boards with their criteria, plus ranking math on items you send: weighted scores, rank fusion, pairwise ratings, flip risk and what to try next.","not_here":"current rankings of anything; no board holds ranked items yet","feedback":{"url":"https://rank.md/feedback","note":"A person can ask for something that isn't here. An agent can send it by POST, once the person it works for says yes."},"version":"2.0.0","url":"https://rank.md/mcp","transport":"Streamable HTTP, stateless. POST JSON-RPC 2.0 to this URL; there is no event stream to open with GET.","auth":"none","add":"claude mcp add --transport http rank https://rank.md/mcp","config":{"cursor":{"file":".cursor/mcp.json","json":{"mcpServers":{"rank":{"url":"https://rank.md/mcp"}}}},"vscode":{"file":".vscode/mcp.json","json":{"servers":{"rank":{"type":"http","url":"https://rank.md/mcp"}}}}},"call":{"method":"POST","url":"https://rank.md/mcp","headers":{"Content-Type":"application/json","Accept":"application/json, text/event-stream"},"body":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_nodes","arguments":{"q":"code review","limit":5}}}},"tools":[{"name":"note_missing","title":"Note what rank.md is missing","description":"Leave an anonymous note that a task needed something rank.md doesn't do (for example: current rankings of anything; no board holds ranked items yet). Takes a short phrase naming the capability, not the task. Leave out names, addresses, keys and anything private. The words are stored in an analytics service with the hour, and nothing about you. The site owner may read these counts. Nothing is promised. No email is sent and nobody replies.","required":["need"],"read_only":false},{"name":"find_nodes","title":"Find boards and categories on the map","description":"Searches the rank.md map (33 domains, 406 categories and 3,271 boards) for the boards, categories and domains that match a query, best first, with each match's trail and URLs. Token and prefix matching over names, rank.md 1.0 subject names and archetype titles, with rare words counting for more than common ones; deterministic. Filter by kind or archetype. Use it to find the board for a choice, then pull its scaffold and rank your own options. It reads only the map kept with the code: it fetches nothing, stores nothing and endorses nothing.","required":["q"],"read_only":true,"example":{"q":"code review","limit":5}},{"name":"expand_node","title":"Open a node of the map","description":"Opens one node of the rank.md map: its trail, its children with board counts and URLs, the archetype's criteria by facet for categories and boards, and the RANK.md scaffold with a checklist for boards. Accepts a path, a rank.md URL or a 1.0 subject name such as tool. Without a path it lists the domains. It reads only the map kept with the code: it fetches nothing, stores nothing and endorses nothing.","required":[],"read_only":true,"example":{"path":"ai-agents/agents-to-hire"}},{"name":"node_scaffold","title":"Pull the RANK.md scaffold for a board","description":"Returns the RANK.md scaffold for a board (or a category) of the rank.md map: the archetype's criteria with weights, direction, units, half-lives, max ages, musts and how to measure each from your own data, how long a ranking stays fresh and the rule for acting, with node set to the board's path and no items. Also a checklist of what to gather and the next calls. The criteria are starting points to edit, not advice on what matters to you. It reads only the map kept with the code: it fetches nothing, stores nothing and endorses nothing.","required":["path"],"read_only":true,"example":{"path":"ai-agents/agents-to-hire/code-review-agents"}},{"name":"rank_scaffold","title":"Pull the ranking scaffold for a subject","description":"Returns the scaffold for a board on the map (node, such as ai-agents/agents-to-hire/code-review-agents) or for a 1.0 subject before you rank anything: criteria with weights, direction, units, half-lives, max ages, musts and how to measure each from your own data, how long a ranking stays fresh, and the rule for acting. Optional question, weight overrides and criteria to drop. Returns the RANK.md text, its JSON, a checklist of signals to gather, the board URL, the next calls and how to check back for items. With node, the scaffold comes from the board's archetype and carries the node; a 1.0 subject also names the node it maps to. Without node or subject, lists the 22 subjects by family (find boards with find_nodes). The criteria are starting points to edit, not advice on what matters to you. It fetches nothing, stores nothing, contacts no one, buys nothing and endorses nothing.","required":[],"read_only":true,"example":{"subject":"tool"}},{"name":"rank_items","title":"Rank items by your criteria","description":"Ranks the items you send by the criteria and weights you send: musts exclude first, each criterion is normalized to 0..1 (1 = best), the missing rule applies, then a weighted sum (or product, TOPSIS, lexicographic) gives a 0..1 score. Timed signals decay by half-life and go stale past max_age. Returns ranks, scores, each criterion's contribution, a plain \"why\", moves against previous ranks, the excluded items with what failed, and a snapshot id that changes whenever the ranking does. Optional uncertainty adds low, high and the chance each item is truly best. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["criteria","items"],"read_only":true,"example":{"criteria":[{"id":"accuracy","label":"Field accuracy on your invoices","weight":0.5,"better":"higher","unit":"ratio","must":{"op":">=","value":0.8}},{"id":"p95_ms","label":"p95 latency","weight":0.3,"better":"lower","unit":"ms"},{"id":"cost","label":"Cost per page","weight":0.2,"better":"lower","unit":"usd"}],"items":[{"label":"Layout parser","values":{"accuracy":0.94,"p95_ms":820,"cost":0.012},"n":{"accuracy":400}},{"label":"OCR service","values":{"accuracy":0.9,"p95_ms":540,"cost":0.008},"n":{"accuracy":400}},{"label":"Vision model","values":{"accuracy":0.96,"p95_ms":2100,"cost":0.03},"n":{"accuracy":200}},{"label":"Rules engine","values":{"accuracy":0.71,"p95_ms":120,"cost":0.001}}],"now":"2026-10-24T18:00:00Z"}},{"name":"decide","title":"Decide before acting","description":"Reads a ranking against your rule and says act, ask, recheck, explore or stop, with every check (has items, fresh, minimum score, lead over #2, confidence), a shortlist, an optional pick within a budget, and the smallest changes that would flip the pick. Send items already scored ({id, label, score, p_best?}), or criteria and items with values and it ranks them first. \"act\" means the ranking supports acting on #1 within your own rules on spending, sending and signing; a ranking never authorizes an action by itself. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["items"],"read_only":true,"example":{"criteria":[{"id":"accuracy","label":"Field accuracy on your invoices","weight":0.5,"better":"higher","unit":"ratio","must":{"op":">=","value":0.8}},{"id":"p95_ms","label":"p95 latency","weight":0.3,"better":"lower","unit":"ms"},{"id":"cost","label":"Cost per page","weight":0.2,"better":"lower","unit":"usd"}],"items":[{"label":"Layout parser","values":{"accuracy":0.94,"p95_ms":820,"cost":0.012},"n":{"accuracy":400}},{"label":"OCR service","values":{"accuracy":0.9,"p95_ms":540,"cost":0.008},"n":{"accuracy":400}},{"label":"Vision model","values":{"accuracy":0.96,"p95_ms":2100,"cost":0.03},"n":{"accuracy":200}},{"label":"Rules engine","values":{"accuracy":0.71,"p95_ms":120,"cost":0.001}}],"min_lead":0.1,"as_of":"2026-10-24T16:00:00Z","fresh_for":"6h","now":"2026-10-24T18:00:00Z"}},{"name":"recheck_value","title":"Recheck or act now","description":"From the scores, their standard errors and an optional drift per hour, works out the chance the current #1 is overtaken (by any challenger, treated as independent), whether refreshing the signals first is worth it (by your flip-risk limit, or by your cost of a recheck against your cost of a wrong pick), and how long until the lead is no longer safe. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["items"],"read_only":true,"example":{"items":[{"id":"layout","label":"Layout parser","score":0.81,"se":0.03,"drift_per_hour":0.01},{"id":"ocr","label":"OCR service","score":0.74,"se":0.03,"drift_per_hour":0.01},{"id":"vision","label":"Vision model","score":0.62,"se":0.04}],"as_of":"2026-10-24T16:00:00Z","now":"2026-10-24T18:00:00Z"}},{"name":"freshness","title":"How much each signal still counts","description":"For timed signals you send, works out each one's age and weight (exponential half-life, linear, a fixed window, or gravity for posts), which are stale, each item's decayed value, when each item goes stale and the earliest time to look again. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["signals"],"read_only":true,"example":{"signals":[{"item":"Outage report","value":5,"at":"2026-10-24T17:40:00Z"},{"item":"Outage report","value":4,"at":"2026-10-24T16:10:00Z"},{"item":"Release note","value":3,"at":"2026-10-24T09:00:00Z"}],"mode":"exponential","half_life":"2h","max_age":"12h","now":"2026-10-24T18:00:00Z"}},{"name":"rank_uncertainty","title":"How sure is the order","description":"Simulates the ranking many times, moving each value by its standard error (se, or sqrt(p(1-p)/n) for a ratio with a sample size), and reports for every item a 5th to 95th percentile score, the chance it is truly best, the chance it makes the top k, its expected rank and rank range, plus the chance the current #1 really beats #2. Seeded: the same input gives the same output. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["criteria","items"],"read_only":true,"example":{"criteria":[{"id":"accuracy","label":"Field accuracy on your invoices","weight":0.5,"better":"higher","unit":"ratio","must":{"op":">=","value":0.8}},{"id":"p95_ms","label":"p95 latency","weight":0.3,"better":"lower","unit":"ms"},{"id":"cost","label":"Cost per page","weight":0.2,"better":"lower","unit":"usd"}],"items":[{"label":"Layout parser","values":{"accuracy":0.94,"p95_ms":820,"cost":0.012},"n":{"accuracy":400}},{"label":"OCR service","values":{"accuracy":0.9,"p95_ms":540,"cost":0.008},"n":{"accuracy":400}},{"label":"Vision model","values":{"accuracy":0.96,"p95_ms":2100,"cost":0.03},"n":{"accuracy":200}},{"label":"Rules engine","values":{"accuracy":0.71,"p95_ms":120,"cost":0.001}}],"draws":500,"seed":1}},{"name":"merge_rankings","title":"Merge ranked lists","description":"Fuses 2 to 50 ranked lists you send (your own runs, other agents' RANK.md files, sources you chose) into one order by reciprocal rank fusion, Borda, Copeland, Schulze, Kemeny or median rank, with optional list weights, and reports how far each list agrees with the result (Kendall tau-b). Entries match by it_ id, else by normalized text. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["lists"],"read_only":true,"example":{"lists":[{"source":"keyword_search","items":["Invoice schema guide","Parser setup notes","Table extraction tips","Old export format"]},{"source":"vector_search","items":["Parser setup notes","Invoice schema guide","Field mapping how-to"]},{"source":"agent_b_rank_md","items":["Parser setup notes","Field mapping how-to","Invoice schema guide"]}],"method":"rrf"}},{"name":"compare_rankings","title":"Compare two rankings","description":"Measures how far two ranked lists agree: overlap and Jaccard, top-k overlap, Kendall tau-b, Spearman rho, Spearman footrule and rank-biased overlap (extrapolated, top-weighted by p), with a verdict and the most discordant pairs. Use it before trusting someone else's ranking or to see how much a ranking moved. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["a","b"],"read_only":true,"example":{"a":["Layout parser","OCR service","Vision model","Table extractor"],"b":["OCR service","Layout parser","Table extractor","Hybrid pipeline"]}},{"name":"rank_changes","title":"What changed in a ranking","description":"Compares a ranking with its previous snapshot and lists what changed as events with stable ids (entered, exited, moved, overtook, new leader, tied), plus how stable the order is (Kendall tau-b, top-k churn) and, from scored history, how fast each item's score moves per hour. Use it to tell a person or another agent what is new since they last looked. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["before","after","at"],"read_only":true,"example":{"before":[{"id":"ocr","label":"OCR service","rank":1,"score":0.78},{"id":"layout","label":"Layout parser","rank":2,"score":0.74},{"id":"vision","label":"Vision model","rank":3,"score":0.61},{"id":"rules","label":"Rules engine","rank":4,"score":0.4}],"after":[{"id":"layout","label":"Layout parser","rank":1,"score":0.81},{"id":"ocr","label":"OCR service","rank":2,"score":0.74},{"id":"hybrid","label":"Hybrid pipeline","rank":3,"score":0.66},{"id":"vision","label":"Vision model","rank":4,"score":0.62}],"at":"2026-10-24T18:00:00Z","top_k":3,"history":[{"as_of":"2026-10-24T12:00:00Z","ranks":{"ocr":1,"layout":2,"vision":3,"rules":4},"scores":{"ocr":0.78,"layout":0.74,"vision":0.61,"rules":0.4}}]}},{"name":"pairwise_ratings","title":"Ratings from head-to-head results","description":"Turns head-to-head results you recorded (A/B evals, side-by-side runs, judge comparisons) into ratings and a ranking by Bradley-Terry (with intervals), Elo, or a Wilson-bounded win rate, with the chance #1 beats each of the next three. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["matches"],"read_only":true,"example":{"matches":[{"a":"Prompt A","b":"Prompt B","winner":"a"},{"a":"Prompt A","b":"Prompt C","winner":"a"},{"a":"Prompt B","b":"Prompt C","winner":"tie"},{"a":"Prompt C","b":"Prompt A","winner":"a"},{"a":"Prompt B","b":"Prompt A","winner":"b"},{"a":"Prompt A","b":"Prompt B","winner":"a"}]}},{"name":"pick_next","title":"Try another option or use the best","description":"For a choice you make again and again (which tool, prompt, source or route to use on the next run), picks the option to try next from your own success counts or measured means, by Thompson sampling, UCB1, epsilon greedy or greedy, says whether that is exploring or using the best, and gives each option's chance of being best and a 5% to 95% range. Seeded, so the same input gives the same pick. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":["options"],"read_only":true,"example":{"options":[{"id":"route_a","label":"Route A","successes":42,"failures":8},{"id":"route_b","label":"Route B","successes":9,"failures":1},{"id":"route_c","label":"Route C","successes":0,"failures":0}],"policy":"thompson","seed":7}},{"name":"criteria_weights","title":"Weights from what matters","description":"Turns what the person says matters into criteria weights that sum to 1: from an order of importance (rank order centroid, rank sum or reciprocal), from points, or from pairwise judgments (AHP, with a consistency ratio and the judgment that fits least). Paste the weights into criteria for rank_items. It never fetches, stores, contacts, buys or endorses anything, and it does not act: it calculates from what you send.","required":[],"read_only":true,"example":{"order":["accuracy","p95_ms","cost"],"method":"roc"}},{"name":"build_rank_md","title":"Write a RANK.md file from your data","description":"Ranks your items with rank_items and writes the RANK.md file: frontmatter, criteria, ranked items with scores and moves, excluded items with the must each failed, sources, signals, history, change events and the snapshot id. Send the previous file as previous to carry its history forward and add the change events since (moves, entries, exits, overtakes, new leader). Values come only from items, signals or signals_csv in the request (signals_csv: header item,criterion,value,at,source,n,se, up to 20,000 rows). Deterministic: the same input writes the same file. It fetches nothing, stores nothing, contacts no one, buys nothing and endorses nothing.","required":[],"read_only":true,"example":{"title":"Document parsers for scanned invoices","subject":"tool","criteria":[{"id":"accuracy","label":"Field accuracy","weight":0.6,"better":"higher","unit":"ratio","normalize":"none","must":{"op":">=","value":0.8},"how":"Share of fields right on your own test invoices."},{"id":"latency_ms","label":"p95 latency","weight":0.4,"better":"lower","unit":"ms","normalize":"log","how":"95th percentile from your own run logs."}],"items":[{"label":"Layout parser","values":{"accuracy":0.94,"latency_ms":420}},{"label":"OCR service","values":{"accuracy":0.9,"latency_ms":180}},{"label":"Rules engine","values":{"accuracy":0.72,"latency_ms":40}}],"as_of":"2026-10-24T18:00:00Z","fresh_for":"24h"}},{"name":"check_rank_md","title":"Check a RANK.md file","description":"Checks a RANK.md file against the spec: frontmatter, enums, criteria, weights, durations, instants, item ids, value cells, musts, tie rules, table shapes and index entries (errors E01 to E20), protected-attribute criteria (R01, refused), and warnings for non-canonical ids, snapshot mismatches, stale rankings, missing values, unknown sections, missing sources, unknown signals, out-of-order history, moves, secrets and contact details (W01 to W17), each with a line number and a hint. For score methods it recomputes every rank and score with rank_items and lists any that differ. Send now to get the freshness verdict. Run it on anyone else's file before relying on it. It fetches nothing, stores nothing, contacts no one, buys nothing and endorses nothing.","required":["text"],"read_only":true,"example":{"text":"---\nrank: 1\ntitle: Example\nsubject: tool\n---\n\n# Example\n\n## Criteria\n\n| id | label | weight | better |\n|---|---|---|---|\n| accuracy | Accuracy | 1 | higher |\n\n## Items\n\n| rank | label | score | accuracy |\n|---|---|---|---|\n| 1 | Layout parser | 1 | 0.94 |\n| 2 | OCR service | 0 | 0.9 |\n","now":"2026-10-24T20:00:00Z"}},{"name":"parse_rank_md","title":"Convert RANK.md to JSON and back","description":"Converts a RANK.md file to its canonical JSON form (a Ranking or an index, as in /schema.json), or with to md and json in, writes the RANK.md text. Returns the snapshot id, errors and warnings. Lossless for everything in the JSON form. It fetches nothing, stores nothing, contacts no one, buys nothing and endorses nothing.","required":[],"read_only":true,"example":{"text":"---\nrank: 1\ntitle: Example\nsubject: tool\n---\n\n# Example\n\n## Criteria\n\n| id | label | weight | better |\n|---|---|---|---|\n| accuracy | Accuracy | 1 | higher |\n\n## Items\n\n| rank | label | score | accuracy |\n|---|---|---|---|\n| 1 | Layout parser | 1 | 0.94 |\n| 2 | OCR service | 0 | 0.9 |\n"}},{"name":"build_settings","title":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of RANK.md. Every setting is a number or a fixed choice; the catalog is at https://rank.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","required":[],"read_only":true,"example":{"preset":"tool_router"}},{"name":"whats_new","title":"What's new here, and what's next","description":"What changed on rank.md and when, what is planned, when to check back, and the other .md sites. Send since (a date) to get only newer entries, for example the updated date of the skill you have. Reads a list kept with the code; fetches nothing and stores nothing.","required":[],"read_only":true,"example":{"since":"2026-10-01"}}],"prompts":[{"name":"rank","title":"RANK.md","description":"The RANK.md skill. Send a preset or any setting to write your settings in. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree."}],"resources":[{"uri":"https://rank.md/rank.md","name":"RANK.md","title":"RANK.md skill"},{"uri":"https://rank.md/changelog.md","name":"changelog","title":"RANK.md changelog: what's new and what's next"},{"uri":"https://rank.md/api/v1/settings","name":"settings","title":"RANK.md settings catalog"}],"example_note":"The values in the examples are made up. Send your own.","page":"https://rank.md/mcp in a browser shows this list with examples you can run.","docs":"https://rank.md/#install","disclaimer":"Use at your own risk. rank.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Nothing here is financial, investment, legal, purchasing or other professional advice, and no ranking, score or board here is an endorsement, review, rating or verification of anyone or anything. rank.md never sells data, contacts anyone, buys anything or acts on a ranking itself, and fetches nothing today. Check everything yourself before you act on it.","terms":"https://rank.md/terms"}