Server definition
- Hash
- sha256:f07519e718bd06580c839de821d8c923d00cc80a777f6c20481c4e1b1b8396ff
- What it is
- What a remote MCP server returned when asked what it offers: 17 tools
The blob, as servednamed by its sha256
{
"instructions": "Evidence-backed answers about AI tools, from hands-on testing (published data only). START WITH `answer` for any 'which tool is best at X' question — it returns the resolved verdict in one call: winner for the asked criterion, ranked scores, the conditions each result holds under, dissent preserved, openable proof; it refuses honestly when we never tested the topic. Then: list_* to enumerate use cases, rankings, tools, comparisons, toolkits, personas, and categories; tools_in_ranking / rankings_for_tool to traverse; get_persona for everything tagged to a persona; get_tool / get_ranking / get_use_case for the full page as a JSON-structure + Markdown-content envelope; get_evidence for the raw observation cells behind any answer. Every entity has id, slug, and a full url.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"criterion": {
"description": "Criterion slug or exact name (with `ranking`).",
"type": "string"
},
"question": {
"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.",
"type": "string"
},
"ranking": {
"description": "Ranking slug (skips routing).",
"type": "string"
},
"scenario": {
"description": "Optional scenario/condition of interest.",
"type": "string"
}
},
"type": "object"
},
"name": "answer",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"criterion": {
"description": "Optional: restrict to one criterion.",
"type": "string"
},
"tool_a": {
"description": "First tool slug, e.g. \"llamaparse\".",
"type": "string"
},
"tool_b": {
"description": "Second tool slug, e.g. \"landing-ai\".",
"type": "string"
}
},
"required": [
"tool_a",
"tool_b"
],
"type": "object"
},
"name": "compare_tools",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"criterion": {
"description": "Criterion slug or name, e.g. \"table extraction\".",
"type": "string"
},
"evidence": {
"enum": [
"verified",
"observed",
"scored-only"
],
"type": "string"
},
"limit": {
"description": "Max cells (default 50).",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"ranking": {
"description": "Ranking page slug — scope cells to the evidence run that published ranking is bound to (exactly what the page renders).",
"type": "string"
},
"scenario": {
"description": "Scenario slug, cross-run group tag (e.g. \"scanned-research-paper\"), or name fragment.",
"type": "string"
},
"tool": {
"description": "Tool slug or name, e.g. \"landing-ai\".",
"type": "string"
},
"tools": {
"description": "Several tools at once.",
"items": {
"type": "string"
},
"type": "array"
},
"verdict": {
"enum": [
"worked",
"mixed",
"struggled",
"failed"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_evidence",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Persona slug, e.g. \"students\".",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_persona",
"outputSchema": null
},
{
"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 all of it. null if unknown. Pass `fields` to project to only the keys you need (token-efficient).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"fields": {
"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.",
"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"
},
"type": "array"
},
"proof": {
"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.",
"enum": [
"sample",
"full",
"none"
],
"type": "string"
},
"slug": {
"description": "Ranking slug, e.g. \"resume-parsing-api\" (from list_rankings).",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_ranking",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"fields": {
"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.",
"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"
},
"type": "array"
},
"proof": {
"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.",
"enum": [
"sample",
"full",
"none"
],
"type": "string"
},
"slug": {
"description": "Tool seo_slug, e.g. \"affinda\" (from list_tools).",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_tool",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"fields": {
"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.",
"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"
},
"type": "array"
},
"slug": {
"description": "Use-case slug (from list_use_cases).",
"minLength": 1,
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_use_case",
"outputSchema": null
},
{
"description": "List the category vocabulary in use with per-type counts and a source flag (\"collection\"|\"derived\"), sorted by total.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_categories",
"outputSchema": null
},
{
"description": "List published head-to-head comparison pages: id, title, slug, url, tool_a, tool_b, personas[], shared_use_cases[], updated_at.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max items to return. Omit for all.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Items to skip (paging).",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_compares",
"outputSchema": null
},
{
"description": "List personas with published-page counts per type {use_cases, rankings, tools, compares, toolkits}. The slugs are valid input for get_persona.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_personas",
"outputSchema": null
},
{
"description": "List published ranking pages (\"best X\"): id, title, slug, url, use_case, persona, category, tools_count, winner, tested_as_of, updated_at.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max items to return. Omit for all.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Items to skip (paging).",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_rankings",
"outputSchema": null
},
{
"description": "List published toolkit pages (curated bundles): id, title, slug, url, category.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max items to return. Omit for all.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Items to skip (paging).",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_toolkits",
"outputSchema": null
},
{
"description": "List published AI tool pages: id, name, slug, url, domain, personas[], categories[].",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max items to return. Omit for all.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Items to skip (paging).",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_tools",
"outputSchema": null
},
{
"description": "List published use-case pages (how-to guides): id, title, slug, url, persona, category, updated_at.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max items to return. Omit for all.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Items to skip (paging).",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_use_cases",
"outputSchema": null
},
{
"description": "Given a tool id, return the tool {id,name,slug} and every ranking it appears in [{id,title,slug,url,use_case,rank,badge}].",
"inputSchema": {
"additionalProperties": false,
"properties": {
"tool_id": {
"description": "Tool id (from list_tools).",
"type": [
"string",
"integer"
]
}
},
"required": [
"tool_id"
],
"type": "object"
},
"name": "rankings_for_tool",
"outputSchema": null
},
{
"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": {
"additionalProperties": false,
"properties": {
"category": {
"description": "Restrict to this category (case-insensitive).",
"type": "string"
},
"limit": {
"description": "Max results (default 20).",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"mode": {
"description": "Search mode.",
"enum": [
"keyword",
"semantic",
"hybrid"
],
"type": "string"
},
"persona": {
"description": "Restrict to items tagged with this persona slug.",
"type": "string"
},
"query": {
"description": "Free-text search query.",
"minLength": 1,
"type": "string"
},
"type": {
"description": "Restrict to these kinds (default: all).",
"items": {
"enum": [
"use_case",
"ranking",
"tool",
"compare",
"toolkit"
],
"type": "string"
},
"type": "array"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"ranking_id": {
"description": "Ranking id (from list_rankings).",
"type": [
"string",
"integer"
]
}
},
"required": [
"ranking_id"
],
"type": "object"
},
"name": "tools_in_ranking",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f07519e718bd06580c839de821d8c923d00cc80a777f6c20481c4e1b1b8396ff | sha256sum