Upload a file to the secure vault (member)
ic_files_putUpload a file (base64) into the IC secure vault and set who can see it. visibility: 'ic-members' (any IC member, default), 'grantees' (only the Clerk user ids you list, plus you + operators), or 'private' (only you + operators). Non-members get access via ic_files_grant (a signed link). SIZE — the real ceiling on THIS tool is ~3.2MB of RAW bytes, not the 16MB the storage backend accepts: content_base64 travels in a JSON request body through a serverless function capped at ~4.5MB, and base64 inflates 4/3. Measure the raw file, not the encoded string. Over that you get a 413 from the edge with no body, which reads like a network fault but is a hard limit — so check the size yourself before encoding. For anything larger (a 20MB meeting recording, say) split it and upload the parts, or trim the media first; there is no direct-to-blob upload ticket yet. 500 files per member. Args: { filename, content_base64, content_type?, visibility?, grantees?: string[], label?, description?, tags?: string[] }. Returns: { ok, id, filename, size, visibility }. Required scope: files:write (ic-member+).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Free-text tags, e.g. ['hackathon']. | |
| label | No | Human title (defaults to filename). | |
| filename | Yes | Display filename (basename; sanitized). | |
| grantees | No | Clerk user ids allowed when visibility='grantees'. | |
| folder_id | No | Put the file in this folder (d_...) instead of the vault root. You must own the folder (or be operator). Discover/create folders with ic_folders_list / ic_folder_create. | |
| visibility | No | Who can download. Default 'ic-members'. | |
| description | No | What the file is. | |
| content_type | No | MIME type, e.g. application/pdf. | |
| content_base64 | Yes | File bytes, base64-encoded. Max ~3.2MB DECODED (the request-body cap is ~4.5MB and base64 adds 4/3). Check the raw size before encoding. |