MCP Tools
Context Intelligence

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

NameTypeRequiredDefaultDescription
scan_idstringNoThe scan to read. Reads that exact scan whatever its status. USE THIS WHEN POLLING.
content_idstringNoReads 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 no scan_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_id deliberately skips a scan that is still running. If you poll with it, you get the previous result back marked complete - 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_grounding hands you a scan_id, poll with that scan_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_id alone.

Example prompts

  • "Is that check done yet?"
  • "What did the last grounding pass find on this doc?"
Scroll to Top