get_grounding_result
Read the result of a grounding scan. The poll companion to check_content_grounding - it never starts a scan and never charges credits. Poll with scan_id; content_id skips a still-running scan.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
scan_id | string | No | — | The scan to read. Reads that exact scan whatever its status. USE THIS WHEN POLLING. |
content_id | string | No | — | Reads the latest COMPLETED grounding for this document. Deliberately skips a scan that is still running, so it is the wrong call for polling. |
Input Schema
{
"type": "object",
"anyOf": [
{
"required": [
"scan_id"
]
},
{
"required": [
"content_id"
]
}
],
"properties": {
"scan_id": {
"type": "string",
"format": "uuid",
"description": "The scan to read. Reads that exact scan whatever its status. USE THIS WHEN POLLING."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Reads the latest COMPLETED grounding for this document. Deliberately skips a scan that is still running, so it is the wrong call for polling."
}
},
"description": "One of scan_id or content_id is required. Use scan_id when polling - content_id skips a scan that is still running and returns the previous result marked complete."
}Output Schema
{
"type": "object",
"properties": {
"claims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"refs": {
"type": "array",
"items": {
"type": "object"
},
"description": "The context the claim was matched against."
},
"value": {
"type": [
"string",
"null"
]
},
"bucket": {
"enum": [
"supported",
"conflict",
"gap"
],
"type": "string"
},
"subject": {
"type": [
"string",
"null"
]
},
"claim_text": {
"type": "string"
},
"confidence": {
"type": "string",
"description": "A STRING, not a number - e.g. \"0.82\". Parse it before comparing."
}
}
},
"description": "Every factual claim extracted from the document."
},
"status": {
"enum": [
"running",
"complete",
"failed",
"none"
],
"type": "string",
"description": "running means the scan is still going - poll with scan_id."
},
"scan_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "The scan run. Poll get_grounding_result with this value."
},
"summary": {
"type": "object",
"properties": {
"gaps": {
"type": "integer",
"description": "Claims the library has nothing on."
},
"conflicts": {
"type": "integer",
"description": "Claims the library contradicts."
},
"supported": {
"type": "integer",
"description": "Claims the context library backs."
},
"total_claims": {
"type": "integer"
},
"corpus_freshness": {
"type": "string",
"description": "How current the context the scan checked against is."
}
}
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"enum": [
"conflict",
"gap"
],
"type": "string"
},
"status": {
"enum": [
"pending",
"acknowledged",
"dismissed",
"resolved",
null
],
"type": [
"string",
"null"
]
},
"subject": {
"type": [
"string",
"null"
],
"description": "What the finding is about."
},
"link_url": {
"type": [
"string",
"null"
],
"description": "Opens the finding."
},
"severity": {
"type": [
"string",
"null"
]
},
"statement": {
"type": [
"string",
"null"
],
"description": "What the document says versus what the library says."
},
"finding_id": {
"type": "string",
"format": "uuid",
"description": "Pass to apply_grounding_fix."
},
"suggested_fix": {
"type": [
"object",
"null"
],
"description": "The full recommended update. Review this with the user before applying."
},
"recommendation": {
"type": [
"string",
"null"
],
"description": "What Marcora suggests doing."
},
"context_item_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Where applying would write. null means the fix targets the document itself."
}
}
},
"description": "The conflicts and gaps worth acting on. Pass a finding_id to apply_grounding_fix."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Opens the document with its grounding panel open. Hand this to the user."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "The document that was scanned."
},
"corpus_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"source": {
"type": [
"string",
"null"
]
},
"link_url": {
"type": [
"string",
"null"
],
"description": "null when there is nothing to link to."
},
"context_item_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "null for entries that are not context items, such as project briefs."
},
"content_category": {
"type": [
"string",
"null"
]
}
}
},
"description": "The context the scan was checked against."
},
"details_visible": {
"type": "boolean",
"description": "false when you are not the document's creator - you get counts only, no claim or finding detail."
}
},
"description": "The grounding envelope. check_content_grounding and get_grounding_result return exactly this shape, so one handler works for both."
}Instructions
When to use: check_content_grounding returned running and you need to poll it, or the user wants to re-read a document's last grounding result without paying for a new scan.
Reads the result of a grounding scan. It never starts a scan and never charges credits, so it is always safe to call.
Which id to pass - this is the part that matters
scan_id- reads that exact scan, whatever its status. This is what you want when polling: it always reports the run you actually started.content_id(with noscan_id) - reads the latest completed grounding for that document. Good for "what is this document's grounding state right now".
:warning: Do not poll with
content_id
content_iddeliberately skips a scan that is still running. If you poll with it, you get the previous result back markedcomplete- and you will believe your new scan has finished when it has not. Nothing errors; the answer is just quietly the wrong one.When
check_content_groundinghands you ascan_id, poll with thatscan_id.
Poll every 15-30 seconds. A fresh scan usually needs 120-150 seconds.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
scan_id |
string (uuid) | No* | The scan to read. Use this when polling |
content_id |
string (uuid) | No* | Read the latest completed grounding for this document |
* One of scan_id or content_id is required.
Output
Identical to check_content_grounding - the same envelope, so the same handling works for both. See that tool for the full field list.
As there: confidence on each claim is a string, e.g. "0.82", not a number.
Errors
- Provide 'scan_id' or 'content_id' (400) - neither was supplied.
- Scan not found (404) - no such grounding scan in your team.
- scan_id and content_id refer to different content (400) - pass
scan_idalone.
Example prompts
- "Is that check done yet?"
- "What did the last grounding pass find on this doc?"