{
  "schema_version": "anchorfact.capabilities.v1",
  "generated": "2026-06-03T02:21:45.252Z",
  "provenance_url": "https://anchorfact.org/provenance.json",
  "name": "AnchorFact AI capability router",
  "purpose": "Help AI agents choose the smallest trustworthy AnchorFact endpoint or static artifact for a citation, retrieval, verification, or MCP task.",
  "current_snapshot": {
    "public_articles": 1210,
    "draft_articles": 300,
    "public_claims": 3790,
    "topics": 11,
    "examples": 7,
    "evals": 53,
    "mcp_tools": 9
  },
  "default_sequence": [
    "verify_official_build",
    "plan_query",
    "assemble_prompt_context",
    "cite_atomic_claim"
  ],
  "selection_rules": [
    {
      "when": "You need to decide whether AnchorFact coverage is plausible before retrieving evidence.",
      "use_capability": "plan_query"
    },
    {
      "when": "You have a natural-language factual question.",
      "use_capability": "answer_with_evidence"
    },
    {
      "when": "You need one prompt-ready context pack before drafting an answer.",
      "use_capability": "assemble_prompt_context"
    },
    {
      "when": "You need corpus health, public source coverage, or draft repair queue state.",
      "use_capability": "inspect_corpus_health"
    },
    {
      "when": "You only need to shortlist public records.",
      "use_capability": "search_public_records"
    },
    {
      "when": "You have one known AnchorFact or source reference.",
      "use_capability": "resolve_single_reference"
    },
    {
      "when": "You have multiple mixed references.",
      "use_capability": "resolve_many_references"
    },
    {
      "when": "You are ready to cite a specific claim.",
      "use_capability": "cite_atomic_claim"
    },
    {
      "when": "You need to verify production authenticity.",
      "use_capability": "verify_official_build"
    },
    {
      "when": "Your host supports MCP tools.",
      "use_capability": "connect_local_mcp"
    }
  ],
  "capability_count": 11,
  "capabilities": [
    {
      "id": "plan_query",
      "intent": "Decide whether AnchorFact has plausible public coverage for a natural-language question and choose the next endpoint.",
      "use_when": [
        "The agent is not sure whether AnchorFact should be used for the question.",
        "The agent needs a machine-readable plan before fetching evidence or falling back to external sources."
      ],
      "input_patterns": [
        "natural_language_query"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/plan?q={query}&limit=3",
        "url": "https://anchorfact.org/api/plan?q={query}&limit=3"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_plan_query",
          "arguments": {
            "query": "{query}",
            "limit": 3
          },
          "purpose": "Plan whether local AnchorFact coverage is plausible before fetching evidence."
        }
      ],
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/evidence?q={query}&limit=3",
          "url": "https://anchorfact.org/api/evidence?q={query}&limit=3"
        },
        {
          "method": "GET",
          "path": "/api/search?q={query}&limit=5",
          "url": "https://anchorfact.org/api/search?q={query}&limit=5"
        }
      ],
      "fallback_artifacts": [
        "/coverage.json",
        "/content-health.json",
        "/capabilities.json",
        "/search-index.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "When coverage_status is unsupported, use external primary sources instead of citing AnchorFact."
      ]
    },
    {
      "id": "answer_with_evidence",
      "intent": "Answer a natural-language question with public, source-grounded AnchorFact evidence packs.",
      "use_when": [
        "The user asks a factual question and needs cited evidence.",
        "The agent needs search hits, article summaries, claims, sources, and citation exports in one call."
      ],
      "input_patterns": [
        "natural_language_query"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/evidence?q={query}&limit=3",
        "url": "https://anchorfact.org/api/evidence?q={query}&limit=3"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_search",
          "arguments": {
            "query": "{query}",
            "confidence_min": "low",
            "limit": 3
          },
          "purpose": "Search local public records for candidate articles."
        },
        {
          "tool": "anchorfact_get_article",
          "arguments": {
            "article_id": "{canonical_slug}"
          },
          "purpose": "Retrieve the selected local article with sources."
        },
        {
          "tool": "anchorfact_cite_claim",
          "arguments": {
            "claim_id": "{claim_id}"
          },
          "purpose": "Export citation-ready text for a selected local claim."
        }
      ],
      "output_formats": [
        "application/json",
        "text/markdown"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/cite?id={claim_id}",
          "url": "https://anchorfact.org/api/cite?id={claim_id}"
        },
        {
          "method": "GET",
          "path": "/api/article?slug={canonical_slug}",
          "url": "https://anchorfact.org/api/article?slug={canonical_slug}"
        }
      ],
      "fallback_artifacts": [
        "/search-index.json",
        "/claims.json",
        "/sources.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Do not cite a pack unless the selected claim is public and source-mapped."
      ]
    },
    {
      "id": "assemble_prompt_context",
      "intent": "Fetch one AI prompt context pack with answer policy, citation-ready claims, coverage status, content health, fallback guidance, evidence packs, and citation guardrails.",
      "use_when": [
        "The agent wants one call before drafting an answer.",
        "The agent needs both supported/unsupported guidance and source-mapped evidence in the same payload.",
        "The agent needs an explicit can_answer_with_anchorfact decision before composing a cited answer."
      ],
      "input_patterns": [
        "natural_language_query"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/context?q={query}&limit=3",
        "url": "https://anchorfact.org/api/context?q={query}&limit=3"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_context",
          "arguments": {
            "query": "{query}",
            "limit": 3,
            "format": "json"
          },
          "purpose": "Assemble local planning guidance and public evidence packs in one MCP call."
        }
      ],
      "output_formats": [
        "application/json",
        "text/markdown"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/cite?id={claim_id}",
          "url": "https://anchorfact.org/api/cite?id={claim_id}"
        },
        {
          "method": "GET",
          "path": "/api/resolve?ref={reference}",
          "url": "https://anchorfact.org/api/resolve?ref={reference}"
        }
      ],
      "fallback_artifacts": [
        "/search-index.json",
        "/claims.json",
        "/sources.json",
        "/coverage.json",
        "/content-health.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Do not draft a cited answer from the context payload unless answer_policy.can_answer_with_anchorfact is true.",
        "Prefer citation_ready_claims for compact final-answer citations, then dereference selected claims with /api/cite when needed.",
        "When coverage_status is unsupported, use external primary sources instead of citing AnchorFact."
      ]
    },
    {
      "id": "inspect_corpus_health",
      "intent": "Inspect signed corpus health, public source coverage, trust boundaries, and the draft repair queue.",
      "use_when": [
        "The agent needs the draft repair queue before planning content repair.",
        "The agent is checking public source coverage or content health before deciding whether to trust local artifacts."
      ],
      "input_patterns": [
        "content_health",
        "draft_repair_queue",
        "source_coverage"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/content-health.json",
        "url": "https://anchorfact.org/content-health.json"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_content_health",
          "arguments": {
            "format": "json"
          },
          "purpose": "Inspect local corpus health and the next draft repair batch."
        }
      ],
      "output_formats": [
        "application/json",
        "text/markdown"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/provenance.json",
          "url": "https://anchorfact.org/provenance.json"
        },
        {
          "method": "GET",
          "path": "/evals.json",
          "url": "https://anchorfact.org/evals.json"
        }
      ],
      "fallback_artifacts": [
        "/content-health.json",
        "/manifest.json",
        "/coverage.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Use draft repair queue entries only for maintenance planning; draft entries remain excluded from public AI answer entrypoints."
      ]
    },
    {
      "id": "search_public_records",
      "intent": "Find candidate public AnchorFact records before fetching a full article or claim.",
      "use_when": [
        "The agent only needs lightweight ranking metadata.",
        "The agent is narrowing a broad query before fetching larger payloads."
      ],
      "input_patterns": [
        "natural_language_query",
        "topic_keyword"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/search?q={query}&limit=5",
        "url": "https://anchorfact.org/api/search?q={query}&limit=5"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_search",
          "arguments": {
            "query": "{query}",
            "confidence_min": "medium",
            "limit": 5
          },
          "purpose": "Search the local public article index."
        }
      ],
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/article?slug={canonical_slug}",
          "url": "https://anchorfact.org/api/article?slug={canonical_slug}"
        },
        {
          "method": "GET",
          "path": "/api/evidence?q={query}&limit=3",
          "url": "https://anchorfact.org/api/evidence?q={query}&limit=3"
        }
      ],
      "fallback_artifacts": [
        "/search-index.json",
        "/topics.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted."
      ]
    },
    {
      "id": "resolve_single_reference",
      "intent": "Turn one claim id, article slug or URL, source id, or source URL into the matching public payload.",
      "use_when": [
        "The agent already has an AnchorFact reference.",
        "The agent extracted a source URL or claim shorthand from previous context."
      ],
      "input_patterns": [
        "claim_id",
        "claim_url",
        "article_slug",
        "anchorfact_url",
        "source_id",
        "source_url"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/resolve?ref={reference}",
        "url": "https://anchorfact.org/api/resolve?ref={reference}"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_resolve_reference",
          "arguments": {
            "reference": "{reference}"
          },
          "purpose": "Resolve one local public claim, article, source, or URL reference."
        }
      ],
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/cite?id={claim_id}",
          "url": "https://anchorfact.org/api/cite?id={claim_id}"
        }
      ],
      "fallback_artifacts": [
        "/manifest.json",
        "/claims.json",
        "/sources.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted."
      ]
    },
    {
      "id": "resolve_many_references",
      "intent": "Resolve several mixed references in one round trip while preserving per-item errors.",
      "use_when": [
        "The agent has multiple AnchorFact or source references.",
        "The agent needs to classify references before deciding which citation or article endpoint to call."
      ],
      "input_patterns": [
        "claim_id",
        "article_slug",
        "anchorfact_url",
        "source_id",
        "source_url"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/resolve-batch?ref={reference}&ref={reference}",
        "url": "https://anchorfact.org/api/resolve-batch?ref={reference}&ref={reference}"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_resolve_references",
          "arguments": {
            "references": [
              "{reference}"
            ],
            "format": "json"
          },
          "purpose": "Resolve several local public references while preserving item-level errors."
        }
      ],
      "output_formats": [
        "application/json",
        "text/markdown"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/cite?id={claim_id}",
          "url": "https://anchorfact.org/api/cite?id={claim_id}"
        },
        {
          "method": "GET",
          "path": "/api/source?url={source_url}",
          "url": "https://anchorfact.org/api/source?url={source_url}"
        }
      ],
      "fallback_artifacts": [
        "/manifest.json",
        "/claims.json",
        "/sources.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Inspect each result status because a batch can partially succeed."
      ]
    },
    {
      "id": "cite_atomic_claim",
      "intent": "Return one citation-ready public atomic claim with article and source context.",
      "use_when": [
        "The agent has selected the exact claim to cite.",
        "The final answer needs a compact citation payload or Markdown citation text."
      ],
      "input_patterns": [
        "claim_id",
        "claim_url"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/cite?id={claim_id}",
        "url": "https://anchorfact.org/api/cite?id={claim_id}"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_cite_claim",
          "arguments": {
            "claim_id": "{claim_id}",
            "format": "json"
          },
          "purpose": "Export citation-ready local JSON or Markdown for one claim."
        }
      ],
      "output_formats": [
        "application/json",
        "text/markdown"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/claim?id={claim_id}",
          "url": "https://anchorfact.org/api/claim?id={claim_id}"
        }
      ],
      "fallback_artifacts": [
        "/claims.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Include source URL or DOI, confidence, and provenance commit when presenting the citation."
      ]
    },
    {
      "id": "inspect_source_reuse",
      "intent": "Inspect a public source and find mapped public claims and articles that reuse it.",
      "use_when": [
        "The agent needs to audit whether a source supports multiple public claims.",
        "The agent has an original source URL and wants AnchorFact coverage around it."
      ],
      "input_patterns": [
        "source_id",
        "source_url"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/api/source?url={source_url}",
        "url": "https://anchorfact.org/api/source?url={source_url}"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_resolve_reference",
          "arguments": {
            "reference": "{source_url}"
          },
          "purpose": "Resolve a local source reference and inspect mapped public claims."
        }
      ],
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/api/resolve?ref={source_url}",
          "url": "https://anchorfact.org/api/resolve?ref={source_url}"
        },
        {
          "method": "GET",
          "path": "/api/cite?id={claim_id}",
          "url": "https://anchorfact.org/api/cite?id={claim_id}"
        }
      ],
      "fallback_artifacts": [
        "/sources.json",
        "/graph.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted."
      ]
    },
    {
      "id": "verify_official_build",
      "intent": "Confirm the current production build is the official signed AnchorFact artifact set.",
      "use_when": [
        "The agent needs to decide whether to trust current static artifacts.",
        "The agent is comparing production with a fork, mirror, cache, or local clone."
      ],
      "input_patterns": [
        "base_url",
        "provenance_url"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/provenance.json",
        "url": "https://anchorfact.org/provenance.json"
      },
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/provenance.sig",
          "url": "https://anchorfact.org/provenance.sig"
        },
        {
          "method": "GET",
          "path": "/evals.json",
          "url": "https://anchorfact.org/evals.json"
        }
      ],
      "fallback_artifacts": [
        "/agent.json",
        "/openapi.json"
      ],
      "trust_requirements": [
        "Verify /provenance.sig against /provenance.json with the pinned public key.",
        "Require official_build=true, canonical_site=https://anchorfact.org, branch=main, and a GitHub commit that exists in the official repository."
      ]
    },
    {
      "id": "connect_local_mcp",
      "intent": "Install or inspect the local MCP wrapper for MCP-capable AI hosts.",
      "use_when": [
        "The agent host can use Model Context Protocol tools.",
        "The user wants local search, article retrieval, reference resolution, and citation tools."
      ],
      "input_patterns": [
        "mcp_host",
        "local_repository"
      ],
      "primary_call": {
        "method": "GET",
        "path": "/mcp.json",
        "url": "https://anchorfact.org/mcp.json"
      },
      "local_mcp_tools": [
        {
          "tool": "anchorfact_plan_query",
          "arguments": {
            "query": "{query}",
            "limit": 3
          },
          "purpose": "Plan local coverage."
        },
        {
          "tool": "anchorfact_content_health",
          "arguments": {
            "format": "json"
          },
          "purpose": "Inspect local corpus health and draft repair queue."
        },
        {
          "tool": "anchorfact_context",
          "arguments": {
            "query": "{query}",
            "limit": 3,
            "format": "json"
          },
          "purpose": "Assemble local answer context."
        },
        {
          "tool": "anchorfact_search",
          "arguments": {
            "query": "{query}",
            "confidence_min": "medium",
            "limit": 5
          },
          "purpose": "Search local public records."
        },
        {
          "tool": "anchorfact_get_article",
          "arguments": {
            "article_id": "{canonical_slug}"
          },
          "purpose": "Retrieve one local article."
        },
        {
          "tool": "anchorfact_resolve_reference",
          "arguments": {
            "reference": "{reference}"
          },
          "purpose": "Resolve one local reference."
        },
        {
          "tool": "anchorfact_resolve_references",
          "arguments": {
            "references": [
              "{reference}"
            ],
            "format": "json"
          },
          "purpose": "Resolve several local references."
        },
        {
          "tool": "anchorfact_cite_claim",
          "arguments": {
            "claim_id": "{claim_id}",
            "format": "json"
          },
          "purpose": "Export citation-ready local claim text."
        },
        {
          "tool": "anchorfact_list_categories",
          "arguments": {},
          "purpose": "List local public categories."
        }
      ],
      "output_formats": [
        "application/json"
      ],
      "follow_up_calls": [
        {
          "method": "GET",
          "path": "/examples.json",
          "url": "https://anchorfact.org/examples.json"
        },
        {
          "method": "GET",
          "path": "/evals.json",
          "url": "https://anchorfact.org/evals.json"
        }
      ],
      "fallback_artifacts": [
        "/agent.json",
        "/openapi.json"
      ],
      "trust_requirements": [
        "Use only public AnchorFact records returned by the endpoint.",
        "Verify /provenance.json and /provenance.sig with the pinned public key before treating artifact hashes as trusted.",
        "Run npm run build before starting the local stdio server so MCP reads the current dist artifacts."
      ]
    }
  ]
}