check_content_grounding
Runs Marcora's content grounding on a piece of content: extracts its factual claims, checks each against the team's context library, and returns which are supported, which conflict with the library, and which are gaps the library can't back up. It checks against the TEAM'S library only, never the open web.
When to use: after drafting or revising marketing content, when the user asks to fact-check, verify or ground a document against their own context ("check this against our context", "is this accurate?"), or as the check step in a draft → ground → revise → re-ground loop.
Three entry modes (supplying neither field is an error):
content_idalone: scan an existing content item. Use this to check part of an existing document.contentalone: SAVES the markdown as a NEW content item, then scans it. The newcontent_idcomes back.titleis optional and only applies here.content_id+content: ⚠️ REPLACES THAT DOCUMENT'S ENTIRE BODY with the markdown you pass (identical toupdate_content), then re-scans. Send the FULL revised document, NEVER a fragment: the rest of the document would be destroyed.
Timing: a fresh scan typically takes 120-150 seconds. This call waits up to about 20 seconds; if the scan is still running it returns status="running" with a content_id and scan_id. Then POLL get_grounding_result with the scan_id (polling with content_id returns the PREVIOUS completed scan). Do NOT call this tool again for the same scan: it queues redundant work and spends more credits. Re-scanning an unchanged document is fast.
Gating: requires the Command plan with an active subscription and available Studio Credits, and an editor role. Full findings go to the content's creator; others get summary counts only (details_visible=false).
Present link_url exactly as returned.
When title is omitted with content, the name is derived from the first line. Re-scanning an UNCHANGED document takes a few seconds because unchanged claims are reused. The library freshness sweep that runs first is free.
Errors:
Provide either 'content_id' or 'content' (400): neither was supplied.
Not a valid UUID (400): malformed content_id.
Context Intelligence requires the Command plan (403): plan/credits gate failed.
You are not authorized to perform this action (403): the token's user lacks an editor role on the team.
Links: copy link_url character for character. Never retype, shorten, or rebuild a link or the IDs inside it.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "check_content_grounding"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional. Only meaningful alongside content. When omitted the name is derived from the first line of the markdown. | |
| content | No | Optional. Markdown to ground. On its own, it is stored as a NEW document and scanned. ⚠️ DANGER — combined with `content_id`, this REPLACES THE ENTIRE BODY of that document, exactly like update_content. It is a whole-document overwrite, never a fragment check. If you want to check one paragraph or section of an existing document, do NOT pass that fragment here with a content_id — you would destroy the rest of the document. Either pass the FULL revised document, or omit `content` entirely and scan the existing item by content_id alone. | |
| content_id | No | Optional. An existing document to scan. Pass it ALONE to scan that document as it currently stands — that is the safe default. Combining it with `content` REPLACES the document's entire body first (see the `content` warning). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| claims | No | Every factual claim extracted from the document, with its verdict. Creator-only. | |
| status | Yes | running = poll get_grounding_result with this scan_id, do not re-scan. none = no scan has been run for this content yet. | |
| message | No | Present when the scan is still running, or when details are withheld. | |
| scan_id | No | The scan run. Null only if no scan has ever run for this content. | |
| summary | Yes | Claim counts. Present even when details_visible is false. | |
| findings | No | Actionable conflicts and gaps. Creator-only. | |
| link_url | Yes | Opens the document in Marcora with the grounding panel showing. | |
| content_id | Yes | The content item that was scanned. In content-submission mode this is the newly created item — keep it for polling and for follow-up calls. | |
| corpus_items | No | The context items this scan was actually grounded against, recorded at scan time. Creator-only. | |
| excluded_items | No | Context items this check did not read. Present only when at least one was skipped. Each entry has id, reason and source. reason is sync_lock (the item was being edited during the check) or library_token_budget (the reference library was larger than one check can read). source is context_item or project_brief. name is included only for the person who ran the check; everyone else, including the content's creator, gets ids only. | |
| coverage_reason | No | Why the check was incomplete; null when coverage_complete is true. library_catch_up = some context items were still being prepared, so re-run the check shortly. library_extraction_failed = some context items could not be prepared. library_token_budget = the reference library is larger than one check can read. | |
| details_visible | No | False when the caller is not the content's creator — findings, claims and corpus_items are then omitted. | |
| coverage_complete | No | False means some context items were not read, so a claim marked unsupported may still have support in an unread item. True does not by itself mean every context item was read: excluded_items lists any item the check left out, and it can be present even when coverage_complete is true. Before acting on gaps, check coverage_complete, coverage_reason and excluded_items. |