Have more questions? Join our Discord

Upload local files

Use create_upload for local source files, artwork, sounds, and marketing images that are too large to pass inline. Compute each file's SHA-256 and byte length from the same file you will upload:

shasum -a 256 AbyssalPredator.png
wc -c < AbyssalPredator.png

Call create_upload with the game's gameDefinitionId, sha256, byteLength, and target: { type: "art", key: "AbyssalPredator" }. Read the returned uploadUrl, then upload the unchanged file:

curl --data-binary @AbyssalPredator.png \
  -H 'Content-Type: application/octet-stream' "$UPLOAD_URL"

Follow create_upload's description for limits, expiration, retries, and the other destinations. Each file needs its own URL. Keep signed URLs out of logs. The answer uses the same MCP envelope as upload_art: read content[0].text and check isError.