Evidence and workflow access tools
Two read-only tools give clients that work only through tools the same evidence and workflow instructions that native MCP resources and prompts provide. They reuse the existing resource and prompt services: rights, size limits, exact package identity and rendered wording are the same on every route. Neither tool runs a model, follows links on the caller's behalf, or creates relationships.
Use native resource reads and the native prompt picker when your client offers them. Use these tools when it does not, when a returned link cannot be opened from the client's attachment menu, or when you deliberately work through tool calls only.
read_evidence
Reads the full permitted content of one kgfegmcp:// resource in bounded UTF-8 windows.
| Field | Type | Default | Notes |
|---|---|---|---|
uri |
string, 1–4,096 | — | kgfegmcp://catalog or a URI from one of the 14 templates |
maxContentBytes |
integer, 1–32,768 | 16,384 | Upper bound for this window; a window can be smaller to fit result limits |
cursor |
string, 1–4,096 | null | Only a page.nextCursor value returned by this tool for the same request |
{"request":{"uri":"kgfegmcp://framework/nigeria-nerdc-mathematics-primary-1-3/snapshot/nigeria-nerdc-mathematics-primary-1-3%40undated%2Bbc5e769ed26f/relationship/0129f5d5-42fd-52cb-bcf2-ec07c47103e7/provenance"}}
Where URIs come from
Copy URIs unchanged from tool results: progression results carry standardUri,
relationshipUri, provenanceUri, manifestUri, summaryUri, validationUri,
unresolvedUri and artifact URIs. The seven workflows in
get_workflow_instructions also render an EVIDENCE
LINKS block with exact manifest, interpretation-profile, validation, unresolved and LP
summary URIs for the pinned snapshot, plus per-record patterns for standards, standard
provenance, a standard's learning components, learning components and their provenance.
Replace {nodeId} in a pattern with an exact outer node ID or learning-component ID from
a tool result; returned UUIDs need no further encoding. An unreplaced {nodeId} fails.
The tool accepts only exact resource addresses. Queries, fragments, ports, user
information, empty or extra path segments, encoded separators, dot segments and double
encoding are rejected with invalid_evidence_uri. A percent-encoded spelling of a valid
URI is accepted and returned in its canonical form in metadata.canonicalUri.
Result
| Field | Meaning |
|---|---|
metadata |
The native resource metadata: canonical URI, resource kind, representation, exact package/profile/snapshot identity, source-artifact hashes, whole-resource contentSha256 and byteLength |
content |
This window's text, decoded from the original UTF-8 bytes |
contentStatus |
full only when this window is the whole resource; otherwise partial, including the last window of a multi-window read |
page |
startByte, endByteExclusive, returnedBytes, totalBytes, maxContentBytes, isComplete, nextCursor, nextRequest, chunkSha256 and the result limits |
evidenceNotice |
How to continue and join windows |
To read a whole record, call again with page.nextRequest unchanged until
page.isComplete is true, then join the content windows in order. The joined bytes
reproduce metadata.contentSha256. Byte offsets count the original resource bytes;
chunkSha256 covers only the returned window. Windows always end on a Unicode character
boundary.
Cursors are opaque and bound to the canonical URI, the resource content hash, its
metadata identity, maxContentBytes and the next byte position. An edited, stale or
mismatched cursor fails with invalid_cursor. Paging does not raise native limits: every
call reapplies rights, exposure class, source-read and return-size checks, and a resource
that is denied natively is denied here too.
Window counts depend on the window size. Measured with the default window of 16,384
bytes: the Nigeria diagnostic relationship provenance (12,275 bytes) and the target
standard's provenance arrive in one window; the Nigeria manifest (22,348 bytes) needs
two; and Ghana Mathematics' standards-hierarchy unresolved-items report (/unresolved,
42,831 bytes) needs three. With maxContentBytes 4,096 the same report needs 11
windows. That report covers unresolved parent–child links in the standards hierarchy; it
is not progression evidence, which is in the learningProgressionUnresolved record that
metadata.unresolvedUri points to.
get_workflow_instructions
Returns the complete rendered instructions of one native prompt workflow as a tool
result. request.workflowName selects one of seven workflows:
workflowName |
Same arguments as native prompt |
|---|---|
learning_progression_teaching_sequence |
learning_progression_teaching_sequence |
learning_progression_support_plan |
learning_progression_support_plan |
learning_progression_curriculum_review |
learning_progression_curriculum_review |
teacher_guide_draft |
teacher_guide_draft |
student_study_support |
student_study_support |
student_handbook_section |
student_handbook_section |
multigrade_lesson_plan |
multigrade_lesson_plan |
The other request fields are that prompt's arguments in camelCase (framework_id becomes
frameworkId), with the same defaults and limits. Unlike native prompt arguments, arrays
and selector objects are sent as JSON values, not JSON strings:
{"request":{"workflowName":"learning_progression_support_plan","frameworkId":"nigeria-nerdc-mathematics-primary-1-3","snapshotId":"nigeria-nerdc-mathematics-primary-1-3@undated+bc5e769ed26f","identifier":{"identifierType":"node_id","nodeId":"e399b510-48bb-58ee-abda-61460a5a853b"},"localContext":"Learners can count to 9 but often write 6 and 9 the wrong way round.","outputLanguage":"en"}}
Unknown workflow names, extra fields and invalid values fail validation.
administrator_alignment_review and cross_framework_comparison remain native prompts
only.
The result contains rendered (the same prompt render result as the native prompt,
including the full message, prompt version and prompt-configuration identity),
effectiveRequest (the validated request with defaults filled in), the pinned package
reference, profileSha256, manifestSha256 and an instructionsNotice. For identical
validated arguments and the same snapshot, rendered.message is identical to the native
prompt message.
The tool only renders instructions. The client then makes the listed tool calls, reads
evidence, and composes the cited answer. If the complete instructions cannot fit the
result limits, the call fails with workflow_instructions_too_large; instructions are
never clipped or continued with a cursor.
Output and limits
Both tools return the complete result as one canonical JSON text block (sorted keys,
compact separators, Unicode preserved) plus the same object as structuredContent.
Parsing the text yields exactly the structured result, so a client that reads only text
loses nothing. The whole emitted result, text and structured copy together, must fit in
1,048,576 UTF-8 bytes and 100,000 characters.
Errors
| Error code | Meaning |
|---|---|
invalid_evidence_uri |
Not one exact supported kgfegmcp:// address |
resource_not_found, standard_not_found |
The addressed resource, record or artifact does not exist in that snapshot (native error codes are kept) |
resource_access_denied |
Rights, exposure class or native size policy blocks the resource (for example bulk artifacts) |
unsupported_evidence_format |
Authorized bytes are not UTF-8 text and cannot be paged |
evidence_result_too_large |
Not even one character of content fits beside the metadata within result limits |
invalid_cursor |
Cursor altered, stale or not for this request |
framework_not_found |
Framework or snapshot unavailable |
prompt_access_denied, prompt_configuration_error, prompt_rendering_error |
Same meaning as for the native prompt |
workflow_instructions_too_large |
Complete instructions exceed result limits; use the native prompt or shorter caller context |
Error text never includes denied content or local file paths.