notion_batch_add_file_to_row
Attach files to many Notion rows in one batch call, with concurrent uploads and per-item failure reporting.
Instructions
Attach files to many existing Notion rows in one call.
items_json is a JSON array of objects. Each item takes the same shape as the single-shot tool's parameters::
[
{"page_id": "...", "source": "shared:invoice1.pdf"},
{"page_id": "...", "source": "shared:invoice2.pdf",
"filename": "Renamed.pdf"},
{"page_id": "...", "source": "drive:<id>",
"files_property": "Attachments", "mode": "replace"}
]default_files_property and default_mode fill in any item that omits those fields — pass them once at the batch level instead of repeating per item.
Items are uploaded with bounded concurrency (NOTION_BATCH_CONCURRENCY, default 3) so a batch of N finishes in roughly ceil(N/concurrency) waves rather than serially — a batch of ~8 used to exceed the client's 4-minute timeout when serial. Concurrent items targeting the SAME row are still serialised (the 'append' path is a read-modify-write). The 429/5xx backoff in the client absorbs any rate-limit bursts. Per-item failures are reported in the output (in input order) but do NOT abort the batch — use the per-item status to retry individual items.
Files are staged in the shared mount; the typical pattern is to stage N files via google-accounts-mcp download_attachment, call this tool once, then call notion_purge_file to remove each staged file.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| items_json | Yes | ||
| default_mode | No | append | |
| default_files_property | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |