Continuous 10-K diligence

Every material change between two filings.
Cited, not summarized.

Two sequential 10-Ks, aligned section by section. Every citation checked against the source text before it's shown to you.

claude mcp add --transport http materiality-engine https://hev6qqrvhg.execute-api.us-east-2.amazonaws.com/mcp
Exhibit loading a real finding from the live API...
 
How it works

Three passes over the same two documents.

Each stage hands the next only what it needs, not the whole filing.

§1

Align

text-embedding-3-small

Embeds every section from both filings and finds the optimal one-to-one match by cosine similarity (the Hungarian algorithm), so a risk-factor section never gets matched against the wrong year's section by accident.

§2

Classify

gpt-5.4-mini

Reads only the lines that actually changed between filings, a local diff, not the full document, and decides what changed, why it matters, and how material it is.

§3

Verify

gpt-5.4-mini, adversarial prompt

First, a free, deterministic check: is the cited quote a real, verbatim substring of the filing? Only quotes that pass reach a second, skeptical model whose only job is catching overclaiming.

A hallucinated quote never reaches a user. It fails the verbatim check before any second opinion is even asked for, and the failure itself is recorded, not hidden.
Live demo

Real findings, real filings

Every number below comes from the live API right now.

--
Companies covered
--
Findings extracted
--
Citation-verified
Loading tickers...
Connect via Claude

Point any MCP client at it

Same backend the demo above uses, exposed as three MCP tools over the Streamable HTTP transport.

claude mcp add --transport http materiality-engine https://hev6qqrvhg.execute-api.us-east-2.amazonaws.com/mcp
Example session (illustrative, not a live embed)
$ claude
> what changed in apple's most recent 10-k?
● get_materiality_report("AAPL")
16 findings. The highest-tier one is a new U.S. court order restricting App Store commissions. Every excerpt returned is a verbatim quote from the filing, checked before it's shown to you.
list_tickers()

Lists the curated tickers with cached materiality analysis available.

get_materiality_report(ticker)

Returns a ticker's two most recent 10-K filings plus every finding: category, materiality tier, reasoning, confidence, and source excerpts.

get_finding_citation(finding_id)

Returns a single finding's full detail (source citation, confidence, reasoning) by its id.

Under the hood

Built like it has to be trusted

Verified citations. Two-layer check: a free verbatim-substring test, then an independent, adversarial model audit before any claim is trusted. source →

Evaluated on every pull request. CI runs the real pipeline against a golden set of known filing pairs and fails the build if precision or recall drops below a floor, so a prompt or model change that quietly regresses accuracy can't ship. source →

Guardrails over confidence. A quote that fails verbatim verification is automatically downgraded to a low materiality tier rather than left at whatever score the model claimed, and a malformed model response degrades to zero findings for that pair instead of crashing the run. source →

Cost-optimized pipeline. Local line-diffing and content-hash caching cut redundant LLM spend before a single token is billed. source →

Structured observability. Every stage, every OpenAI call, every request logs structured JSON, queryable directly in CloudWatch Logs Insights. source →

CI security scanning. Dependency vulnerability scanning and committed-secret scanning run on every push and pull request. source →