Skip to content

Get exercise source document

Fetch up to 5 MiB of exact retained source bytes after re-proving same-creator-job association with an owned exercise or exact version. Use the CLI command for larger retained sources.

{
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"fileParams": [],
"requiredPermission": "read",
"security": {
"type": "oauth2",
"scopes": [
"chalksurf:mcp"
]
}
}

The server advertises this JSON Schema to MCP clients. Runtime authorization and business-rule checks still apply.

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"exerciseId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"organizationId": {
"description": "The ChalkSurf organization ID to use for this request.",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"sourceDocumentId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"versionId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"exerciseId",
"sourceDocumentId",
"organizationId"
],
"type": "object"
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"additionalProperties": false,
"properties": {
"sourceDocument": {
"additionalProperties": false,
"properties": {
"byteLength": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"resourceUri": {
"format": "starts_with",
"pattern": "^chalksurf:\\/\\/exercise-source\\/.*",
"type": "string"
},
"storedFileName": {
"type": "string"
},
"storedMimeType": {
"type": "string"
},
"transformationKind": {
"enum": [
"none",
"image_to_jpeg",
"google_workspace_export",
"google_workspace_export_then_image_to_jpeg",
"legacy_unknown"
],
"type": "string"
}
},
"required": [
"id",
"storedFileName",
"storedMimeType",
"transformationKind",
"byteLength",
"resourceUri"
],
"type": "object"
}
},
"required": [
"sourceDocument"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"error": {
"additionalProperties": false,
"properties": {
"agentErrorDetails": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"results": {
"items": {
"additionalProperties": false,
"properties": {
"field": {
"enum": [
"exercise_text",
"description",
"hint",
"answer",
"scaffold",
"detailed_solution",
"teaching_notes"
],
"type": "string"
},
"language": {
"minLength": 1,
"type": "string"
},
"patchPath": {
"minLength": 1,
"type": "string"
},
"path": {
"minLength": 1,
"type": "string"
},
"validation": {
"additionalProperties": false,
"properties": {
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"enum": [
"unclosed_delimiter",
"blacklisted_command",
"disallowed_control_character_in_math",
"disallowed_control_character_in_text",
"double_escaped_latex_command",
"katex_parse_error",
"raw_latex_command_outside_math"
],
"type": "string"
},
"end": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"hint": {
"type": "string"
},
"message": {
"type": "string"
},
"severity": {
"const": "error",
"type": "string"
},
"snippet": {
"type": "string"
},
"start": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"code",
"message",
"severity",
"snippet",
"start",
"end"
],
"type": "object"
},
"type": "array"
},
"path": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"value": {
"type": "string"
}
},
"required": [
"path",
"value",
"valid",
"issues"
],
"type": "object"
}
},
"required": [
"language",
"field",
"path",
"patchPath",
"validation"
],
"type": "object"
},
"type": "array"
},
"summary": {
"additionalProperties": false,
"properties": {
"affectedPathCount": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"checkedSnippetCount": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"invalidSnippetCount": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"checkedSnippetCount",
"invalidSnippetCount",
"affectedPathCount"
],
"type": "object"
},
"type": {
"const": "invalid_latex",
"type": "string"
}
},
"required": [
"type",
"summary",
"results"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"metadata": {
"additionalProperties": {
"type": [
"string",
"number",
"boolean",
"null"
]
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"reason": {
"enum": [
"exercise_not_found",
"exercise_version_not_found",
"invalid_exercise_version_cursor",
"invalid_exercise_source_cursor",
"source_document_not_associated",
"source_document_not_ready",
"source_document_object_missing",
"source_document_size_mismatch",
"exercise_version_snapshot_invalid",
"source_document_association_inconsistent",
"source_document_too_large_for_mcp",
"source_document_too_large",
"source_document_read_capacity_exhausted",
"source_document_storage_unavailable"
],
"type": "string"
},
"recovery": {
"enum": [
"check_organization_and_id",
"relist_exercise_versions",
"restart_pagination",
"relist_source_documents",
"inspect_source_coverage",
"escalate_integrity_incident",
"use_cli_source_download",
"request_out_of_band_inspection",
"retry_source_read"
],
"type": "string"
},
"retryable": {
"type": "boolean"
},
"type": {
"const": "exercise_provenance",
"type": "string"
}
},
"required": [
"type",
"reason",
"recovery",
"retryable",
"metadata"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"editIndex": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"reason": {
"enum": [
"missing_member",
"missing_anchor",
"self_anchor",
"duplicate_addition",
"source_unavailable",
"revision_changed",
"publication_confirmation_required",
"result_too_large",
"temporarily_unavailable"
],
"type": "string"
},
"recovery": {
"enum": [
"correct_edits",
"reload_sheet",
"confirm_publication",
"inspect_state"
],
"type": "string"
},
"type": {
"const": "sheet_content_edit",
"type": "string"
}
},
"required": [
"type",
"reason",
"recovery"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"exerciseId": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"figureType": {
"enum": [
"text",
"solution"
],
"type": "string"
},
"requiredExerciseFigureIds": {
"items": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": "array"
},
"type": {
"const": "figure_group_membership",
"type": "string"
}
},
"required": [
"type",
"exerciseId",
"figureType",
"requiredExerciseFigureIds"
],
"type": "object"
}
]
},
"code": {
"enum": [
"validation_error",
"unauthorized",
"forbidden",
"not_found",
"timeout",
"import_source_error",
"precondition_failed",
"confirmation_required",
"resource_in_use",
"feature_disabled",
"figure_quality_failed",
"figure_render_failed",
"image_transform_failed",
"invalid_label",
"invalid_latex",
"storage_upload_failed",
"unsupported_image",
"validation_failed",
"resource_exhausted",
"data_loss",
"unavailable",
"organization_selection_required",
"organization_access_denied",
"internal_error"
],
"type": "string"
},
"message": {
"minLength": 1,
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"isError": {
"const": true,
"type": "boolean"
}
},
"required": [
"isError",
"error"
],
"type": "object"
}
]
}