{
  "name": "MentionFox — verify a list of people",
  "meta": {
    "description": "Takes a list of names plus employers and returns one cited verdict per person: verified, partially verified, could not verify, or contradicted by the record. Every finding names the public register that produced it, the exact search run against it, and the record with its date. Paste your list into the first node and run it.",
    "docs": "https://mentionfox.com/n8n"
  },
  "nodes": [
    {
      "parameters": {},
      "id": "a1000000-0000-4000-8000-000000000001",
      "name": "Run this",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [-320, 0]
    },
    {
      "parameters": {
        "mode": "raw",
        "jsonOutput": "{\n  \"people\": [\n    { \"name\": \"Brian Armstrong\", \"employer\": \"Coinbase\", \"title\": \"CEO\" },\n    { \"name\": \"Jane Doe\", \"employer\": \"Acme Corp\", \"title\": \"CFO\" }\n  ]\n}",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000002",
      "name": "Your list",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [-100, 0],
      "notes": "Replace these two with your own. Name is required; employer and title are optional but they decide which registers can be searched — a bare name can only be checked for identity."
    },
    {
      "parameters": {
        "fieldToSplitOut": "people",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000003",
      "name": "One person at a time",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [120, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://mentionfox.com/mcp",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Accept", "value": "application/json, text/event-stream" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ jsonrpc: \"2.0\", id: $itemIndex + 1, method: \"tools/call\", params: { name: \"source_check\", arguments: { input: [$json.name, $json.title, $json.employer].filter(Boolean).join(\", \"), name: $json.name, title: $json.title || null, employer: $json.employer || null } } }) }}",
        "options": { "timeout": 120000, "response": { "response": { "neverError": true } } }
      },
      "id": "a1000000-0000-4000-8000-000000000004",
      "name": "Check them",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [340, 0],
      "notes": "Add a Header Auth credential: name = Authorization, value = Bearer YOUR_TOKEN. Get a token by connecting MentionFox once at https://mentionfox.com/mcp — the OAuth flow issues it. A Source Check costs 25 credits and the tool says so before it runs; if the balance is short it refuses in plain English and charges nothing.",
      "credentials": {
        "httpHeaderAuth": { "id": "REPLACE_ME", "name": "MentionFox MCP token" }
      }
    },
    {
      "parameters": {
        "jsCode": "// One row per person, flattened out of the MCP envelope.\n//\n// Every finding keeps the three things that make it evidence rather than an opinion:\n// which public register answered, the exact search run against it, and the record with\n// its date. The gaps come out too — a report that hides what it could not check reads\n// as coverage, which is the opposite of the point.\nconst out = [];\nfor (const item of $input.all()) {\n  const env = item.json;\n  let payload = {};\n  try {\n    const text = env?.result?.content?.[0]?.text;\n    payload = text ? JSON.parse(text) : (env?.result?.structuredContent || env?.result || {});\n  } catch (e) {\n    payload = { ok: false, error: 'Could not read the response: ' + e.message };\n  }\n\n  if (payload.ok === false) {\n    out.push({ json: { subject: payload?.subject?.name || null, verdict: null, error: payload.error, credits_charged: payload.credits_charged ?? 0 } });\n    continue;\n  }\n\n  const checks = Array.isArray(payload.checks) ? payload.checks : [];\n  out.push({ json: {\n    subject: payload?.subject?.name || null,\n    employer: payload?.subject?.employer || null,\n    verdict: payload.verdict || null,\n    verdict_sentence: payload.verdict_sentence || null,\n    reference: payload.report_ref || null,\n    checked_on: payload.created_at || null,\n    cost_credits: payload.cost_credits ?? null,\n    // What settled it, and how anyone can repeat it.\n    findings: checks.filter(c => c.status !== 'not_checked').map(c => ({\n      register: c.registry_name,\n      outcome: c.status,\n      confidence: c.confidence,\n      search_performed: c.search_performed,\n      record: c.evidence_excerpt || null,\n      record_url: c.evidence_url || null,\n    })),\n    // What it could not settle. Each one carries the link that settles it by hand.\n    not_checked: (payload.not_checked || []).map(n => ({ source: n.source_name, why: n.reason, do_it_yourself: n.manual_url || null })),\n    // Per-claim verdicts, so a failure points at the specific claim that failed.\n    claims: (payload.claim_outcomes || []).map(o => ({ claim: o.claim_text, verdict: o.verdict, decided_by: o.decided_by, ceiling_reason: o.ceiling_reason })),\n  } });\n}\nreturn out;"
      },
      "id": "a1000000-0000-4000-8000-000000000005",
      "name": "One row per person",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [560, 0]
    }
  ],
  "connections": {
    "Run this": { "main": [[{ "node": "Your list", "type": "main", "index": 0 }]] },
    "Your list": { "main": [[{ "node": "One person at a time", "type": "main", "index": 0 }]] },
    "One person at a time": { "main": [[{ "node": "Check them", "type": "main", "index": 0 }]] },
    "Check them": { "main": [[{ "node": "One row per person", "type": "main", "index": 0 }]] }
  },
  "settings": { "executionOrder": "v1" },
  "pinData": {}
}
