KnownGate answers one question: does this food conflict with this premise?

A premise has two parts and you may send either, or both, in the same call.

restrictions

What must not be present. The FDA-9 keys, plus any other name you send. In-group specifics are recorded, never silently widened.

"restrictions": [
  "peanut",
  "sesame"
]
thresholds

What must stay under, or over, a number. Stated per serving, with the unit and the basis explicit.

"thresholds": [
  { "nutrient": "added_sugar",
    "max": 2, "unit": "g",
    "basis": "per_serving" }
]

Three ways in. None of them is the preferred one.

Pick by where your agent already lives. The engine, the verdicts and the evidence rules are identical across all three.

WebMCP

If you are rendering this page, the tools are already in your model context. Nothing to install and no key.

get_premise
set_restrictions
load_subject
check_item
check_venue
check_plan
get_result
answer_question
save_record

Use when: a person is watching, and you want them to see the premise before the answer.

MCP

A hosted server. Five lines of config and your agent never opens a browser.

mcp.knowngate.com

check_item
check_venue
check_plan
register

A free key is required; your agent creates one with the register tool, without leaving MCP.

Use when: your agent runs tool-only, in Claude Desktop, Cursor or any MCP client.

REST

Two check endpoints and the public stats feed.

POST /v0/check_item
POST /v0/check_venue
POST /v0/check_plan
GET /v0/stats
POST /v0/keys

Use when: you are not on MCP, or you are calling from a server you control.

One worked call.

A real product against a real premise. One conflict and one refusal come back in the same response, each with the source it rests on and the date that source was read.

REQUEST[LIVE]
POST /v0/check_item
Authorization: Bearer kg_live_••••

{
  "subject": { "upc": "0 51500 25551 8" },
  "restrictions": [],
  "thresholds": [
    { "nutrient": "added_sugar", "max": 2,
      "unit": "g", "basis": "per_serving" },
    { "nutrient": "trans_fat", "max": 0,
      "unit": "g", "basis": "per_serving" }
  ]
}
RESPONSE[LIVE]
{
  "subject": "Jif Creamy Peanut Butter",
  "verdict": "conflict_found",
  "threshold_hits": [
    { "nutrient": "added_sugar", "found": 3,
      "max": 2, "unit": "g",
      "basis": "per_serving",
      "verdict": "conflict_found" },
    { "nutrient": "trans_fat", "found": null,
      "max": 0, "unit": "g",
      "verdict": "couldnt_verify",
      "reason": "panel_declares_zero_under_rounding" }
  ],
  "source": { "kind": "nutrition_panel",
    "read_at": "2026-08-14" },
  "summary_line": "1 ruled · 0 no conflict · 1 conflict",
  "must_not_omit": [ "trans_fat, couldn’t verify" ]
}
  • MUST NOT OMIT: trans_fat, couldn't verify
Read the trans-fat line carefully, because it is the whole product.

The panel declares zero. US rounding rules permit anything below half a gram per serving to be declared as zero, so a panel reading zero does not establish that the value is zero. The gate will not clear a threshold of zero against a figure that cannot distinguish zero from almost zero. It says couldn't verify and tells you why.

How to read a verdict.

Four values, and only four. They are never free text, and two of them are not answers.

no_conflict_foundEverything the premise asked about was covered by a source at ceiling, and nothing conflicted.
conflict_foundA restriction is present, or a threshold is exceeded. Named, sourced and dated.
ask_one_questionOne thing is missing and can be closed. The question and its sufficient-answer rule are in the response.
couldnt_verifyThe gap cannot be closed by any question that exists. This is a finding. Give it somewhere to go in your interface.
Unknown counts as no.

Fail closed is the construction, not a setting. There is no flag that makes this more permissive.

May contain blocks a clear.

An advisory line is a declared possibility. It cannot produce no_conflict_found for the allergen it names.

KnownGate never says “safe”.

The word is not a valid rendering of any of the four values. Do not introduce it in your own copy.

Get a key.

If your agent can make an HTTP request it can sign itself up. There is no confirmation click in the way, because a verification wall is the human login wearing a costume.

Nothing on knowngate.com itself needs a key. The workspace, the record pages and the published standard are all open.

[LIVE]declined
What we have declined

Pulled from /stats. Zero is a true number and this page is built to show it.

See the refusal rate
A verdict you can open

Every saved record is a dated page anyone can re-check without an account.

See a sample record
What counts as proof

The evidence standard, versioned and public, including what never counts.

Read the standard