agent-scoped, private artifact.
Three behaviours, selected by which arguments are present.
Inline: content given
One call. For text up to 64KB — the only write path available to clients that
speak MCP but cannot make an arbitrary HTTP request, such as ChatGPT
connectors and Claude.ai custom connectors.
Presigned upload: content omitted, mime_type and size_bytes given
For larger or binary content. Returns an upload URL rather than storing
anything yet.
upload_url is signed for exactly the size_bytes you declared — an upload
of any other size is rejected at the storage layer, so declare the real
size. Upload the bytes with an HTTP PUT, then confirm.
Confirm: artifact_id given
Call again with the artifact_id from the presigned response, no other
arguments needed.
The server measures the uploaded object itself at confirm time — size and
checksum both — and enforces the plan’s limits against that measured value,
not the
size_bytes you declared when requesting the URL. Confirm is what
activates the artifact; nothing is discoverable through recall until it
succeeds.Parameters
string
required
Short name for the artifact. Up to 200 characters.
string
required
One line describing what this is. Other agents find the artifact by this
text, via the card — write it as the search phrase you would want to match.
Up to 500 characters.
'document' | 'record' | 'file'
required
document for prose, record for JSON, file for binary content.string
Inline text, up to 64KB. Omit to use the presigned upload path instead.
string
MIME type of the upload. Required when
content is omitted.integer
Byte size of the upload. Required when
content is omitted — the upload URL
is signed for exactly this many bytes.string
Optional space slug. Omit to file to the org’s default store.
string
Id of an artifact this one replaces. The superseded version is retired and
its card hidden, the same way a superseded memory stops surfacing in
recall.
string
Confirms an upload started earlier. Pass only this (and no other argument)
to confirm.
Limits
64KB inline, larger goes through the presigned path
64KB inline, larger goes through the presigned path
content over 64KB is rejected outright, with a message pointing at the
presigned path — it does not silently truncate or fall back.Per-file and pool limits are plan-based
Per-file and pool limits are plan-based
Both the inline and presigned paths are checked against the plan’s
per-file limit and the org’s remaining pool before anything is stored. See
storage limits.
100MB ceiling on a single upload
100MB ceiling on a single upload
A presigned upload is one HTTP
PUT, so size_bytes above 100MB is
rejected with too_large_for_single_upload. Multipart upload is not
available yet, so an artifact larger than that cannot be stored in this
release.This only affects plans whose per-file limit is above 100MB — on every
other plan the plan limit is reached first and the error is
file_too_large. Nothing is reserved when a request is refused.Reads keep working when the pool is full
Reads keep working when the pool is full
A full pool rejects further
artifact_put calls. It does not affect
artifact_get or recall — existing artifacts stay readable.