Review artwork
projects:readart:read
Inspect slots and existing image assets without changing bindings.
Your workspace, connected
Give your assistant access to one private project. Inspect assets and math, edit native animation documents, bind saved versions to declared game hooks, or upload and activate a prepared build for an existing owned project.
Model Context Protocol (MCP) lets a compatible client discover and call ReelGrove’s tools. You choose which project it can reach and what it can change. ReelGrove checks that access on every call.
Connect, ask the client to identify the project, and inspect its current state. Add write scopes only for the work you want it to perform.
Setup
Sign in to ReelGrove and open Developer access, or choose Help → Connect an agent in a project’s Lab. Select the studio that contains your game. You need a ready project and current project-read permission.
Choose the project, give the key a recognizable name, and select its scopes. Expiry defaults to 7 days; you can choose 1–30 days. Save the secret from the one-time dialog.
In your MCP client, choose a remote Streamable HTTP server. Copy the endpoint from Developer access and add the authorization header below. Then connect and ask for project_context.
/mcpAuthorizationBearer YOUR_PROJECT_KEYFor example, an account at https://studio.example uses https://studio.example/mcp. Use the actual endpoint shown in your account; this example host is a placeholder.
Client configuration formats differ. Enter the URL and header in your client’s manual settings; there is no universal configuration JSON or OAuth sign-in flow for this endpoint. A client that only supports OAuth cannot use a project key through that flow.
Keep the secret in your client’s credential settings. Do not put it in a URL, a prompt, source control, or a shared screenshot. Signing into ReelGrove in a browser does not authenticate an MCP client.
Access
Every key includes projects:read. Choose the additional scopes its task needs. Developer access includes matching read scopes for discipline writes. Whole-game import access (projects:import) includes project read and every Art, Sound, Motion, Math and Frontend read/write scope; existing keys keep their original scopes.
projects:readart:read
Inspect slots and existing image assets without changing bindings.
projects:readsound:read + sound:write
Upload audio, bind cues and set their volume.
projects:readmath:read
Read the available published libraries and their reports.
A key can never grant more access than its creator currently has. Its saved scopes are an upper limit, including for a studio owner. Membership changes and permission reductions take effect on later calls. The capabilities returned by project_context describe this intersection; they do not confirm current trial or paid editing capacity.
Art, Sound and Motion edits and owned-build mutations use the creator’s current editing access and require an active trial or subscription with enough editor capacity. Saving QA scenarios and release candidates uses review comment permission and does not require an editor seat. New capture, browser execution and analysis follow current trial access rules. Retained scenarios, candidates and execution results remain readable after a trial expires, with all their required read permissions.
Reference
The hosted service provides 122 project tools. They cover creative work, exact QA history, profile matrices, read-only readiness assessment, exports, hosted math and browser observations, and explicit project creation, restoration, cloning and kit installation. Current permissions and feature availability are checked on every call.
Run project_context first. Use its project.activeRevision wherever the tool requires expectedActiveRevision or expectedAnchorRevision. Build status and chunk calls use the admission ID returned by their original request. The key selects the project; do not send a game, studio, project, actor, or filesystem path.
| Tool | What it does | Additional scope |
|---|---|---|
project_context | Current project, active revision and effective capabilities. | None |
get_project_clone_context | Read current source and copying availability. | Current actor and source read access |
start_project_clone | Capture the saved source into a distinct reserved project, or recover the exact original request. | Creation/import/export scopes and editing capacity for new captures |
get_project_clone | Recover the original source, destination and copy status. | Current actor and source read access |
list_project_clones | Find at most 50 actor-owned copies or an exact saved request. | Current actor and source read access |
cancel_project_clone | Request guarded asynchronous cleanup of permitted unfinished work. | Current actor and source read access |
get_project_restoration_context | Inspect the portable attachment and exact plan digest of a reserved creation. | Current actor and anchor read access |
start_project_restoration | Explicitly restore the reviewed plan into its reserved destination with a saved request UUID. | Original creation key, complete creation/import scopes and editing capacity |
get_project_restoration | Recover the original destination, plan and status. | Current actor and anchor read access |
list_project_restorations | Find only this actor’s restoration history at the current key’s anchor. | Current actor and anchor read access |
cancel_project_restoration | Request guarded cleanup of permitted unfinished work, including after editing expires. | Current actor and anchor read access |
get_qa_history_usage | Read separate working and retained QA usage and limits. | All five discipline reads |
archive_scenario | Explicitly archive an exact saved scenario, preserving its evidence and references. | All five discipline reads, reviews:comment and current editing capacity |
archive_release | Explicitly archive an exact candidate, preserving reviews and observations. | All five discipline reads, reviews:comment and current editing capacity |
begin_owned_project | Reserve a distinct project from an exact initial contract and TAR identity. | projects:create and the complete import scope set; original key |
write_owned_project_chunk | Upload one verified chunk to the original reservation. | Complete creation/import scopes; original key |
validate_owned_project | Explicitly queue isolated validation. | Complete creation/import scopes; original key |
register_owned_project | Explicitly register the validated source with a separate request UUID. | Complete creation/import scopes for a new registration; original key |
get_owned_project | Read your retained reservation and progress at this authorization anchor. | None |
list_owned_projects | List your creation history or recover one exact request UUID. | None |
cancel_owned_project | Cancel permitted unfinished work with current read access. | None |
create_project_export | Capture a standalone, development or portable archive using one durable request UUID. | projects:export and all five discipline reads |
list_project_exports | Page through your retained exports in this project. | projects:export and all five discipline reads |
get_project_export | Read an exact job and its completed archive hash and byte count. | projects:export and all five discipline reads |
read_project_export_chunk | Download verified chunks with current access checked on every request. | projects:export and all five discipline reads |
cancel_project_export | Cancel your export and revoke further delivery. | projects:export and all five discipline reads |
get_kit_context | Discover kit upload and installation availability and limits. | None |
begin_kit_upload | Begin or recover an exact selected-file kit ZIP upload. | Selected Art, Sound or Motion reads and writes |
write_kit_upload_chunk | Send a verified chunk at the committed decimal-string offset. | Selected discipline reads and writes; original key |
inspect_kit_upload | Verify the complete archive and retain a separate inspection. | Selected and embedded discipline reads and writes; original key |
get_kit_upload | Read your exact upload, progress and retained inspection. | Selected discipline reads |
list_kit_uploads | List your uploads or recover one exact request UUID. | Selected discipline reads |
cancel_kit_upload | Cancel unretained work with verified cleanup. | Selected discipline reads |
plan_kit_installation | Review exact additions, reused media and storage before installation. | Selected and embedded discipline reads and writes; original key |
install_kit | Explicitly confirm the reviewed plan hash using a separate UUID. | Selected and embedded discipline reads and writes; original key |
get_kit_installation | Read your retained installation and exact original plan. | Selected and embedded discipline reads |
list_kit_installations | List your installations or recover an exact planning request. | Selected and embedded discipline reads |
cancel_kit_installation | Cancel unfinished owned work without removing retained Lab assets. | Selected and embedded discipline reads |
list_assets | List image or audio asset metadata; choose assetClass. | art:read for image;sound:read for audio |
read_asset | Read one listed asset as base64, up to 4 MiB. | art:read for image;sound:read for audio |
upload_asset | Upload verified image or audio bytes, up to 4 MiB. | art:write for image;sound:write for audio |
art_slots | Declared artwork slots, bindings and their revisions. | art:read |
sound_cues | Declared cues, mixes and binding revisions. | sound:read |
bind_image | Assign an uploaded image or restore a slot’s build default. | art:write |
bind_sound | Assign audio, set its volume, or restore a cue’s build default. | sound:write |
list_motions | Declared states, supported settings and saved Motion revisions. | motion:read |
set_motion | Save supported Motion settings or restore the build default. | motion:write |
list_animation_revisions | Page through retained project revisions containing animation documents. | motion:read |
list_animation_documents | List document heads in the current or a selected retained revision. | motion:read |
get_animation_document | Read exact native JSON and media provenance, up to 4 MiB. | motion:read and all embedded-media reads |
list_animation_versions | Page through immutable version metadata for one document. | motion:read |
get_animation_version | Read one exact retained document version, up to 4 MiB. | motion:read and all embedded-media reads |
save_animation_document | Save admitted native JSON with its digest, observed sequence and request UUID. | motion:write; media permissions below |
restore_animation_version | Append a new version from retained history without overwriting earlier work. | motion:write and embedded-media reads |
get_animation_save_result | Recover the creator’s exact save or restore receipt by request UUID. | motion:read |
list_animation_scenarios | Inspect source-verified game hooks, declaration hashes and current bindings. | motion:read |
get_animation_binding | Read a current or retained binding and whether its hook remains available. | motion:read |
list_animation_binding_versions | Page through immutable set and clear history for a hook. | motion:read |
set_animation_binding | Pin a saved version and clip or mix to an exact source declaration. | motion:write and selected-media reads |
clear_animation_binding | Append an explicit clear while retaining binding history. | motion:write |
get_animation_binding_save_result | Recover the creator’s exact set or clear receipt. | motion:read |
list_math_libraries | Published math available in this project revision. | math:read |
math_report | Outcome weights and report evidence for a published variant. | math:read |
calculate_math | Return, variance, sample size, hits, streaks, exposure, wagering and cash-flow calculators. | math:read |
compare_math_modes | Compare published variants and modes within this project revision. | math:read |
simulate_math_sessions | Reproducible session simulation from exact project weights or an uploaded CSV. | math:read |
analyze_bet_archive | Analyze a submitted CSV or JSON bet archive in one currency. | math:read |
verify_math_seed | Check a revealed MGRGS seed commitment and draw; this is not a generic slot verifier. | math:read |
get_engine_tracker | Search all tracked games and providers, including artwork URLs and activity statistics. | math:read |
search_engine_games | Search public live-game catalog and version metadata. | math:read |
find_scenario_outcomes | Search current published books by zero payout, inclusive payout range, published maximum or exact recorded event type. | Art, Sound, Motion, Frontend and Math read |
list_scenarios | List saved QA scenarios and independently stale source, math and creative inputs. | Art, Sound, Motion, Frontend and Math read |
get_scenario | Read a saved scenario and its exact original event trace. | Art, Sound, Motion, Frontend and Math read |
capture_scenario | Save a published outcome with server-derived source, asset, cost and payout commitments. | All five discipline reads, plus reviews:comment |
prepare_scenario_carry_forward | Inspect an exact saved expectation against a selected current outcome and profile without saving. | All five discipline reads, plus reviews:comment |
carry_forward_scenario | Save the freshly rechecked target and immutable parent link using the reviewed plan digest. | All five discipline reads, plus reviews:comment for new saves |
list_regression_suites | List each named suite’s current saved version. | Art, Sound, Motion, Frontend and Math read |
list_regression_suite_versions | Page through the immutable history of one suite. | Art, Sound, Motion, Frontend and Math read |
get_regression_suite | Inspect an exact version, its selected scenarios and stale inputs. | Art, Sound, Motion, Frontend and Math read |
save_regression_suite | Save a new suite version with 1–32 exact scenario references and stable case keys. | All five discipline reads, plus reviews:comment for new saves |
capture_regression_suite_release | Capture a candidate from an exact suite version whose expectations match current inputs. | All five discipline reads, plus reviews:comment for new captures |
list_readiness_policies | Discover current immutable readiness policies. | Art, Sound, Motion, Frontend and Math read |
list_readiness_policy_versions | Page through the retained versions of one policy. | Art, Sound, Motion, Frontend and Math read |
get_readiness_policy | Inspect an exact policy and its verified regression suite. | Art, Sound, Motion, Frontend and Math read |
assess_release_readiness | Recompute readiness from explicitly selected observations and optional prior human assertions. | Art, Sound, Motion, Frontend and Math read |
get_readiness_review | Verify one original human decision and its exact evidence; show current staleness separately. | Art, Sound, Motion, Frontend and Math read |
list_readiness_reviews | Page through verified human decisions for one candidate. | Art, Sound, Motion, Frontend and Math read |
list_profile_matrices | Discover current named matrix versions. | Art, Sound, Motion, Frontend and Math read |
list_profile_matrix_versions | Read immutable version history for one matrix. | Art, Sound, Motion, Frontend and Math read |
get_profile_matrix | Inspect one exact saved profile/action definition. | Art, Sound, Motion, Frontend and Math read |
save_profile_matrix | Save 1–32 explicit combinations against the exact current head. | All five discipline reads, plus reviews:comment for new saves |
prepare_profile_matrix_expansion | Review every exact selected outcome times every saved combination, at most 32 cells. | Art, Sound, Motion, Frontend and Math read |
capture_profile_matrix_expansion | Save all reviewed cells and one ordinary suite version atomically. | All five discipline reads, plus reviews:comment for new captures |
get_profile_matrix_expansion | Read an exact captured matrix, source provenance and all current stale markers. | Art, Sound, Motion, Frontend and Math read |
list_profile_matrix_expansions | Page through complete retained captures for one matrix. | Art, Sound, Motion, Frontend and Math read |
begin_owned_build | Begin or recover an exact prepared TAR upload for this existing owned project. | projects:import and all discipline reads/writes |
write_owned_build_chunk | Upload one verified chunk, at most 1 MiB, at the committed offset. | projects:import and all discipline reads/writes |
get_owned_build | Read admission, upload progress and validation status. | None |
validate_owned_build | Explicitly queue isolated structural and math validation. | projects:import and all discipline reads/writes |
cancel_owned_build | Cancel an unretained admission when no unfinished activation uses it. | None; admission actor or studio owner required |
activate_owned_build | Explicitly preserve the current Lab revision and activate a validated build. | projects:import and all discipline reads/writes |
get_owned_build_activation | Read an owned build’s activation result, including completed retries. | None |
capture_release | Capture current inputs, requirements and up to 32 matching saved scenarios for review. | All five discipline reads, plus reviews:comment |
list_releases | Page through retained candidates and their stale inputs. | All five discipline reads |
get_release | Read exact candidate evidence and historical human decisions. | All five discipline reads |
start_release_execution | Freeze a candidate and queue its selected scenarios for isolated browser observation, when enabled. | All five discipline reads, plus reviews:comment |
list_release_executions | List retained browser runs for one candidate. | All five discipline reads |
get_release_execution | Read execution status and verified observation receipts. | All five discipline reads |
compare_release_observations | Compare two exact retained runs, including earlier revisions, with input, event, payout and screenshot pixel differences. | All five discipline reads |
cancel_release_execution | Stop unfinished work while retaining completed observations. | All five discipline reads, plus reviews:comment |
retire_release_execution | Request removal of execution files after cleanup; immutable identities remain. | All five discipline reads, plus reviews:comment |
find_math_experiment_outcomes | Search exact retained generated books by zero payout, inclusive range, maximum or recorded event, before promotion. | math:read |
math_experiment_context | Inspect exact owned source inventory, modes and enabled execution profiles. | math:read |
submit_math_experiment | Run explicitly reviewed source with a fixed seed and bounded resources, when enabled. | math:write and current editing capacity |
get_math_experiment | Read retained status and independently validated report bytes. | math:read |
list_math_experiments | List retained experiment history for this project. | math:read |
compare_math_experiments | Compare two validated distributions using exact probabilities and rational deltas. | math:read |
get_math_build_receipt | Read exact native build evidence and its SHA-256 from a retained completed job. | math:read |
compare_math_build_receipts | Compare selected bytes, measured recipe and outputs of two retained builds; only distinct eligible observations can establish that two clean runs matched. | math:read |
cancel_math_experiment | Cancel work and request guarded result removal. | math:read; submitting actor or studio owner |
promote_math_experiment | Prepare a result as an ordinary owned build for independent validation and separate activation. | projects:import, all discipline reads/writes and current editing capacity |
cancel_math_promotion | Cancel unfinished build preparation and its incomplete upload. | math:read; submitting actor or studio owner |
Discovery describes the tool contract. Hosted math and browser execution require separately enabled workers; a listed tool does not confirm installation availability or permission. Source inventory paths are returned by the server and can only select files inside the retained owned project.
Workflows
These are prompts you can give your connected assistant, followed by example MCP tools/call parameters. They are tool calls, not client configuration files.
Identify the project this key belongs to. List its artwork slots and current image assets. Tell me which images are replaced. Don’t change anything.
{
"name": "project_context",
"arguments": {}
}Read project.activeRevision from the result. The UUID below is illustrative: replace it with that exact value. Slot and cue names must come from the current registry.
{
"name": "art_slots",
"arguments": {
"expectedActiveRevision": "11111111-1111-4111-8111-111111111111"
}
}Then call list_assets with the same revision and assetClass: "image". Use a returned assetId to read or bind an asset.
Read the current circle binding, upload the supplied PNG, replace that slot using the latest observed revision, then reread to confirm. Stop on a conflict.
upload_asset takes assetClass, filename, base64 data, and its matching lowercase SHA-256 in sha256, plus the active revision. Uploading makes an asset available; bind_image assigns it to a declared slot.
For a replacement, send the returned assetId. For a restore, use restoreDefault: true instead. The example assumes the current registry declares circle at binding revision "3":
{
"name": "bind_image",
"arguments": {
"expectedActiveRevision": "11111111-1111-4111-8111-111111111111",
"slot": "circle",
"expectedRevision": "3",
"restoreDefault": true
}
}People watching the project’s Lab, or returning to it in the same browser, see slots saved with your key marked Changed elsewhere in Art Lab, with a time, until they open the slot or choose Mark all seen. The Lab does not say whether a person or an agent made the save. With Auto preview on, the saves apply to an open Lab’s running preview on builds that support live updates; the Lab never restarts the game for them. A saved bind does not prove the game draws the image, so ask a person to check the preview. In the Lab, Copy brief gives your assistant a starting point for up to 60 shown slots, with their sizes, binding revisions and these argument names.
Inspect the spin cue and its current audio. Keep the same take, set its gain to 45%, and confirm the saved binding. Stop if another person changes the cue first.
Call sound_cues, then bind_sound with cue, the existing assetId, the observed expectedRevision and integer volumePpm: 450000. The range is 0–1,000,000; one million means full volume. Omitting volumePpm uses the cue’s declared default gain, so send it explicitly when preserving a mix. It cannot accompany restoreDefault.
Read the circle slot’s supported Motion settings. If its idle state allows this, save a gentle 1-second bob at intensity 550, with sineInOut easing and looping. Use the current saved revision. Tell me what changed and how to sample it in Art Lab.
Start with list_motions. Each build declares its own supported presets, timing and intensity limits. This example only applies when the returned idle capabilities permit these settings:
{
"name": "set_motion",
"arguments": {
"expectedActiveRevision": "11111111-1111-4111-8111-111111111111",
"slot": "circle",
"state": "idle",
"expectedRevision": "0",
"settings": {
"preset": "bob",
"durationMs": 1000,
"intensity": 550,
"easing": "sineInOut",
"loop": true
}
}
}A successful save confirms persisted settings. To check rendering, open the project’s Art Lab and sample the saved Motion state. The MCP save itself does not prove that an animation rendered.
List the published math libraries and summarize the default variant’s theoretical return, outcome weights and evidence gaps. Separate what the report measures from anything it does not prove.
{
"name": "math_report",
"arguments": {
"expectedActiveRevision": "11111111-1111-4111-8111-111111111111"
}
}Call list_math_libraries first. For another published variant, add its exact name as variant. Omitting it, or sending an empty string, selects the default. A report does not certify game-event correctness or external platform approval.
QA review
Give the key projects:read, art:read, sound:read, motion:read, frontend:read and math:read to inspect scenarios. Add reviews:comment to save one. This does not use an editor seat.
Call capture_scenario with the active revision, a fresh requestId UUID, a short name, the exact published mode and decimal-string bookId. Add variant for a named math variant and profile for expected dimensions, currency, language, reduced motion and ordered actions.
ReelGrove reads the published outcome and computes the source and creative commitments. Saving records an expectation; it does not execute the browser or approve a game. After a timeout, retry the exact UUID and payload to recover the saved receipt. Reusing the UUID with changed arguments conflicts.
list_scenarios returns up to 50 records and a nextOffset for paging. Use get_scenario with a returned scenarioId to read exact original events and current stale components. An older trace remains reviewable after a reset; it is not evidence that the current game passed QA.
Select a regression case
Call find_scenario_outcomes with the current expectedActiveRevision, published mode, optional variant and one explicit kind. It uses the same outcome finder as the workspace, with project read and all five discipline reads. Search remains available after editing expires; canCapture separately reports current capture access.
SCENARIO_OUTCOME_KIND_LOSS: payout is exactly zero.SCENARIO_OUTCOME_KIND_PAYOUT_RANGE: supply inclusive minPayoutX100 and maxPayoutX100 as decimal strings. For 5× through 100× base stake, use "500" and "10000".SCENARIO_OUTCOME_KIND_MAXIMUM: the largest published payout, including records with zero draw weight.SCENARIO_OUTCOME_KIND_EVENT: supply an exact recorded eventType. Names do not establish feature behavior.Send only the fields for your selected filter. Each page contains at most 32 numeric-ID-ordered summaries with exact string IDs, payouts and draw weights, plus book hashes and event counts. Zero-weight records are not drawn by weighted selection; you can still choose one explicitly for replay review.
To continue, copy nextAfterBookId into afterBookId and copy mathSha256 into expectedMathSha256, preserving the same filter and revision. The hash is required for continuation. Start a new search if published math changes. Keep IDs and payout bounds as strings, including values above JavaScript’s safe integer range.
{
"expectedActiveRevision": "CURRENT_REVISION_UUID",
"mode": "base",
"kind": "SCENARIO_OUTCOME_KIND_MAXIMUM"
}studioctl -url YOUR_PROJECT_MCP_URL -key-file /private/project.key \
call find_scenario_outcomes -args-file outcomes.jsonSearching does not save a scenario, open a preview or run a game. Explicitly call capture_scenario with a selected mode, variant and book ID after reviewing its name and browser profile. Capture reads the current book again; the search response is not a frozen expectation or browser evidence.
Regression workflow
Read the original with get_scenario, then call prepare_scenario_carry_forward with its sourceScenarioId and exact sourceScenarioSha256, the current expectedActiveRevision, a target name, published mode and bookId, and optional variant and profile. The server reads the current book independently; an old outcome identifier does not promise the same events in new math.
Inspect the returned plan and exact target eventsJson. Input changes, event positions, payout, selection and profile comparisons are separate. Equal payouts can still have different symbols or feature events. The plan always records browserEvidence: "not_recorded".
To retain the expectation, call carry_forward_scenario with that exact preparation request inside target, a new durable requestId UUID and the plan’s sha256 as reviewedSha256. The server checks the target again before saving both the new scenario and its parent link. Changed inputs require a fresh review; the original remains unchanged.
After a lost reply, retain the UUID and identical arguments. If the active revision changes, use get_scenario with the request UUID as scenarioId and the current revision to recover a historical save. An absent receipt does not prove an outstanding request cannot commit. Completed identical requests remain recoverable after review permission or editor capacity expires, provided all current read scopes still apply. New saves require current review access and available studio resources.
The saved scenario is an expectation for a later release execution. It does not prove the new build passed, create named suite membership, or approve a release. The account QA workflow provides the same review and retained history.
Repeatable QA
Use list_regression_suites to find each suite’s current head, list_regression_suite_versions to follow its nextOffset history, and get_regression_suite with an exact suiteId and versionId to inspect its definition and each case’s stale inputs. Keep the current expectedActiveRevision on every call, including historical reads.
save_regression_suite takes a suiteId, a new durable requestId, name, optional multiline description, and 1–32 cases. Each case contains a short stable key, an exact saved scenarioId and its lowercase scenarioSha256. Case keys and scenario selections must be distinct. For a new suite, omit both expectedVersionId and expectedVersionSha256; later saves must supply both values from the current head. Every save appends an immutable version.
To capture a candidate, call capture_regression_suite_release with the chosen suiteId, versionId, versionSha256, a new durable requestId, title and optional multiline requirements. Every case must still match current inputs. Changed expectations need reviewed replacement scenarios and a new suite version. A captured candidate remains linked to its original version even after later suite edits.
New saves and captures require all five discipline reads, reviews:comment and current trial resource access, without an editor seat. Retry an uncertain operation with its exact original UUID and arguments; a changed body conflicts. Completed exact retries and history remain available after trial expiry or comment permission removal while all current reads still apply. After a project revision changes, recover a saved version using its request UUID as versionId, or a candidate using get_release, with the current revision.
Suite capture saves expectations. Start native observations separately with start_release_execution using the returned release ID and candidate digest, then inspect or compare the retained results. Saving a suite or candidate never creates a browser pass, human release decision or Engine approval.
Complete regression coverage
The matrix workflow saves explicit viewport, currency, language, reduced-motion and ordered-action combinations. It applies every combination to every exact selected saved outcome, with a maximum of 32 cells. A matrix records expectations; an isolated browser run supplies observations.
Use save_profile_matrix with a durable matrixId, requestId, name and 1–32 combinations. Each contains a stable key and a scenario profile. Preserve the action array’s order. For later versions, send both observed expectedVersionId and expectedVersionSha256; previous versions remain unchanged.
Call prepare_profile_matrix_expansion with that exact matrixId, versionId, versionSha256, a new durable requestId and selected outcomes. Each outcome has a stable key, original scenarioId and scenarioSha256. Repeated captures also pin both current expectedSuiteVersionId and expectedSuiteVersionSha256. Inspect every returned cell and its original provenance.
Send the unchanged prepared request as target and its plan digest as reviewedSha256 to capture_profile_matrix_expansion. Every case and one suite version are saved together. Use that returned version with capture_regression_suite_release, then start its execution separately. There is no automatic run, math promotion or human approval.
Keys use up to 31 lowercase letters, numbers, underscores or hyphens. Changed original inputs must first be reviewed through scenario carry-forward. Too many cells, stale outcomes or unsupported runner profiles reject the complete preparation; no cells disappear silently. The runner currently accepts replay, wait:complete, skip and turbo in the saved order, with viewports up to 4096 pixels per dimension. Actual game support is checked during each isolated run, where unsupported controls remain explicit failed results.
All operations require project and every discipline’s read access. New versions and captures also need reviews:comment and current studio resources, without an editor seat. Retained reads and exact completed retries remain available after resource expiry under current key authority. Keep the original request UUID and body after an uncertain reply; read its exact version or expansion before another mutation. Human decisions remain in the account workflow.
new owned projects
Explicit projects:create access lets a key on an existing project upload an initial-contract TAR, request isolated validation and register a distinct new project. It requires the complete import scope set and current editor access. Existing import keys keep their original scopes.
The selected project is the authorization anchor. Its source stays unchanged, and the key gains no ordinary access to the destination. Issue a separate destination key in Developer access for later automated editing. Portable restoration adds a separate explicit plan review below; machine cloning uses a separate explicit capture.
Call project_context first and send its current revision as expectedAnchorRevision. Keep the begin request UUID, exact archive and returned admission ID; use a separate UUID for explicit registration. A later anchor edit can change this authorization precondition on an exact retry without changing the original reservation. Same-actor replacement read keys can inspect or cancel permitted work and recover completed registration; unfinished writes require the original key.
The studioctl owned-project workflow saves private retry receipts before new effects. Upload never validates or registers automatically.
explicit portable restoration
Prepare a portable archive, upload its TAR through owned-project, and validate it. get_project_restoration_context returns its exact archive and plan digests. Start only with the reviewed planSha256 and a separately saved request UUID; the worker verifies the complete capsule before copying.
All five calls use the current expectedAnchorRevision. The original creation key owns new effects; a replacement read key for the same actor and anchor can recover or request permitted cleanup. A changed anchor revision never recaptures the destination. Imported reviews remain unattested, and later automated editing needs a separately issued destination key.
Use the CLI inspection, explicit start and status commands. Inspection and polling never start work automatically. Keep both receipts after an uncertain response.
copy saved work
start_project_clone copies the current saved source and Lab state into a different project in the same studio. Supply the current expectedActiveRevision, immutable sourceRevision, name and saved request UUID. New captures require creation, import and export scopes with current editing capacity. A context read starts no work.
Keep the source revision, name and request UUID after an uncertain reply. On an accepted retry, use the current authorization revision while preserving the original source revision. The result returns the same captured build and destination. A changed semantic request is refused; recovery never silently copies a newer source.
The original key owns unfinished effects. A same-actor replacement read key can recover accepted history and request permitted cleanup, including after editing expires. The destination needs its own separately issued key. Imported history grants no destination approval. Use the durable clone CLI workflow.
reusable creative work
Twelve scoped tools bring the existing Studio kits workflow to MCP. The key selects one existing project; every call names its current revision. Selected artwork, sound and animations use their matching permissions, including media embedded in animation documents.
get_kit_context, then persist the exact ZIP hash, decimal byte count, selected inventory paths and a request UUID before begin_kit_upload.inspect_kit_upload.plan_kit_installation. Review the exact added or reused media, fresh animation identities and storage charge.planSha256 with a separate persisted UUID through install_kit. Refresh the Lab, inspect playback and configure bindings explicitly.Get and list tools recover your original receipts; list calls accept either a cursor or the exact planning/upload request UUID. A lost response keeps the same request, archive and plan. Upload and plan deadlines remain 30 minutes, including rate-limit pauses. Completed and expired receipts remain readable with current permissions after editing expires.
Continuing work requires its original live key. A replacement key for the same actor and project can read or cancel authorized history, but cannot adopt an upload or installation. Completed installations and restored review holds stay protected. Imported content remains an unverified source claim; installation creates no bindings, rendered-pass result or release approval.
project archives
Export tools use a key with projects:export, project read and Art, Sound, Motion, Frontend and Math read access. Existing keys keep their original permissions. Each operation stays within the key’s project and its creator’s own export history.
Call create_project_export with the current expectedActiveRevision, a new durable requestId and kind: PROJECT_EXPORT_KIND_STANDALONE, PROJECT_EXPORT_KIND_DEVELOPMENT or PROJECT_EXPORT_KIND_PORTABLE. Repeat the same request after an uncertain response. Poll get_project_export using the returned exportId until it is ready.
studioctl -url YOUR_PROJECT_MCP_URL -key-file /private/project.key \
export download -export-id EXPORT_UUID -expected-revision CURRENT_REVISION_UUID \
-output /private/project-backup.zipThe CLI verifies each chunk and the complete archive’s SHA-256 before creating the destination file, and never overwrites an existing file. It pauses and retries the same read when admission is busy. Downloads allow 30 minutes by default, with an explicit timeout up to one hour. Archives are limited to 2 GiB and expire after 24 hours; job history lasts seven days. A reset or newly activated revision prevents downloading a capture from the previous revision. Download before switching builds.
Revoking or expiring the requesting key stops its unfinished export work. A new authorized key can recover its creator’s retained history without replacing the original request. cancel_project_export revokes delivery; storage cleanup can finish later. This scope grants no project creation, restoration, kit installation or release approval.
Readiness and CI
Six read-only tools connect the account’s structured readiness policies and human reviews to your assistant and CI. They require project read plus Art, Sound, Motion, Frontend and Math read access. Editing access can expire while those authorized historical reads remain available.
Discover policies with list_readiness_policies, follow list_readiness_policy_versions, and inspect an exact versionId with get_readiness_policy. The returned suite is the version selected by that policy. Use get_release and get_release_execution to inspect a candidate and its observed runs.
assess_release_readiness takes the current expectedActiveRevision, exact releaseId and candidateSha256, and an explicit observations array. Select up to 32 distinct runs using each executionId, runId and lowercase receiptSha256. An empty array records missing observations. The tool never chooses a passing run automatically.
Optionally supply retainedReviewId to reuse the original human assertions for this same candidate. The server verifies that review and its evidence first. Omit it to leave human requirements unrecorded. Machines cannot supply their own requirement resolutions, browser verdicts, exceptions or approval. Use get_readiness_review and list_readiness_reviews for immutable decisions and separate current stale markers.
studioctl -url YOUR_PROJECT_MCP_URL -key-file /private/project.key \
call assess_release_readiness -args-file readiness-selection.json > readiness-result.jsonStop CI on a command error. A successful call can still return report.ready: false: inspect that field and every reported check. Keep the exact selection, report and its SHA with your build artifacts. A human exception preserves the failed check, so it cannot pass a strict all-checks-pass gate. Policy changes and human decisions stay in the account review workflow; a computed ready report creates no studio or Engine approval.
Animation workflow
Use list_animation_documents and get_animation_document to inspect the exact saved native document. list_animation_revisions discovers retained revisions; pass a returned UUID as projectRevision while keeping the current expectedActiveRevision. Follow nextCursor on history lists.
To save, send documentId, base64 native json, its lowercase sha256, the observed expectedSequence as a decimal string, and a new durable requestId UUID. Explicit "0" creates the first head. Native document validation still applies to documents up to format version 13, including tint, dark colour, blend modes, clip loop and tags, and event values; use Animation Lab to author visually and inspect the result. A rejected document returns invalid_argument with an issue naming the first fault’s JSON path (for example animations[0].tracks[3].keys[2].easing), reason code, message and any suggestion. Nothing is saved; fix that field and save again.
Every embedded image needs art:read, and every embedded sound needs sound:read, including unused assets. Introducing new bytes also needs that discipline’s write scope. Existing authorized media can be preserved; an optional mediaClaims entry can select exact project Lab bytes using mediaId and labAssetId, or exact retained media using documentId, versionId and mediaId inside retained. Claims never grant permission or authorize changed bytes.
Run list_animation_scenarios to discover the game’s declared animation hooks. These hooks are separate from saved QA scenarios. set_animation_binding requires the exact document version and digest, current declaration and source hashes, the observed binding sequence, and an explicit clip or mix selection. Send sound: false for silent playback; enabling sound requires Sound read permission. Later document edits do not retarget an existing binding.
Save, restore, set and clear operations append history. After an uncertain reply, keep the same request UUID and identical inputs, or query get_animation_save_result / get_animation_binding_save_result. The receipt distinguishes the originally applied version from the current head. A missing receipt does not prove an outstanding request cannot commit. Reads and your retained receipts remain accessible after editor capacity expires; mutation retries still require current editing authority.
Native JSON reads and saves through MCP are limited to 4 MiB; metadata for larger saved documents remains available. Use Animation Lab for larger bodies. A saved document or binding does not prove that a game rendered it: inspect the preview and capture the relevant outcome evidence separately.
The project-key animation file commands transfer native documents up to 24 MiB without an account session. They preserve the editor’s permission checks and exact save receipts. Inline MCP keeps its 4 MiB limit.
exact retained evidence
These three tools use the same service as the account archive controls. get_qa_history_usage returns project and studio working counts, retained counts and exact decimal byte usage. Archiving frees working capacity; it does not delete records, free retained storage or create an approval.
Read the selected record first. Persist a new requestId UUID and the full request before calling archive_scenario with scenarioId and scenarioSha256, or archive_release with releaseId and candidateSha256. Both require the current expectedActiveRevision, every evidence read capability, reviews:comment and effective editing capacity. The key fixes the studio and project; the receipt identifies its real human actor.
Retry only the same UUID and exact body after an uncertain reply. A completed retry remains readable after editing expires. If the active revision changes, use get_scenario or get_release with the current revision and compare its summary.archive to the original request, actor and digest. Do not replace the saved request’s revision or create another archive automatically.
The history filter on list_scenarios and list_releases accepts QA_HISTORY_SELECTION_ACTIVE, QA_HISTORY_SELECTION_ARCHIVED or QA_HISTORY_SELECTION_ALL. Omission keeps complete history. Follow nextOffset through pages of at most 50; scenario offsets are bounded at 4096 and release offsets at 2048. Archived records retain their exact identity, stale-input information, books, human decisions and suite membership.
Connected review
Use capture_release with expectedActiveRevision, a durable requestId, a short title, optional multiline requirements and up to 32 distinct scenarioIds. Every selected scenario must match the current source, math and creative inputs. The server captures those commitments; the client cannot supply an approval or replace their hashes.
Retry the exact UUID and body after an uncertain response. Read list_releases with optional offset, then get_release with the returned releaseId. A changed input marks old evidence stale while preserving its history. The account shows the same candidate and historical human decisions. Human approval and requests for changes stay in the account review workflow.
Optional workers
These tools require enabled hosted workers. A candidate's executionAvailable and the result of math_experiment_context report installation availability. Your key and current membership are checked independently on every operation. Local browser QA and math commands remain available for local workflows.
Pass the exact releaseId, candidateSha256, active revision and a new durable requestId to start_release_execution. Keep these arguments until the receipt is known. List and inspect the resulting executions to distinguish observed passes or failures from interrupted infrastructure. Your frontend needs the documented observer integration; unsupported controls fail the check. This observation does not grant human or Engine approval.
Use compare_release_observations with the current expectedActiveRevision and explicit baseline and target selections. Each selection contains the exact executionId, runId and receiptSha256 returned by get_release_execution. Both runs must belong to this project and retain their verified artifacts; you may compare observations from earlier revisions after a new build becomes active.
The comparison reports changed input commitments, expected and observed event positions, payout differences, pass/fail direction and screenshot pixel counts. It identifies whether replay conditions match and marks each side stale against the current project. Different dimensions or screenshots beyond the pixel budget have an explicit unavailable pixel-diff status. Differences describe observations; they do not establish a cause, carry a scenario forward to a new build, or grant approval. All five discipline read scopes are required. Retained observations remain comparable after paid or trial editor capacity expires, while current membership and key access still apply.
Cancellation preserves completed observations. Retirement requests file removal after containers have stopped; receipt identities remain. Use the account review screen for screenshots and larger evidence files. Account download URLs are not project-key capabilities.
Build receipt comparisons are a separate workflow.
Start with math_experiment_context. Select exact listed source files, an available profile, Python commands, a seed, time/output limits and mode costs with optional RTP or hit-rate targets. Submit the reviewed specification with inputsReviewed: true, its exact sourceSha256, active revision and a durable UUID. Workers run without network access; dependencies must already exist in the selected profile or reviewed source.
The optional pinned Engine Math SDK profile supplies Python generation dependencies and source-path helpers. Use it only when the context lists it; the standard-library profile remains a separate choice.
find_math_experiment_outcomes reads up to 32 exact generated books per page. Supply the retained jobId, expectedOutputSha256, expectedReportSha256, generated mode, optional variant and the same explicit outcome filters used by find_scenario_outcomes. Keep both hashes on continuations with afterBookId. Search requires current Project and Math read access and remains available after paid editing expires. It creates no preview or build. Frozen replay opens only through the account’s Math experiments controls.
Read the retained experiment and independent validation report before comparing results. Keep decimal strings and rational values exact. MCP responses are bounded to 8 MiB; the account handles larger reports. An explicit promote_math_experiment request prepares an ordinary owned build. Review its validation and activate it separately: neither a successful experiment nor promotion changes the active game automatically.
native build evidence
get_math_build_receipt accepts only a retained jobId and returns canonical JSON bytes, their SHA-256 and the recorded limitations. compare_math_build_receipts takes beforeJobId and afterJobId from the same project and returns both receipt hashes plus separate subject, recipe, selected-byte, output-byte and independent-run checks. Both need current Project and Math read access, including on historical revisions; editing capacity is not required.
The separately enabled python313-normalized-v1 profile measures fixed input metadata and its actual toolchain before each isolated phase. Only two distinct eligible native runs with matching inputs, recipe, toolchain and output can state two clean runs matched. That statement does not guarantee future determinism or approve a game. Legacy, SDK and optimizer observations retain their original limitations.
Imported JSON, equal submitted hashes and repeated use of one job cannot create native evidence. The tools accept no uploaded receipt or trust flag. A canceled or removed result cannot issue a new receipt. MCP responses remain bounded to 8 MiB. The workspace view supports larger receipt downloads. See the CLI examples; ordinary compare_math_experiments continues to compare distributions.
Research
The seven research tools accept expectedActiveRevision and an input object. The discovered schema describes each input and its decimal-string units. Published comparisons and simulations can only read the project selected by your key.
{
"name": "get_engine_tracker",
"arguments": {
"expectedActiveRevision": "11111111-1111-4111-8111-111111111111",
"input": {"ranking": "games", "period": "past30Days", "sort": "turnover", "query": "Waylanders", "limit": 20}
}
}The tracker includes every source-tracked game, with search, provider filtering and optional pagination. Missing statistics and artwork remain null. Turnover uses USD micro-unit strings; RTP is source-declared. imageUrl and thumbnailUrl reference public artwork. Cached snapshots include source and freshness information; updates are normally checked every 15 minutes.
Submitted archives and lookup CSVs are limited to 4 MiB through the customer API, within an 8 MiB total request. Browser imports run locally and support up to 32 MiB. Simulations run at most 2 million rounds. Private inputs are not logged or saved. These tools model test outcomes and never place bets or modify project files.
Working together
expectedActiveRevisionproject_context. A project reset changes it. Refresh the context and inspect the new state before continuing.expectedRevisionart_slots, sound_cues or list_motions. Send it as a decimal string, including "0" when that is the observed value.If a teammate edits the same binding, the older write is rejected with aborted. Reread the current value, compare the changes and decide what to save. Do not automatically resend with an incremented revision.
After a timeout, cancellation or an unconfirmed response, a change may already have been saved. Read the current state before trying again. The client should inspect MCP isError and the structured code and message; an error is not a successful tool result.
Use restoreDefault: true with the observed binding revision. Do not send null, an empty asset ID, or both an asset and a restore operation. Motion likewise accepts either settings or restoreDefault: true.
Credentials
You can have up to 5 active keys per user and project. Keys do not add paid seats; creating more keys cannot increase your permissions or editing capacity.
When something needs attention
unauthenticatedCheck the exact endpoint from Developer access and the Authorization: Bearer … header. Check expiry and revocation. Browser cookies, query tokens and X-API-Key do not authenticate this endpoint.
permission_deniedCheck both the key’s scopes and the creator’s current studio membership and permissions. The server also checks any supplied Origin. Reconnecting cannot expand a key’s saved scopes.
failed_preconditionFor writes, check the studio subscription and confirmed editor capacity. Read the message: a required Lab or math-report service may also be unavailable in this deployment.
abortedReread project context and the affected binding. A project reset or another edit can make the supplied revision stale. Review the new state before saving again.
invalid_argument / not_foundUse the discovered camelCase schema, exact registry slot or cue, and an asset ID from this project revision. Check data hashes, image formats and the build’s Motion bounds. Unknown, duplicate, null and missing required fields are rejected.
resource_exhaustedA request, upload, key or storage limit was reached. Read the message, wait if the service is busy, or use the Lab for a file above the MCP size limit. Retrying cannot bypass a storage limit.
unavailable, deadline_exceeded or canceledTreat a mutation as unconfirmed. Inspect the current binding before another deliberate action. For reads, retry when the service is available.
Product scope
Asset reads and uploads through MCP are limited to 4 MiB per file. Images support PNG, JPEG and WebP; SVG uploads are not supported. Audio supports WAV, MP3, OGG, FLAC, M4A and AIFF. Files still undergo the Lab’s format and storage checks. Use the Lab UI for supported larger files.
list_motions and set_motion edit the build’s declared idle and win presentation states. Supported presets are pulse, bob and tilt, with linear, sineInOut or quadOut easing; individual states may allow only a subset and impose tighter bounds. The separate animation-document tools read and save native timeline and rig data and bind exact versions to declared game hooks.
When owned projects are enabled, MCP supports prepared TAR uploads, isolated validation and explicit revision activation for the key’s existing owned project. Create the initial project in the account or use scoped initial creation through MCP with explicit creation access. The studioctl download provides owned-build upload|status|validate|cancel|activate commands with durable retry receipts; upload never activates automatically. Keep the same receipt and archive after an uncertain response. A revoked or expired admitting key stops new queued effects.
The customer MCP endpoint supports scoped asset and animation edits, prepared builds, retained review evidence and explicitly enabled math and browser workers. It does not generate images or audio, edit repository source, run arbitrary build commands, operate real-money games, publish to Engine, or manage keys, teams and billing. Human review remains a separate account action. Validation and browser observations do not grant Engine approval.