{"serverId":"mcp-registry/com.aidemos/catalogue","tools":[{"name":"compare_tools","fixed":{"name":"compare_tools","description":"Evidence-aligned comparison of two tools, honesty enforced structurally: head_to_head (cells from the SAME test input — provable same-input comparison), related_not_same_input (same dimension, different runs — flagged), and each tool's unique evidence. Built from real observation cells with artifacts, not prose.","inputSchema":{"type":"object","required":["tool_a","tool_b"],"properties":{"tool_a":{"type":"string","description":"First tool slug, e.g. \"llamaparse\"."},"tool_b":{"type":"string","description":"Second tool slug, e.g. \"landing-ai\"."},"criterion":{"type":"string","description":"Optional: restrict to one criterion."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"get_evidence","fixed":{"name":"get_evidence","description":"Query the evidence graph: observation cells (tool × test-scenario × criterion) → verdict, score, the researcher's note, and the REAL artifacts (input/output screenshots) that prove it. The ground truth behind every ranking — filter any combination of tool(s), scenario (slug, group tag, or name), criterion, verdict, or evidence state. evidence_state: \"verified\" = artifact-backed, \"observed\" = noted without artifact, \"scored-only\" = number only.","inputSchema":{"type":"object","properties":{"tool":{"type":"string","description":"Tool slug or name, e.g. \"landing-ai\"."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max cells (default 50)."},"tools":{"type":"array","items":{"type":"string"},"description":"Several tools at once."},"ranking":{"type":"string","description":"Ranking page slug — scope cells to the evidence run that published ranking is bound to (exactly what the page renders)."},"verdict":{"enum":["worked","mixed","struggled","failed"],"type":"string"},"evidence":{"enum":["verified","observed","scored-only"],"type":"string"},"scenario":{"type":"string","description":"Scenario slug, cross-run group tag (e.g. \"scanned-research-paper\"), or name fragment."},"criterion":{"type":"string","description":"Criterion slug or name, e.g. \"table extraction\"."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":383,"tokensAfter":383},{"name":"get_persona","fixed":{"name":"get_persona","description":"Given a persona slug (from list_personas), return everything tagged with it: persona, use_cases[], rankings[], compares[], toolkits[], tools[]. Mirrors a persona landing page.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1,"description":"Persona slug, e.g. \"students\"."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":111,"tokensAfter":111},{"name":"get_ranking","fixed":{"name":"get_ranking","description":"Full ranking detail as a JSON+Markdown envelope: ranked tools (rank/badge/scores), criteria, winner, breakdown (JSON) + verdicts / final take (Markdown). Every ranked tool carries `proof`: real artifact URLs from the exact evidence run this page is bound to, each with the /evidence permalink for the finding it proves — verdict and proof arrive together, no second call needed to cite evidence. `proof.artifact_count` is the true total and `proof.all_findings` is the get_evidence call that returns ","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1,"description":"Ranking slug, e.g. \"resume-parsing-api\" (from list_rankings)."},"proof":{"enum":["sample","full","none"],"type":"string","description":"How many proof artifacts to inline. \"sample\" (default) = up to 6 per tool, spread across distinct criteria so you see breadth; \"full\" = every artifact; \"none\" = counts only, no URLs. Counts (artifact_count / finding_count) are the TRUE totals in every mode, so you can always tell what you did not receive."},"fields":{"type":"array","items":{"enum":["id","title","slug","url","abstract","read_time","tested_date","category","use_case","personas","tags","winner","methodology","tools","breakdown","final_take","evidence_run"],"type":"string"},"description":"Optional projection: return ONLY these top-level fields (identity id/name/title/slug/url is always included) to control response size. Available: id, title, slug, url, abstract, read_time, tested_date, category, use_case, personas, tags, winner, methodology, tools, breakdown, final_take, evidence_run."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":471,"tokensAfter":471},{"name":"get_tool","fixed":{"name":"get_tool","description":"Full tool detail as a JSON+Markdown envelope: identity, pricing, per-feature scores, fit, FAQ, relationships (JSON) + our_take / in-depth review (Markdown). Includes `proof`: real artifact URLs (input/output screenshots, recordings) from the runs that tested it, each with the /evidence permalink for the finding it proves — you can cite evidence from THIS call. null if unknown. Pass `fields` to project to only the keys you need (token-efficient).","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1,"description":"Tool seo_slug, e.g. \"affinda\" (from list_tools)."},"proof":{"enum":["sample","full","none"],"type":"string","description":"How many proof artifacts to inline. \"sample\" (default) = up to 6 per tool, spread across distinct criteria so you see breadth; \"full\" = every artifact; \"none\" = counts only, no URLs. Counts (artifact_count / finding_count) are the TRUE totals in every mode, so you can always tell what you did not receive."},"fields":{"type":"array","items":{"enum":["id","name","slug","url","heading","website","domain","category","sub_category","content_type","personas","tags","rating","testing_history","features","pricing","fit","use_case_track_record","related_pages","related_reads","similar_tools","faq","demo_video","our_take","in_depth_review_md","proof"],"type":"string"},"description":"Optional projection: return ONLY these top-level fields (identity id/name/title/slug/url is always included) to control response size. Available: id, name, slug, url, heading, website, domain, category, sub_category, content_type, personas, tags, rating, testing_history, features, pricing, fit, use_case_track_record, related_pages, related_reads, similar_tools, faq, demo_video, our_take, in_depth_review_md, proof."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":519,"tokensAfter":519},{"name":"get_use_case","fixed":{"name":"get_use_case","description":"Full use-case detail as a JSON+Markdown envelope: step guide, pros/cons, FAQ, tools used (JSON) + the full narrative guide (Markdown, full_md). null if unknown. Pass `fields` to project to only the keys you need (token-efficient).","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","minLength":1,"description":"Use-case slug (from list_use_cases)."},"fields":{"type":"array","items":{"enum":["id","title","slug","url","abstract","read_time","category","audience","personas","tags","tools_used","step_guide","what_to_expect","faq","full_md"],"type":"string"},"description":"Optional projection: return ONLY these top-level fields (identity id/name/title/slug/url is always included) to control response size. Available: id, title, slug, url, abstract, read_time, category, audience, personas, tags, tools_used, step_guide, what_to_expect, faq, full_md."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":268,"tokensAfter":268},{"name":"list_categories","fixed":{"name":"list_categories","description":"List the category vocabulary in use with per-type counts and a source flag (\"collection\"|\"derived\"), sorted by total.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"list_compares","fixed":{"name":"list_compares","description":"List published head-to-head comparison pages: id, title, slug, url, tool_a, tool_b, personas[], shared_use_cases[], updated_at.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max items to return. Omit for all."},"offset":{"type":"integer","minimum":0,"description":"Items to skip (paging)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"list_personas","fixed":{"name":"list_personas","description":"List personas with published-page counts per type {use_cases, rankings, tools, compares, toolkits}. The slugs are valid input for get_persona.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"list_rankings","fixed":{"name":"list_rankings","description":"List published ranking pages (\"best X\"): id, title, slug, url, use_case, persona, category, tools_count, winner, tested_as_of, updated_at.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max items to return. Omit for all."},"offset":{"type":"integer","minimum":0,"description":"Items to skip (paging)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"list_toolkits","fixed":{"name":"list_toolkits","description":"List published toolkit pages (curated bundles): id, title, slug, url, category.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max items to return. Omit for all."},"offset":{"type":"integer","minimum":0,"description":"Items to skip (paging)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":106,"tokensAfter":106},{"name":"list_tools","fixed":{"name":"list_tools","description":"List published AI tool pages: id, name, slug, url, domain, personas[], categories[].","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max items to return. Omit for all."},"offset":{"type":"integer","minimum":0,"description":"Items to skip (paging)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"list_use_cases","fixed":{"name":"list_use_cases","description":"List published use-case pages (how-to guides): id, title, slug, url, persona, category, updated_at.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max items to return. Omit for all."},"offset":{"type":"integer","minimum":0,"description":"Items to skip (paging)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"search","fixed":{"name":"search","description":"Search the published catalogue across use cases, rankings, tools, comparisons, and toolkits. Returns ranked light refs [{ kind, id, title, slug, url, snippet, score, meta }] — then call get_tool / get_ranking / get_use_case for full detail. `mode`: keyword (substring), semantic (meaning, via embeddings — finds pages by what they cover), or hybrid (default, fuses both). Optional filters: type[], persona, category.","inputSchema":{"type":"object","required":["query"],"properties":{"mode":{"enum":["keyword","semantic","hybrid"],"type":"string","description":"Search mode."},"type":{"type":"array","items":{"enum":["use_case","ranking","tool","compare","toolkit"],"type":"string"},"description":"Restrict to these kinds (default: all)."},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max results (default 20)."},"query":{"type":"string","minLength":1,"description":"Free-text search query."},"persona":{"type":"string","description":"Restrict to items tagged with this persona slug."},"category":{"type":"string","description":"Restrict to this category (case-insensitive)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":323,"tokensAfter":323}],"toolsChanged":14,"tokensSaved":0,"todo":[{"tool":"get_evidence","params":["verdict","evidence"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}