Typed calculation payloads
Calculation fields live inside request_payload. The confirmed run_borrower_cash_forecast workspace write is the explicit run_* exception and uses direct typed borrower_id, scenario, horizon_days, and confirmation arguments; its borrower ID and horizon must be JSON integers. Dates use ISO format. Other database-ID inputs accept JSON integers or decimal strings; opaque CUSIPs, refs, document IDs, and tokens remain strings.
{
"request_payload": {
"settleDate": "2026-05-01",
"maturityDate": "2036-05-01",
"coupon": 5.0,
"yield": 4.0,
"dayCountBasis": "30/360",
"feb30360Adjustment": false,
"eom30360Adjustment": false
}
}
Long-running work
Prefer a tool's *_async form for heavy borrower calculations. It returns an mcp-job:// reference; poll that reference with get_job_status until it reaches terminal done, failed, or cancelled. An outer status: ok means only that the poll succeeded. For a failed job, inspect error_code and error; for a done calculation, inspect result_outcome when present. A new inline completion also returns its retained provenance and professional-use notice snapshot. Completed synchronous new-money and refunding calls expose the same result_outcome shape.
If result_paged is true, require the poll and schema-2 manifest result_outcome copies to match. Fetch and apply the s000 root initializer before any targeted child section. Then a focused conversational client can select the relevant path in result_manifest.sections and fetch exactly that section's declared page_count while its section_key stays constant. A returned next reference advances global order; it does not select a semantic section. If a result has more than 63 top-level keys, its object_group sections use path=[] and do not identify arbitrary member keys, so use complete traversal. A programmatic client starts at result_manifest.first_page_ref, follows every global next reference until page.complete, and applies the structural operations in global_page_index order. Targeted traversal is partial evidence; only complete traversal verifies the complete result.
The page operations are set(path, value), init_object(path), init_list(path, length), list_slice(path, start, values), init_string(path, chunk_count, utf8_bytes), and string_chunk(path, chunk_index, value). Paths are JSON arrays of string keys or nonnegative integer indexes. String chunks append in contiguous 1-based order, without language-dependent offsets. Verify each page and the reconstructed result using SHA-256 over RFC 8785/JCS UTF-8 canonical bytes. New inline stored envelopes use a 20 KB canonical threshold; durable outcomes retain at most 2 MB across at most 128 pages for 48 hours, with each portable response below 60 KB. Every fetch rechecks the submit-time scope/tier snapshot plus current live scope, tier, tenant, owner, borrower, and scale access. Schema-2 pages repeat manifest-bound result_context and the retained professional-use notice. Follow a returned result_provenance detail ref when fuller provenance is needed; unavailable provenance may have no ref. Independently, whenever result_notice_available=true, follow the returned result_notice ref. Schema-1 pages expose context_integrity=legacy_unbound and unknown source context. A historical result_too_large marker still means that old body was dropped, and a missing result_outcome means its calculation outcome is unknown.
Use cancel_job only after explicitly asking to cancel the exact canonical mcp-job:// reference. Cancellation is immediate queued-only job control—not a preview/confirmation write. A running, done, or failed job returns a normalized 409 conflict and is never force-terminated. Poll get_job_status afterward to read back the authoritative state. Returned job-control resolution and conflict payloads include normalized status_code and error_code; authentication and scope denials remain MCP errors.
Writes and confirmation
The first call returns a signed preview. Review the company, borrower, target, assumptions, exact change, reversibility, and warnings before confirming with the returned token. Never treat a preview as a successful write.