General
- Get hero writing guide —
get_hero_writing_guide
Get the complete HERO writing reference: extended markdown DSL, clause depth rules, placeholder usage, legal writing style, and tool selection guidance. Call this BEFORE writing any document content to ensure correct syntax. Returns ~1000 lines of guidance — call once per session and remember it. - Undo last change —
undo_last_change
Undo the most recent change YOU (the AI) made to the user’s HERO workspace via these tools — document writes/edits, table changes, document/folder/project create/rename/move/delete, metadata, PDF/DOCX edits. Call it again to step further back: each call reverses the next-most-recent change, exactly like pressing undo repeatedly. Use when the user says things like “undo that”, “revert the last change”, or “go back”. The response says what was undone and whether more changes remain to undo (hasMoreUndo).
Knowledge
- List project documents —
list_project_documents
List all documents (files, subfiles, and external PDFs) in a project. Returns name, id, type, and externalType (e.g. ‘PDF’) for each. - List project folders —
list_project_folders
List all folders in a project. - Get document metadata —
get_document_metadata
Get metadata for a specific document: name, type, description, collaborators, timestamps, parent folder, published status. - Build document map —
build_document_map
WHEN TO USE: You need a structural overview (table of contents, section list, defined terms) without reading full content. Build a structural map of a document: all clause sections (numbering, title, depth, content) and defined terms. - Get section by numbering —
get_section_by_numbering
Find a clause section by its numbering (e.g. “1.1”, “22.1”). Returns numbering, title, depth, and full content. - Get section titles —
get_section_titles
List clause section titles at a given depth (0 = top-level). Useful for getting a table of contents. - Get document clauses —
get_document_clauses
Return all clause blocks from a document as structured JSON. - Explain term definition —
explain_term_definition
Explain a defined term (e.g. “Party”, “Effective Date”) in a specific document. Returns the definition content. - Read document text —
read_document_text
WHEN TO USE: You need to understand content for questions, analysis, or summarization. Works for editor documents and PDFs. Prefer this over read_document_content unless you need raw JSON. Read the full text content of a document as plain text. Works for both HERO editor documents and external PDFs. For editor documents, clause numbering and headings are preserved. For PDFs, returns server-extracted text (no formatting structure) — this is the ONLY way to read a PDF; never try to download or parse the PDF file yourself. Use this when you need to read the actual content rather than just structural metadata, or when clause-specific tools don’t return enough context. - Find documents with clause blocks —
find_documents_with_clause_blocks
Find all documents in a project that contain clause blocks (structured legal sections). - Get document maps —
get_document_maps
Build document maps (sections + terms) for ALL documents in a project. Useful for cross-document search. - Get table schema —
get_table_schema
Get the column schema of a table by table ID. - Resolve table by name —
resolve_table_by_name
Resolve a table ID from its name within a project. - List clause blocks for reference —
list_clause_blocks_for_reference
List all clause blocks in a document with their blockId, hierarchy, depth, numbering, and text preview. Use this to find the blockId needed to create a clause reference. - Create clause reference —
create_clause_reference
Create a clause reference record in the database. Returns a clauseReferenceId that you can embed in document content using {{clauseRef:CLAUSE_REF_ID}} (in extended Markdown) or as a { type: “clauseReference”, attrs: { clauseReferenceId: ”…” } } node (in TipTap JSON). WORKFLOW: 1. Call list_clause_blocks_for_reference to find the target clause’s blockId and hierarchy. 2. Call this tool with the target documentId, blockId, and hierarchy. 3. Use the returned clauseReferenceId in your content. Local references: documentId = the document you are writing content into. Cross-document references: documentId = the OTHER document that contains the target clause.
Project tree
- List project tree —
list_project_tree
Get the full document tree for a project: all folders and files with their parent-child relationships. Returns id, name, type, parentId, createdAt, updatedAt for each node. - List user workspaces —
list_user_workspaces
List all workspaces the current user has access to. Returns each workspace’s id, name, and metadata. Use this when the user asks about their workspaces or when you need a workspaceId for other tools. - Search documents —
search_documents
Search for documents and folders by name across all workspaces the user has access to. Returns up to 20 matches with full path context (workspace, project, parent folder) AND aformatfield (‘editor’ | ‘docx’ | ‘pdf’ | ‘folder’) so you can pick the right tool family per document. Use this to find documents by name when the user references them informally without @-mentions. If multiple matches are returned, ask the user to disambiguate using the workspace/project context shown. - Search projects —
search_projects
Search for projects by name across all workspaces the user has access to. Returns each match’s _id, name, description, workspaceId, and workspaceName so you can pick the right one without needing a workspaceId up front. ALWAYS use this before create_project when the user references a project by name — it prevents creating duplicates in the wrong workspace. If multiple matches are returned, ask the user to disambiguate using workspace context. - List workspace projects —
list_workspace_projects
List all projects in a workspace with their names, ids, and timestamps. - Create project —
create_project
Create a new project in the current workspace. - Rename project —
rename_project
Rename an existing project. - Delete project —
delete_project
Delete an entire project and all its documents. THIS IS DESTRUCTIVE — only call after confirming with the user. - Create document —
create_document
Create a new document (file) or folder in a project. Set type to “FOLDER” for folders, “FILE” for documents. - Create document batch —
create_document_batch
Create multiple documents/folders in one operation. Useful for scaffolding a project structure. Items are created in order so you can reference earlier items as parents by using a temporary id pattern. - Rename document —
rename_document
Rename a document or folder. - Move document —
move_document
Move a document or folder to a different parent. Omit newParentId to move to project root. - Move document batch —
move_document_batch
Move multiple documents/folders in one operation. Provide a shared newParentId to move all items to the same folder, or specify a per-item newParentId to move each to a different destination. Omit newParentId (both shared and per-item) to move to project root. - Delete documents —
delete_documents
Delete one or more documents/folders (and their children). THIS IS DESTRUCTIVE — only call after confirming with the user. - Update documents meta batch —
update_documents_meta_batch
Update metadata (icon, name, description, reference) for one or more documents, folders, or projects in a single call. Each item targets either a documentId or a projectId. Icon: a Lucide icon name + HSL color string. To clear an existing icon, pass null. - Duplicate documents —
duplicate_documents
Duplicate one or more documents/folders in place (same parent, same project). Folders are duplicated recursively — every nested document and subfolder is copied. Each copy gets a fresh ID but keeps the same content, tables, and references. - Copy documents to —
copy_documents_to
Copy one or more documents/folders into a specific destination folder (or project root). Folders are copied recursively — every nested document and subfolder is included. The copies get fresh IDs but keep the same content, tables, and references.
Editor
- Read document content —
read_document_content
WHEN TO USE: You need raw TipTap JSON for programmatic manipulation. For reading/understanding content, prefer read_document_text instead. Read a document’s full content as TipTap JSON by connecting to the live collaboration server. Returns the structured JSON tree with node types, attributes, marks, and text. - Write document markdown —
write_document_markdown
⚠️ REPLACES ALL existing content with new Markdown-based content. To ADD content to an existing document, use append_markdown_to_document instead. Converts extended Markdown to TipTap JSON server-side — supports ALL HERO node types (headings, @clause, @title, @signature, callouts, columns, tabs, tables, inline atoms, charts, etc.). See the Extended Markdown Syntax section in the system prompt for the full syntax reference. Cross-references written as ordinary prose (“Section 2”, “Clause 4.1(a)”) are linked to their clause automatically — write them normally. Any that resolve to no clause come back asunlinkedCrossReferences. - Append markdown to document —
append_markdown_to_document
Append content to the END of an existing document. Existing content is PRESERVED — new content is added after it. Use when the user asks to ADD, INSERT, or EXTEND a document (NOT rewrite it). Same extended Markdown syntax as write_document_markdown — see system prompt for reference. Prose cross-references (“Section 2”) are linked automatically across the whole document. - List document blocks —
list_document_blocks
WHEN TO USE: Before calling patch_document to get block IDs. List all blocks in a document with their blockId, type, and text excerpt. Use this to identify blocks before patching. Much more token-efficient than read_document_content for editing workflows. - Patch document —
patch_document
Surgically edit a document by applying block-level operations. Each operation targets a specific block by its blockId (use list_document_blocks to find IDs first). Operations: replace, insertBefore, insertAfter, delete. Applied in order; partial success possible. Markdown field uses the same extended syntax as write_document_markdown — see system prompt. Cross-references in the markdown you supply (“Section 2”) are linked automatically; blocks you did not touch are left alone. Deleting a clause that other text points at is reported asbrokenClauseReferences— those references now read “Not found” and need the pointing text fixed. - Create document snapshot —
create_document_snapshot
Create a named version/snapshot of a document’s current state before making significant edits. Use this before large rewrites or restructures of documents OTHER than the user’s active document. The snapshot appears in the document’s version history and can be restored by the user.
Placeholders
- Lookup table columns —
lookup_table_columns
Look up a table’s columns by table name or ID. Returns column metadata (columnId, name, type, isIdentifier) so you can decide which columns to use as placeholders. Provide either tableName or tableId. - Prepare placeholder references —
prepare_placeholder_references
Create TableReference entries for one or more columns so you can insert placeholderNode nodes in document content. Call this BEFORE generating document content that includes placeholderNode nodes. Returns a mapping of columnId to tableReferenceId that you must use as the tableReferenceId attribute on each placeholderNode. IMPORTANT: If you just created a new document, you MUST pass the documentId parameter with the new document’s ID. - Prepare global references —
prepare_global_references
Create GLOBAL references (globalReferenceNode) pinned to ONE SPECIFIC row. Use this when a document must reference MULTIPLE DIFFERENT rows of the same table at once (e.g. Alice’s email AND Bob’s email, a roster, a comparison). Each reference is locked to the rowId you pass and is independent of the document’s active row, so different references can point to different rows. Call lookup_table_rows first to get the rowId. Returns a mapping of columnId to tableReferenceId to use on globalReferenceNode nodes (markdown: {{globalref:ID}}). For the common case where ALL placeholders should share one row that the user can switch later, use prepare_placeholder_references instead. IMPORTANT: If you just created a new document, pass the documentId parameter with the new document’s ID. - Lookup table rows —
lookup_table_rows
Look up rows in a table. Returns each row’s ID and identifier (primary key) value, plus a preview of cell values for the first few columns. Use this to find the correct rowId when the user references a specific record (e.g. ‘the 2nd row’ or ‘David Smith’). - Update referenced row —
update_referenced_row
Change which row the placeholders display for a given table in a document. Updates the ReferencedRowInDocument link so all existing placeholderNode nodes for that table show the new row’s values. Use when the user wants to switch which record the placeholders point to.
Tables — schema
- List project tables —
list_project_tables
List all tables in a project with column summaries. - Get table data —
get_table_data
Read the full data of a table: all rows with their cell values. Returns column schema and rows as maps of column name to value. - Create table —
create_table
Create a new table with a name and an initial set of columns. Exactly ONE column must have isIdentifier: true — this is the primary key column (e.g. a person’s name, a product title, an email). Choose the most meaningful unique field as the identifier. Valid column types: string, number, money, date, time, checkbox, select, multiSelect, email, url, phone, location, computed, linkCell, oneMany. For select/multiSelect columns: provide selectOptions (array of label strings) so the dropdown is pre-populated. For oneMany columns: provide linkedTableId (the _id of the table to link to). The target table must already exist. For linkCell columns: just create the column — cell values are set individually via cell operations. - Rename table —
rename_table
Rename an existing table. - Delete table —
delete_table
Delete a table and all its data. DESTRUCTIVE — confirm with user first. - Add column —
add_column
Add a new column to an existing table. Also creates empty cells for all existing rows. For select/multiSelect: provide selectOptions (array of label strings). For oneMany: provide linkedTableId. For computed: create the column, then use set_computed separately. - Update column —
update_column
Update a column’s name, type, selectOptions, or linkedTableId. For select/multiSelect: pass selectOptions to replace the available options. For oneMany: pass linkedTableId to change the linked table. - Delete column —
delete_column
Delete a column and all its cells. DESTRUCTIVE — confirm first. - Set computed —
set_computed
Configure a computed (“Formula”) column from a plain-language description of a calculation. Reference other columns by wrapping their column id in {{col:<columnId>}}, e.g. “30 days after {{col:abc123}}” — get column ids from get_table_data or add_column’s response, never invent one. The description compiles ONCE into a typed expression tree, which then evaluates for every row and backfills them immediately. The columns referenced MUST already have data before calling this — the compiler previews against real rows and the backfill runs right away. The description must describe a CALCULATION (dates, numbers, text, booleans) — a description that needs human judgment (e.g. “summarize the risk”) is rejected by the compiler.
Tables — data
- Add row —
add_row
Add a SINGLE row to a table. For adding 2+ rows, use add_row_batch instead — it is faster and more reliable. Pass cellValues as an object mapping column names to values. For linked identifiers (cross-table references): pass an object {“linkedTableId”: “<sourceTableId>”, “linkedRowId”: “<sourceRowId>”} instead of a plain string. Use lookup_table_cells to discover source row IDs first. For oneMany columns: pass an array of row IDs from the linked table (resolved automatically). - Add row batch —
add_row_batch
Add multiple rows to a table at once. Each item inrowsis a map of column name → value. For linked identifiers: pass {“linkedTableId”: ”…”, “linkedRowId”: ”…”} instead of a plain string for the identifier column. This creates a cross-table reference. Use lookup_table_cells on the source table first to get the row IDs. For oneMany columns: pass an array of row IDs from the linked table (resolved automatically). - Update cells —
update_cells
Update cell values for a specific row. Pass values as column name → new value. For linked identifiers: pass {“linkedTableId”: ”…”, “linkedRowId”: ”…”} to link to a row in another table. - Batch update column —
batch_update_column
Apply a transformation to all cell values in a column. Supports operations: “set” (set all to a value), “add” (add a number), “subtract” (subtract a number), “multiply”, “divide”. Works with number, money, and checkbox columns. - Delete row —
delete_row
Delete a row from a table. DESTRUCTIVE — confirm first. - Lookup table cells —
lookup_table_cells
Look up cells in a table, returning cell IDs and row IDs alongside their values. Essential before setting linked identifiers, linkCell values, oneMany references, or formula expressions. For linked identifiers: use the returned rowId to build {“linkedTableId”: tableId, “linkedRowId”: rowId}. Returns rows with { rowId, cells: [{ cellId, columnName, columnType, value, isIdentifier }] }.
Tables — references
- Create table reference —
create_table_reference
Create a table reference linking a table column to a document. This enables placeholder values from the table to appear in the document. Returns reference IDs that the frontend uses to insert placeholder nodes. - Get document table references —
get_document_table_references
Get all table references (placeholder links) used within a document.
Web
- Fetch url content —
fetch_url_content
Fetch and extract text content from a web URL. Returns clean text from HTML pages. Use this when the user provides a link and wants you to read or use its content. - Search web —
search_web
Search the web for information. Returns results with titles, URLs, and snippets. Use when you need external information or to find a specific page. - Web cache get meta —
web_cache_get_meta
Get metadata for a cached web document by id (length, title). - Web cache read chunk —
web_cache_read_chunk
Read a chunk of cached web document HTML by character range. Use iteratively for large documents. - Web cache read tail —
web_cache_read_tail
Read the last N characters of a cached web document to verify and process tail content.
Workflows
- Plan —
plan
Create or update an execution plan with numbered steps. Call this BEFORE starting a multi-step task to show the user what you intend to do. You can call it again later to mark steps as completed or to revise the plan. The frontend renders this as a visual checklist. - Finish with summary —
finish_with_summary
Call this when you have completed all requested work. Provide a brief summary of what was done. This signals to the frontend that the agent run is complete and renders a summary card. After calling this tool, do NOT call any more tools or produce additional content.
Integrations — Gmail
- Gmail search —
gmail_search
Search the user’s Gmail using Gmail’s native query syntax. Returns message headers + snippets (NOT full bodies). Gmail query examples: -from:sarah@example.com— messages from Sarah -subject:invoice newer_than:7d— invoices from the last week -has:attachment filename:pdf— PDFs -label:inbox is:unread— unread inbox items -in:sent to:bob@example.com— mail I sent to Bob - Leavequeryempty to list the most recent messages. Follow up withgmail_get_messageorgmail_get_threadto fetch full bodies. - Gmail get message —
gmail_get_message
Fetch a single Gmail message with its full body text. Use theidreturned bygmail_search. Returns headers, snippet, full plain-text body (capped at 10 KB), and a list of attachments with their IDs. Usegmail_get_attachmentto read attachment contents. - Gmail get thread —
gmail_get_thread
Fetch an entire Gmail conversation thread given athreadId(fromgmail_searchresults). Returns all messages in the thread with their full plain-text bodies (each capped at 5 KB) and attachment metadata. Usegmail_get_attachmentto read specific attachments. - Gmail get attachment —
gmail_get_attachment
Download and read the content of an email attachment from Gmail. Requires themessageIdandattachmentIdfrom the attachments list returned bygmail_get_messageorgmail_get_thread. PDFs are extracted to text server-side. Text-based files (CSV, JSON, TXT, HTML, XML) are returned as text. All other formats (DOCX, XLSX, images, etc.) are returned as raw base64 for direct reading. - Gmail create draft —
gmail_create_draft
Create a draft email in the user’s Gmail. The draft is saved but NOT sent — the user reviews and sends it themselves. Prefer this overgmail_send_messageunless the instructions explicitly ask for the mail to be sent. - Gmail send message —
gmail_send_message
SEND an email from the user’s Gmail account immediately. This cannot be undone. Only use this when the instructions explicitly ask to send; otherwise usegmail_create_draft. - Gmail modify labels —
gmail_modify_labels
Add or remove Gmail labels on a message. Use the system label idsINBOX,UNREAD,STARRED,TRASH, or a custom label id. RemovingUNREADmarks a message read; removingINBOXarchives it.
Integrations — Google Drive
- Drive search —
drive_search
Search the user’s Google Drive using Drive’s native query syntax. Returns file metadata only (no content — follow up withdrive_get_file_content). Drive query examples: -name contains 'invoice'— name substring -fullText contains 'Q4 planning'— full-text search of doc contents -mimeType = 'application/pdf'— only PDFs -mimeType = 'application/vnd.google-apps.document'— only native Google Docs -modifiedTime > '2026-01-01T00:00:00'— modified after a date -'alice@example.com' in owners— owned by Alice - Combine withand/or:name contains 'invoice' and mimeType = 'application/pdf'The tool automatically appendstrashed = falseto every query. Leavequeryempty to list the most recently-modified files. - Drive list folder —
drive_list_folder
List files and subfolders directly inside a Google Drive folder. Pass the folder’s id, or omitfolderIdto list the root. - Drive get file content —
drive_get_file_content
Fetch the text content of a Drive file. Native Google Docs/Sheets/Slides are exported to plain text/CSV. Text files are fetched directly. PDFs and binary formats return an error — the model cannot read them. Content is truncated to 15 KB. - Drive create file —
drive_create_file
Create a new file in the user’s Google Drive with text content. Returns the file id and a link. HERO can only later modify files it created itself. - Drive update file —
drive_update_file
Replace the text content of a Google Drive file HERO created. Drive keeps the previous revision, so this is recoverable from the file’s version history. Fails with 403 on files HERO did not create. - Drive create folder —
drive_create_folder
Create a folder in the user’s Google Drive. Returns the folder id for use as aparentId. - Drive move file —
drive_move_file
Move a Google Drive file HERO created into a different folder. Calldrive_searchfirst if you need the file’s current parent — Drive requires the folder being left as well as the one being joined.
Integrations — Outlook
- Outlook search —
outlook_search
Search the user’s Outlook / Microsoft 365 mailbox via Microsoft Graph. Returns message headers + snippets (not full bodies — follow up withoutlook_get_message). Two modes: -search(free-text, KQL-like):subject:invoice,from:sarah@example.com,hasattachment:yes,received:2026-01-01..2026-01-31. Combine with spaces. -filter(OData, precise):from/emailAddress/address eq 'sarah@example.com',receivedDateTime ge 2026-01-01T00:00:00Z,hasAttachments eq true. Combine withand/or. Prefersearchfor natural-language queries; usefilterwhen you need exact field matching or date ranges. Leave both empty for most-recent messages. - Outlook get message —
outlook_get_message
Fetch a single Outlook message with its full body (capped at 10 KB). Useidfromoutlook_search. If the message has attachments, returns their IDs and metadata. Useoutlook_get_attachmentto read attachment contents. - Outlook get conversation —
outlook_get_conversation
Fetch all Outlook messages in a conversation, sorted chronologically, with full bodies (each capped at 5 KB). Pass theconversationIdfromoutlook_searchresults. Returns attachment metadata for each message. Useoutlook_get_attachmentto read specific attachments. - Outlook get attachment —
outlook_get_attachment
Download and read the content of an email attachment from Outlook. Requires themessageIdandattachmentIdfrom the attachments list returned byoutlook_get_messageoroutlook_get_conversation. PDFs are extracted to text server-side. Text-based files (CSV, JSON, TXT, HTML, XML) are returned as text. All other formats (DOCX, XLSX, images, etc.) are returned as raw base64 for direct reading. - Outlook create draft —
outlook_create_draft
Create a draft email in the user’s Outlook mailbox. The draft is saved but NOT sent — the user reviews and sends it themselves. Prefer this overoutlook_send_messageunless the instructions explicitly ask to send. - Outlook send message —
outlook_send_message
SEND an email from the user’s Outlook account immediately. This cannot be undone. Only use this when the instructions explicitly ask to send; otherwise useoutlook_create_draft. - Outlook move message —
outlook_move_message
Move an Outlook message to another mail folder.destinationIdaccepts a folder id or one of the well-known namesinbox,archive,deleteditems,junkemail,drafts. Moving todeleteditemsis recoverable.
Integrations — OneDrive
- Onedrive search —
onedrive_search
Search the user’s OneDrive for files by name and content. The query is a single free-text string — Graph matches it against filenames, content, and metadata. Returns file summaries (NOT content — follow up withonedrive_get_file_content). - Onedrive list folder —
onedrive_list_folder
List files and subfolders directly inside a OneDrive folder. OmitfolderIdto list the root. - Onedrive get file content —
onedrive_get_file_content
Fetch the text content of a OneDrive file. Only text-like files (text/*, json, xml, javascript) are supported. PDFs, Office docs, and binary formats return an error. Content is truncated to 15 KB. - Onedrive upload file —
onedrive_upload_file
Create or replace a file in the user’s OneDrive with text content. Replacing a file keeps the previous version in OneDrive’s version history, and a deleted file goes to the recycle bin — both are recoverable. - Onedrive create folder —
onedrive_create_folder
Create a folder in the user’s OneDrive. Returns the folder id for use as aparentId. - Onedrive move item —
onedrive_move_item
Move a OneDrive file or folder into a different folder, optionally renaming it. PassdestinationParentIdfromonedrive_list_folderoronedrive_create_folder.
Integrations — Dropbox
- Dropbox search —
dropbox_search
Search the user’s Dropbox by filename and (for supported text formats) content. Returns file/folder metadata. Follow up withdropbox_get_file_contentfor text content. - Dropbox list folder —
dropbox_list_folder
List files and subfolders inside a Dropbox path. Pass empty string for the Dropbox root. - Dropbox get file content —
dropbox_get_file_content
Fetch the text content of a Dropbox file. Only text-like extensions are supported (txt, md, json, csv, log, yml, yaml, html, xml, common code files). PDFs and binary formats return an error. Content is truncated to 15 KB.pathOrIdaccepts either a Dropbox path (e.g. ‘/Documents/notes.md’) or the file id from search results. - Dropbox upload file —
dropbox_upload_file
Upload a text file to the user’s Dropbox. By default an existing file at the same path is left alone and the new file is auto-renamed; setoverwriteto true to replace it, which Dropbox keeps in file revisions. - Dropbox create folder —
dropbox_create_folder
Create a folder in the user’s Dropbox. Auto-renames rather than failing if the path is taken. - Dropbox move item —
dropbox_move_item
Move or rename a file or folder in the user’s Dropbox. Both paths are absolute; the destination includes the final name, so moving and renaming are the same operation.
Integrations — Notion
- Notion search —
notion_search
Search the user’s Notion workspace for pages and databases by TITLE. IMPORTANT: Notion’s search only matches titles, NOT page content. To search content, usenotion_query_databaseagainst a specific database. To read a page, usenotion_get_page. - Notion get page —
notion_get_page
Fetch a Notion page’s full content. Walks the top-level blocks and flattens them to plain text. Content is truncated to 15 KB. Useidfromnotion_searchresults. - Notion query database —
notion_query_database
Query a Notion database with optional filter and sort. Returns rows (each is a Notion page) with their property values. Use this when the user asks for structured data like ‘employees with role = engineer’ or ‘tasks due this week’. Get thedatabaseIdfromnotion_searchwith filter=database. Thefilterandsortsarguments follow Notion’s database query DSL — pass them as JSON strings. See https://developers.notion.com/reference/post-database-query for the full schema. - Notion create page —
notion_create_page
Create a page in the user’s Notion workspace, either inside a parent page or as a row in a database. Supply exactly one ofparentPageIdorparentDatabaseId. Body paragraphs are plain text. A created page can be archived later, so this is recoverable. - Notion append blocks —
notion_append_blocks
Append plain-text paragraphs to the end of a Notion page. Existing content is never touched — this only adds. - Notion update page —
notion_update_page
Update a Notion page’s title, or archive/unarchive it. Archiving is Notion’s delete and is reversible by unarchiving. To change a database row’s other properties, passpropertiesin Notion’s own property format.