Write Tools
Write tools require a write-scoped token. Calling these with a read-scoped token returns an error and makes no changes.
Every write tool also accepts optional contextRunId. In a workspace using Strict context, actual mutations require a non-expired ID returned by this same agent's prepare_context call. Destructive confirmation and normal authorization remain separate requirements. In Manual/Smart mode the field is optional.
create_page, update_page, and create_database additionally accept optional knowledge (conceptType, description, tags, sources, status, staleAfter). Agent-created or agent-updated items are recorded as machine-generated drafts; only a signed-in Remnus user can review the exact revision.
create_page, bulk_create_pages, update_page, bulk_update_pages and create_database accept icon — an emoji ("🗺️") or "lucide:Name" for one of the icons the sidebar can draw (for example lucide:Map, lucide:Layers, lucide:Target) — and iconColor: default, red, orange, yellow, green, teal, blue, purple or pink (applies to Lucide icons). An unknown Lucide name is refused with the list of valid ones, and image URLs can't be set over MCP. In updates, null clears.
create_page
Create a new standalone page or a database row.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string | ✓ | Page title |
content |
string | Initial markdown content | |
parentId |
string | Parent workspace item ID — creates a nested standalone page | |
databaseId |
string | Database ID — creates a row instead of a standalone page | |
properties |
object | Initial property values for database rows | |
icon |
string | Emoji or lucide:Name |
|
iconColor |
string | Color for a Lucide icon | |
knowledge |
object | OKF-aligned retrieval/lifecycle metadata | |
contextRunId |
string | Context preflight ID (required in Strict mode) |
Pass either parentId (standalone page) or databaseId (database row), not both.
Returns — { id, type }
update_page
Update an existing page or database row. Properties are merged — existing properties that are not included in the call are preserved.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pageId |
string | ✓ | Workspace item ID or database row ID |
title |
string | New title | |
content |
string | New markdown content (replaces existing) | |
properties |
object | Properties to merge into the row | |
icon |
string | null | Emoji or lucide:Name; null clears |
|
iconColor |
string | null | Color for a Lucide icon; null clears |
|
knowledge |
object | OKF-aligned retrieval/lifecycle metadata | |
contextRunId |
string | Context preflight ID (required in Strict mode) |
Returns — { updated: true, id }
bulk_update_pages
Update multiple pages or database rows in a single call.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
updates |
array | ✓ | Array of update objects — each has pageId plus optional title, content, properties, icon, iconColor |
Returns — array of per-item results.
bulk_create_pages
Create up to 50 standalone pages and/or database rows in one call — the fast way to fill a database or lay out a section. Entries are created in order, and the call is not atomic: each entry reports its own ok/error, and one bad entry never stops the rest.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pages |
array | ✓ | 1–50 entries, created in order |
contextRunId |
string | Context preflight ID (required in Strict mode) |
Entry
| Field | Type | Description |
|---|---|---|
title |
string | Plain-text title (required) |
content |
string | Markdown content |
databaseId |
string | Creates a row in this database |
properties |
object | Row properties (column names or ids) |
parentId |
string | Nest a page under an existing item |
ref |
string | A label later entries in the same call can point at |
parentRef |
string | Nest a page under a page created earlier in this call |
icon / iconColor |
string | See the icon note above |
parentRef can't be combined with parentId or databaseId, and only pages — not rows — can be a parentRef target.
{
"pages": [
{ "ref": "systems", "title": "Systems", "icon": "lucide:Layers", "iconColor": "blue" },
{ "parentRef": "systems", "title": "Combat", "icon": "⚔️" },
{ "parentRef": "systems", "title": "Itemization", "icon": "🎒" }
]
}
Returns — { requested, succeeded, failed, results: [{ index, ok, id?, type?, ref?, error? }] }
delete_page
Delete a workspace page, database, or database row. Requires confirm: true to execute. Without it, the tool returns a description of what would be deleted and makes no changes.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
string | ✓ | Item to delete | |
confirm |
boolean | false |
Set to true to confirm deletion |
Always call once without confirm first to verify the target before confirming.
Returns — { deleted: true, id } on confirmation; a preview string otherwise.
bulk_delete_pages
Delete multiple workspace pages, databases, or database rows in one call. Requires confirm: true to execute. Without it, the tool returns a preview of what would be deleted and makes no changes.
Deletions run concurrently and each entry reports its own ok/error, so one bad id cannot sink the rest of the batch — unlike bulk_update_pages, whose Promise.all implementation can silently drop entries on a partial failure.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageIds |
string[] | ✓ | Workspace item IDs or database row IDs to delete (max 100) | |
confirm |
boolean | false |
Set to true to confirm deletion |
|
contextRunId |
string | Context preflight ID (required in Strict mode) |
Always call once without confirm first to verify the targets before confirming.
Returns — on confirm: true: { deleted: true, requested, succeeded, failed, results: [{ id, ok, error? }] }. Preview (no confirm): { deleted: false, requested, items: [{ id, title, type }], preview }.
move_item
Move a sidebar item (page or database) to a new parent within the workspace.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemId |
string | ✓ | Workspace item ID to move |
newParentId |
string | null | New parent item ID — pass null to move to workspace root |
Returns — updated item object.
bulk_move_items
Move multiple items in one call. Pass newParentId to reparent workspace items (pages/databases) within the sidebar — the same semantics as move_item, batched. Pass targetDatabaseId to move database rows to a different database. Exactly one of newParentId or targetDatabaseId must be given.
The cross-database move is refused entirely (no rows moved) if the target database's columns don't cover the source columns by name and type — the error names the missing/mismatched columns rather than silently dropping data.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
itemIds |
string[] | ✓ | IDs to move (max 100) |
newParentId |
string | null | Sidebar mode: new parent item ID, or null for workspace root |
|
targetDatabaseId |
string | Cross-database mode: destination database ID for row(s) | |
contextRunId |
string | Context preflight ID (required in Strict mode) |
Returns — { requested, succeeded, failed, results: [{ id, ok, error? }] }
create_database
Create a new database with a custom schema. A Title text column is always prepended automatically.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ | Database name |
parentId |
string | Parent workspace item ID (omit for root) | |
schema |
array | Column definitions (omit for default Title + Status schema) | |
icon |
string | Emoji or lucide:Name |
|
iconColor |
string | Color for a Lucide icon | |
views |
array | Up to 5 views created with the database: { name, type: "table" | "kanban" | "calendar", groupByCol?, dateCol?, icon?, iconColor? }. A Table view always exists. Each view reports its own result; a view that can't be created never undoes the database. |
Column definition
{
"name": "Status",
"type": "select",
"options": [
{ "value": "Backlog", "color": "default" },
{ "value": "In Progress", "color": "orange" },
{ "value": "Done", "color": "green" }
]
}
Column types: text, number, select, multi_select, status, user, multi_user, date, datetime, checkbox, url, email, phone
status— likeselect, but each option may include agroup:"todo"|"in_progress"|"complete"(renders as a progress-ring glyph).user/multi_user— store workspace member user ids (nooptionsneeded); resolved to member name + avatar in the UI.
Returns — { id, databaseId, views? }
update_database_schema
Add or remove columns from an existing database. Removing columns is destructive (all data in that column is lost) and requires confirm: true.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
databaseId |
string | ✓ | Database ID | |
addColumns |
array | Columns to add — same format as create_database schema |
||
removeColumnIds |
array | Column IDs to remove (find IDs via get_database_schema) |
||
confirm |
boolean | false |
Required when removing columns |
The Title column cannot be removed.
Returns — updated schema.
create_database_view
Add a new saved view (table, kanban, or calendar) to a database. Kanban groups rows by a select/status column; calendar places cards by a date/datetime column. Use get_database_schema first to see column ids/names.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
databaseId |
string | ✓ | Database ID |
name |
string | ✓ | Name for the new view |
type |
string | ✓ | "table" | "kanban" | "calendar" |
groupByCol |
string | Kanban only: select/status column id or name. Auto-picks the first status/select column if omitted. | |
dateCol |
string | Calendar only: date/datetime column id or name. Auto-picks the first date/datetime column if omitted. | |
icon |
string | Emoji, "lucide:Name", or image URL for the view tab |
|
iconColor |
string | Theme color for a lucide icon |
A kanban view with no select/status column, or a calendar view with no date/datetime column, errors unless one is passed explicitly.
Returns — { created: true, view }
update_database_view
Rename a view, change its icon, or patch fields within its existing config (filters, sorts, groupByCol, dateCol, cardProperties, etc — merged into the current config). A view's type (table/kanban/calendar) can't be changed after creation; create a new view instead.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
databaseId |
string | ✓ | Database ID |
viewId |
string | ✓ | View ID (from get_database_schema) |
name |
string | New view name | |
icon |
string | Emoji, "lucide:Name", or image URL |
|
iconColor |
string | Theme color for a lucide icon | |
config |
object | Partial config fields to merge in, e.g. { "groupByCol": "col_abc123" } |
Returns — { updated: true, view }
delete_database_view
Delete a saved view. Requires confirm: true. A database must always keep at least one view — deleting the last one errors.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
databaseId |
string | ✓ | Database ID | |
viewId |
string | ✓ | View ID (from get_database_schema) |
|
confirm |
boolean | false |
Set to true to confirm deletion |
Returns — { deleted: true }
add_comment
Add a comment to a page or database row, in a thread separate from its markdown body — a place to leave running notes or a closure note as you work. Comments you add here cannot be edited or deleted by you afterward; use update_page for content you need to revise.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
string | ✓ | Workspace item ID or database row ID | |
body |
string | ✓ | Comment text (max 4,000 characters) | |
kind |
"note" | "closure" |
"note" |
Marks the comment as a running note or a closing note |
Returns — { id, createdAt }