{"server":"com.knowngate/verify","count":4,"tools":[{"name":"check_item","title":null,"description":"Rule one food subject against the household premise (restrictions, thresholds, or both). Needs a key (Authorization: Bearer kg_live_…); create a free one with the register tool. Returns one of four verdicts (no_conflict_found, conflict_found, ask_one_question, couldnt_verify) with typed hits, source kind and read date. Unknown counts as no; the word safe is never used.","input_schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["restrictions","subject"],"properties":{"subject":{"type":"object","required":["kind","value"],"properties":{"kind":{"enum":["upc","product_query","menu_item","ingredients"],"type":"string","description":"upc: digits from a barcode · product_query: a product name · menu_item: a dish (needs venue) · ingredients: comma-separated ingredient text"},"value":{"type":"string","maxLength":4000,"minLength":1},"venue":{"type":"string","maxLength":200,"description":"Venue name, required for menu_item"}}},"thresholds":{"type":"array","items":{"type":"object","required":["nutrient"],"properties":{"max":{"type":"number","minimum":0,"description":"Upper bound per serving"},"min":{"type":"number","minimum":0,"description":"Lower bound per serving"},"unit":{"type":"string","maxLength":10,"description":"Unit the bound is stated in (\"g\", \"mg\", \"kcal\"). Defaults to the panel unit; exact conversions only."},"basis":{"type":"string","maxLength":20,"description":"Only \"per_serving\" is ruleable in v1"},"nutrient":{"type":"string","maxLength":40,"minLength":1,"description":"e.g. \"sugar_g\", \"carbs\", \"sodium_mg\", \"calories\", \"protein\""}}},"maxItems":10,"description":"Numeric premise (beta): per-serving nutrient bounds ruled against the product's typed panel. Unknown values refuse honestly, never zero. An empty array means no numeric limits."},"restrictions":{"type":"array","items":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"object","required":["key"],"properties":{"key":{"type":"string","maxLength":60,"minLength":1},"note":{"type":"string","maxLength":200}}}]},"maxItems":20,"description":"Household restrictions. FDA-9 keys (\"peanut\", \"sesame\", \"milk\", …) as strings, or { key, note } when a note matters (e.g. { key: \"tree_nut\", note: \"cashew\" }). May be empty when thresholds carry the premise."}}},"output_schema":null,"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T18:10:35.145Z"},{"name":"check_plan","title":null,"description":"Rule a set of items at once: a recipe's ingredients, a basket, several days. Needs a key (Authorization: Bearer kg_live_…); create a free one with the register tool. Up to 25 subjects, one call, one verdict per item plus a summary line. Each item carries its own evidence, source and read date.","input_schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["restrictions","items"],"properties":{"items":{"type":"array","items":{"type":"object","required":["kind","value"],"properties":{"kind":{"enum":["upc","product_query","menu_item","ingredients"],"type":"string","description":"upc: digits from a barcode · product_query: a product name · menu_item: a dish (needs venue) · ingredients: comma-separated ingredient text"},"value":{"type":"string","maxLength":4000,"minLength":1},"venue":{"type":"string","maxLength":200}}},"maxItems":25,"minItems":1},"thresholds":{"type":"array","items":{"type":"object","required":["nutrient"],"properties":{"max":{"type":"number","minimum":0,"description":"Upper bound per serving"},"min":{"type":"number","minimum":0,"description":"Lower bound per serving"},"unit":{"type":"string","maxLength":10,"description":"Unit the bound is stated in (\"g\", \"mg\", \"kcal\"). Defaults to the panel unit; exact conversions only."},"basis":{"type":"string","maxLength":20,"description":"Only \"per_serving\" is ruleable in v1"},"nutrient":{"type":"string","maxLength":40,"minLength":1,"description":"e.g. \"sugar_g\", \"carbs\", \"sodium_mg\", \"calories\", \"protein\""}}},"maxItems":10,"description":"Numeric premise (beta): per-serving nutrient bounds ruled against the product's typed panel. Unknown values refuse honestly, never zero. An empty array means no numeric limits."},"restrictions":{"type":"array","items":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"object","required":["key"],"properties":{"key":{"type":"string","maxLength":60,"minLength":1},"note":{"type":"string","maxLength":200}}}]},"maxItems":20,"description":"Household restrictions. FDA-9 keys (\"peanut\", \"sesame\", \"milk\", …) as strings, or { key, note } when a note matters (e.g. { key: \"tree_nut\", note: \"cashew\" }). May be empty when thresholds carry the premise."}}},"output_schema":null,"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T18:10:35.145Z"},{"name":"check_venue","title":null,"description":"Rule a whole venue's published chart against the household restrictions in one call. Needs a key (Authorization: Bearer kg_live_…); create a free one with the register tool. Returns per-verdict counts, the most severe items, the operator's cross-contact caveat verbatim, and the chart's source and read date. A venue with no machine-readable chart says so honestly.","input_schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["restrictions","venue"],"properties":{"venue":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":200,"minLength":1},"location":{"type":"string","maxLength":200,"description":"City or metro, optional"}}},"restrictions":{"type":"array","items":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"object","required":["key"],"properties":{"key":{"type":"string","maxLength":60,"minLength":1},"note":{"type":"string","maxLength":200}}}]},"maxItems":20,"description":"Household restrictions. FDA-9 keys (\"peanut\", \"sesame\", \"milk\", …) as strings, or { key, note } when a note matters (e.g. { key: \"tree_nut\", note: \"cashew\" }). May be empty when thresholds carry the premise."}}},"output_schema":null,"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T18:10:35.145Z"},{"name":"register","title":null,"description":"Sign yourself up for a developer key without leaving MCP. The email is contact and recovery, not a wall. One key per email, free tier (100 checks a month); the key is in this response and never shown again. Nothing on knowngate.com itself needs a key.","input_schema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["agent_name","contact_email"],"properties":{"agent_name":{"type":"string","maxLength":120,"minLength":1,"description":"Who is signing up, e.g. your product name"},"contact_email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","maxLength":254}}},"output_schema":null,"annotations":{"readOnlyHint":false,"idempotentHint":false},"source":"probe","observed_at":"2026-10-19T18:10:35.145Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/com.knowngate%2Fverify/connection?target=mcpServers","arguments":{"name":"com.knowngate/verify","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/com.knowngate%2Fverify","arguments":{"name":"com.knowngate/verify"}}]}