Search evidence-backed AI-tool reviews, rankings, use cases, comparisons & toolkits (read-only).
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
ANSWER a buyer question in ONE call: which tool is best at a specific capability, with proof. Returns the resolved verdict our testing team's evidence supports — a named winner FOR THE ASKED CRITERION, every tested tool ranked with a comparable score /5, the CONDITIONS each result holds under (e.g. 'clean tables yes; nested headers no'), dissenting observations preserved as openable links, the tie-break reason, and artifact proof URLs. Answers are materialized from the evidence substrate — the same question returns the same answer. Honestly refuses (coverage: not_tested) when we never tested the topic. Start HERE for any 'which tool is best at X' / 'A or B for X' question; use get_evidence for the raw cells behind it.
Ranking slug (skips routing).
The buyer question in natural language, e.g. 'Which document extraction tool best preserves table structure from scanned PDFs?'. Alternative: pass ranking + criterion explicitly.
Optional scenario/condition of interest.
Criterion slug or exact name (with `ranking`).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
ANSWER a buyer question in ONE call: which tool is best at a specific capability, with proof. Returns the resolved verdict our testing team's evidence supports — a named winner FOR THE ASKED CRITERION, every tested tool ranked with a comparable score /5, the CONDITIONS each result holds under (e.g. 'clean tables yes; nested headers no'), dissenting observations preserved as openable links, the tie-break reason, and artifact proof URLs. Answers are materialized from the evidence substrate — the same question returns the same answer. Honestly refuses (coverage: not_tested) when we never tested the topic. Start HERE for any 'which tool is best at X' / 'A or B for X' question; use get_evidence for the raw cells behind it.
| Argument | Type | Description |
|---|---|---|
| ranking | string | Ranking slug (skips routing). |
| question | string | The buyer question in natural language, e.g. 'Which document extraction tool best preserves table structure from scanned PDFs?'. Alternative: pass ranking + criterion explicitly. |
| scenario | string | Optional scenario/condition of interest. |
| criterion | string | Criterion slug or exact name (with `ranking`). |
{
"type": "object",
"properties": {
"ranking": {
"type": "string",
"description": "Ranking slug (skips routing)."
},
"question": {
"type": "string",
"description": "The buyer question in natural language, e.g. 'Which document extraction tool best preserves table structure from scanned PDFs?'. Alternative: pass ranking + criterion explicitly."
},
"scenario": {
"type": "string",
"description": "Optional scenario/condition of interest."
},
"criterion": {
"type": "string",
"description": "Criterion slug or exact name (with `ranking`)."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| tool_a* | string | First tool slug, e.g. "llamaparse". |
| tool_b* | string | Second tool slug, e.g. "landing-ai". |
| criterion | string | Optional: restrict to one criterion. |
{
"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
}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.
| Argument | Type | Description |
|---|---|---|
| tool | string | Tool slug or name, e.g. "landing-ai". |
| limit | integer | Max cells (default 50). |
| tools | array | Several tools at once. |
| ranking | string | Ranking page slug — scope cells to the evidence run that published ranking is bound to (exactly what the page renders). |
| verdict | string | |
| evidence | string | |
| scenario | string | Scenario slug, cross-run group tag (e.g. "scanned-research-paper"), or name fragment. |
| criterion | string | Criterion slug or name, e.g. "table extraction". |
Given a persona slug (from list_personas), return everything tagged with it: persona, use_cases[], rankings[], compares[], toolkits[], tools[]. Mirrors a persona landing page.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Persona slug, e.g. "students". |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Persona slug, e.g. \"students\"."
}
},
"additionalProperties": false
}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 all of it. null if unknown. Pass `fields` to project to only the keys you need (token-efficient).
| Argument | Type | Description |
|---|---|---|
| slug* | string | Ranking slug, e.g. "resume-parsing-api" (from list_rankings). |
| proof | string | 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 | array | 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. |
{
"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
}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).
| Argument | Type | Description |
|---|---|---|
| slug* | string | Tool seo_slug, e.g. "affinda" (from list_tools). |
| proof | string | 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 | array | 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. |
{
"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
}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).
| Argument | Type | Description |
|---|---|---|
| slug* | string | Use-case slug (from list_use_cases). |
| fields | array | 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. |
{
"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
}List the category vocabulary in use with per-type counts and a source flag ("collection"|"derived"), sorted by total.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}List published head-to-head comparison pages: id, title, slug, url, tool_a, tool_b, personas[], shared_use_cases[], updated_at.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return. Omit for all. |
| offset | integer | Items to skip (paging). |
{
"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
}List personas with published-page counts per type {use_cases, rankings, tools, compares, toolkits}. The slugs are valid input for get_persona.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}List published ranking pages ("best X"): id, title, slug, url, use_case, persona, category, tools_count, winner, tested_as_of, updated_at.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return. Omit for all. |
| offset | integer | Items to skip (paging). |
{
"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
}List published toolkit pages (curated bundles): id, title, slug, url, category.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return. Omit for all. |
| offset | integer | Items to skip (paging). |
{
"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
}List published AI tool pages: id, name, slug, url, domain, personas[], categories[].
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return. Omit for all. |
| offset | integer | Items to skip (paging). |
{
"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
}List published use-case pages (how-to guides): id, title, slug, url, persona, category, updated_at.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return. Omit for all. |
| offset | integer | Items to skip (paging). |
{
"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
}Given a tool id, return the tool {id,name,slug} and every ranking it appears in [{id,title,slug,url,use_case,rank,badge}].
| Argument | Type | Description |
|---|---|---|
| tool_id* | string | integer | Tool id (from list_tools). |
{
"type": "object",
"required": [
"tool_id"
],
"properties": {
"tool_id": {
"type": [
"string",
"integer"
],
"description": "Tool id (from list_tools)."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| mode | string | Search mode. |
| type | array | Restrict to these kinds (default: all). |
| limit | integer | Max results (default 20). |
| query* | string | Free-text search query. |
| persona | string | Restrict to items tagged with this persona slug. |
| category | string | Restrict to this category (case-insensitive). |
{
"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
}Given a ranking id, return the ranking {id,title,slug} and its ranked tools [{id,name,slug,url,rank,badge}] (badge: Best/Usable/Needs work/Unstable/Failed).
| Argument | Type | Description |
|---|---|---|
| ranking_id* | string | integer | Ranking id (from list_rankings). |
{
"type": "object",
"required": [
"ranking_id"
],
"properties": {
"ranking_id": {
"type": [
"string",
"integer"
],
"description": "Ranking id (from list_rankings)."
}
},
"additionalProperties": false
}{
"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
}