Skip to content

occam_attest

Status: verified against src/FFOccamMcp.Core/Tools/OccamAttestTool.cs and Attest/AttestService.cs @ 2026-09-29
Profiles: auditor, full — not on reader, researcher, minimal, or basic
Contract depth: MCP API · runtime tools/list

Purpose

Batch citation check for report rows {claim, sourceUrl}. For each row: live extract, retrieve up to three BM25 blocks, fail-closed semantic classifier → status, attach Merkle proof for the top block when present. Proof = block membership only — never claim truth. Aggregate JSON is unsigned.

When to use / when not

Use when Do not use when
Stance per cited row in a report One claim retrieval only → occam_claim_check
Gate on status (not BM25 alone) Claims outside is-a / uses classifier shapes → often unknown
Batch counts (supported, contradicted, …) Profile is reader / researcher

Parameters

Name Required Default Meaning
claims yes — JSON array of {claim, sourceUrl} (1–50)
backend_policy no http_then_browser Applied to every claim
session_profile no null Applied to every cited page

Response shape

Success: counts (supported, contradicted, related, unsupported, unknown), grounded (= supported count), unsupportedTotal, perClaim[] with status, evidence fields, optional reason.

Gate on status. Per-row fetch failures become status=unknown without failing the whole call.

Failure (ok: false): invalid_arguments only (bad/empty/oversized claims, bad policy).

Semantic classifier

Parses only is-a (Subject is [a|an|the] object) and uses (uses|using|utilizes). Lexical co-occurrence alone never yields supported.

OCCAM_PROFILE must be auditor or full. Full catalog: configuration.

See also