Skip to main content
Glama

notion_upload_file

Upload a file to a Notion page as a new block, pulling from local storage, a shared mount, Google Drive, or base64.

Instructions

Upload a file to Notion and attach it as a new block.

source accepts one of: • local:<relative-path> — a file under the notion-mcp private store (FILES_DIR). List with notion_list_local_files. • shared:<filename> — a file on the shared cross-MCP mount, written there by google-accounts-mcp download_attachment with destination='shared'. List with notion_list_local_files(location='shared'). • drive:<name-or-id> — a file in the shared Drive folder (DRIVE_FOLDER_NAME) Google Drive folder (read from google-accounts-mcp's credentials, read-only). • base64:<bytes> — raw base64 content; requires filename. Subject to MCP parameter size limits — prefer shared: or drive: for anything over ~20KB.

parent_page_id is a Notion page ID (find via notion_search_pages) OR any block ID that supports children (toggle, column, callout, ...) to attach the file inside that block.

position controls where the new block lands among the parent's children: 'end' (default), 'start', or a block ID to insert directly AFTER that block (get block IDs from notion_read_page(include_block_ids=True) or notion_list_files_on_page).

filename overrides the source filename when provided. caption is shown below the file block in Notion. Files larger than 20 MB are uploaded via Notion's multi-part protocol automatically. To swap the file in an existing block without moving it, use notion_replace_file instead.

Cross-MCP file transfer

To upload a Gmail attachment to a Notion page:

  1. google-accounts-mcp download_attachment(..., destination='shared')

  2. notion_upload_file(source='shared:', parent_page_id=...) Files never traverse MCP parameters — no size limits.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceYes
captionNo
filenameNo
positionNoend
parent_page_idYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral burden. It discloses source types, size limits (~20KB parameter limit, >20MB multipart), position behavior, filename override, and the read-only nature of the Drive source. This goes well beyond the basic 'upload' implication and provides substantial operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with bullets and a dedicated cross-MCP workflow section. Most sentences add essential information, though there is minor redundancy (e.g., repeating 'Google Drive folder' and restating that files don't traverse MCP parameters). It is appropriately sized for the tool's complexity, but not as tight as it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, absent schema descriptions, and no annotations, the description is remarkably complete. It covers all source alternatives, target placement, positioning, size limits, automatic multipart handling, and a multi-step usage example. An output schema exists, so not explaining return values is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate for all parameter meaning. It thoroughly explains the source format variants, parent_page_id as a page or block ID, position values ('end', 'start', block ID), filename override, and caption behavior. Every parameter is given practical semantic context far beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the primary action: 'Upload a file to Notion and attach it as a new block.' It defines the resource (file upload into a Notion page/block) and differentiates from the sibling tool by explicitly directing users to notion_replace_file for swapping files in existing blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance and alternatives: it names notion_replace_file for existing blocks, explains which source type to prefer for large files, and offers a cross-MCP usage workflow. It also clarifies where parent_page_id can point, covering page vs. block use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/snickery/notion-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server