> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Mural

The Mural connector lets your AI agent act in each user's Mural account. Each user signs in to Mural once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 61 tools.

**Authentication:** OAuth 2.0
**Categories:** Design, Collaboration
**Tools:** 61: 25 read, 30 write, 6 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Mural app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=MURAL)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Mural connection

   In **AgentKit > Connections**, create a Mural connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Mural connections use your own OAuth app. Register one with Mural and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Mural connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'mural'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Mural:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'mural_get_current_user',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "mural"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Mural:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="mural_get_current_user",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'mural_get_current_user',
  toolInput: {},
  connector: 'mural',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="mural_get_current_user",
    tool_input={},
    connection_name="mural",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `mural_get_current_user`

Get Current User · Read-only

Get the profile of the authenticated Mural user.
Returns a value object with the user's id, name, avatar, and company information.
Use to confirm which account is connected. Requires the identity:read scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `mural_get_mural`

Get Mural · Read-only

Get one mural the authenticated user can read.
Returns a value object with the mural's id, title, dimensions, timestamps, sharing and visitor settings.
Use after a list or search tool to read full mural details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_get_mural_chat`

Get Mural Chat · Read-only

Get the chat messages of a mural.
Returns a value array of chat messages and a next token.
Use to read discussion that happened in a mural.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_get_mural_export`

Get Mural Export · Read-only

Get the download URL of a mural export started with mural_export_mural.
Returns a value object with exportId, muralId, url, createdOn, and expireOn.
Use after mural_export_mural. The URL expires at expireOn.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `export_id` (`string`, required): Identifier returned by mural_export_mural.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"export_id":"<export_id>","mural_id":"<mural_id>"}`

### `mural_get_room`

Get Room · Read-only

Get one room the authenticated user can read.
Returns a value object with the room's id, name, description, type, confidential flag, workspaceId, and timestamps.
Use after a list or search tool to read full room details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.

Example input: `{"room_id":1}`

### `mural_get_tag`

Get Tag · Read-only

Get one tag on a mural.
Returns a value object with the tag's id, text, and colors.
Use mural_list_tags to see all tags.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `tag_id` (`string`, required): Unique identifier of the tag. Get it from mural_list_tags.

Example input: `{"mural_id":"<mural_id>","tag_id":"<tag_id>"}`

### `mural_get_widget`

Get Widget · Read-only

Get one widget on a mural by ID.
Returns a value object with the widget's type, position, size, text, and style.
Use mural_list_widgets to discover widget IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_get_workspace`

Get Workspace · Read-only

Get one workspace the authenticated user can read.
Returns a value object with the workspace's id, name, and settings.
Use mural_list_workspaces to browse workspaces instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_default_templates`

List Default Templates · Read-only

List Mural's default templates.
Returns a value array of templates (id, name, description, category) and a next token.
Use mural_list_workspace_templates to include a workspace's custom templates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{}`

### `mural_list_mural_users`

List Mural Users · Read-only

List the members and guests of a mural.
Returns a value array of users and a next token.
Use to see who has access. Use mural_list_room_users for a room.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_list_open_rooms`

List Open Rooms · Read-only

List the discoverable open rooms in a workspace.
Returns a value array of rooms and a next token.
Use to find rooms the user could join. Use mural_list_workspace_rooms for rooms the user already accesses.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_recent_murals`

List Recent Murals · Read-only

List the active murals the authenticated user opened most recently in a workspace.
Returns a value array of mural summaries and a next token.
Use for a quick shortlist. Use mural_list_workspace_murals for the full set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_recent_templates`

List Recent Templates · Read-only

List the templates the authenticated user used recently in a workspace.
Returns a value array of templates and a next token.
Use for a shortlist. Use mural_list_workspace_templates for all templates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `without_default` (`boolean`, optional): Set true to leave out Mural's default templates and return only custom ones.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_room_folders`

List Room Folders · Read-only

List the folders in a room.
Returns a value array of folders with id, name, and nested children, plus a next token.
Use to find a folder_id for creating or moving murals.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"room_id":1}`

### `mural_list_room_murals`

List Room Murals · Read-only

List the murals in a room that the authenticated user can read, optionally within one folder.
Returns a value array of mural summaries and a next token.
Use to browse a single room. Use mural_list_workspace_murals across the workspace.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `folder_id` (`string`, optional): Only return murals in this folder. Get folder IDs from mural_list_room_folders.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `sort_by` (`string`, optional): Sort order: lastCreated (newest first), lastModified (most recently changed first), or oldest. One of: `lastCreated`, `lastModified`, `oldest`.
- `status` (`string`, optional): Filter murals by status: active or archived. One of: `active`, `archived`.

Example input: `{"room_id":1}`

### `mural_list_room_users`

List Room Users · Read-only

List the members and guests of a room.
Returns a value array of users and a next token.
Use to see who has access to a room. Use mural_list_mural_users for a single mural.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"room_id":1}`

### `mural_list_tags`

List Tags · Read-only

List the tags defined on a mural.
Returns a value array of tags with id, text, backgroundColor, borderColor, and color.
Use to find a tag_id to attach to sticky notes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_list_widgets`

List Widgets · Read-only

List widgets on a mural, optionally filtered by type or parent. Drawings are not included.
Returns a value array of widgets (id, type, position, size, text, style) and a next token.
Use to find widget_ids before reading, updating, or deleting. Use mural_get_widget for one widget.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `parent_id` (`string`, optional): Only return widgets inside this parent widget, such as an area.
- `type` (`string`, optional): Comma-separated widget types to return: areas, arrows, comments, files, sticky notes, texts, icons, images, shapes. Omit for all types.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_list_workspace_murals`

List Workspace Murals · Read-only

List murals the authenticated user owns or is a member of in a workspace.
Returns a value array of mural summaries (id, title, thumbnail, timestamps) and a next token.
Use to browse all murals. Use mural_list_recent_murals for recently opened ones, mural_search_murals for a text query, mural_list_room_murals to scope to a room.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `sort_by` (`string`, optional): Sort order: lastCreated (newest first), lastModified (most recently changed first), or oldest. One of: `lastCreated`, `lastModified`, `oldest`.
- `status` (`string`, optional): Filter murals by status: active or archived. One of: `active`, `archived`.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_workspace_rooms`

List Workspace Rooms · Read-only

List rooms in a workspace that the authenticated user can read.
Returns a value array of rooms (id, name, type, workspaceId) and a next token.
Use to find a room_id. Use mural_list_open_rooms for discoverable open rooms, mural_search_rooms for a text query.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_workspace_templates`

List Workspace Templates · Read-only

List default and custom templates available in a workspace.
Returns a value array of templates and a next token.
Use to find a template_id. Use mural_list_recent_templates for recently used ones, mural_search_templates for a text query.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `without_default` (`boolean`, optional): Set true to leave out Mural's default templates and return only custom ones.

Example input: `{"workspace_id":"<workspace_id>"}`

### `mural_list_workspaces`

List Workspaces · Read-only

List the Mural workspaces the authenticated user belongs to, active or inactive.
Returns a value array of workspaces (id, name, and related properties) and a next token for further pages.
Use to find a workspace_id. Use mural_get_workspace for one workspace.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{}`

### `mural_search_murals`

Search Murals · Read-only

Search murals in a workspace by text, optionally within one room.
Returns a value array of matching mural summaries and a next token.
Use when you have keywords. Use mural_list_workspace_murals to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Text to search for. Must not be empty.
- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.
- `room_id` (`integer`, optional): Restrict results to murals in this room.

Example input: `{"q":"<q>","workspace_id":"<workspace_id>"}`

### `mural_search_rooms`

Search Rooms · Read-only

Search rooms in a workspace by text.
Returns a value array of matching rooms and a next token.
Use when you have keywords. Use mural_list_workspace_rooms to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Text to search for. Must not be empty.
- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"q":"<q>","workspace_id":"<workspace_id>"}`

### `mural_search_templates`

Search Templates · Read-only

Search the custom templates a user owns or can access in a workspace.
Returns a value array of matching templates and a next token.
Use when you have keywords. Use mural_list_workspace_templates to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Text to search for. Must not be empty.
- `workspace_id` (`string`, required): Identifier of the workspace. Get it from the list workspaces tool.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Omit to use the server default.
- `next` (`string`, optional): Pagination token from the 'next' field of a previous response. Omit to start at the first page.

Example input: `{"q":"<q>","workspace_id":"<workspace_id>"}`

### `mural_create_area`

Create Area · Write

Create an area (container) widget on a mural.
Returns a value object with the created area (id, position, size, title).
Use to group widgets. Pass the area's id as parent_id when creating widgets inside it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `background_color` (`string`, optional): Fill color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_style` (`string`, optional): Border style: solid, dashed, dotted-spaced, or dotted. One of: `solid`, `dashed`, `dotted-spaced`, `dotted`.
- `border_width` (`number`, optional): Border width in px, from 1 to 7.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `layout` (`string`, optional): How widgets inside the area are arranged: free, column, or row. One of: `free`, `column`, `row`.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `show_title` (`boolean`, optional): Set true to show the area title.
- `title` (`string`, optional): Title of the area.
- `title_font_size` (`number`, optional): Font size of the area title.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>"}`

### `mural_create_arrow`

Create Arrow · Write

Create an arrow widget on a mural, optionally connecting two widgets.
Returns a value object with the created arrow (id, points, position).
Use to link shapes or notes. Set start_ref_id and end_ref_id to attach it to widgets.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `height` (`number`, required): Height of the widget in px.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `points` (`array`, required): Two or more points, each with x and y in px, that the arrow passes through.
- `width` (`number`, required): Width of the widget in px.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `arrow_type` (`string`, optional): Line shape: straight, curved, or orthogonal. One of: `straight`, `curved`, `orthogonal`.
- `end_ref_id` (`string`, optional): ID of the widget the arrow ends at.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `start_ref_id` (`string`, optional): ID of the widget the arrow starts from.
- `stroke_color` (`string`, optional): Line color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `stroke_style` (`string`, optional): Line style: solid, dashed, dotted-spaced, or dotted. One of: `solid`, `dashed`, `dotted-spaced`, `dotted`.
- `stroke_width` (`number`, optional): Line width in px, from 1 to 7.
- `tip` (`string`, optional): Arrow tip: no tip, single, or double. One of: `no tip`, `single`, `double`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.

Example input: `{"height":1,"mural_id":"<mural_id>","points":[],"width":1,"x":1,"y":1}`

### `mural_create_comment`

Create Comment · Write

Create a comment widget on a mural, optionally attached to another widget.
Returns a value object with the created comment (id, message, position).
Use to leave feedback on a mural. Use mural_update_comment to resolve or edit it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `message` (`string`, required): Text of the comment.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `reference_widget_id` (`string`, optional): ID of the widget this comment is attached to.
- `resolved` (`boolean`, optional): Set true to create the comment already resolved.

Example input: `{"message":"<message>","mural_id":"<mural_id>","x":1,"y":1}`

### `mural_create_mural`

Create Mural · Write

Create a blank mural in a room the authenticated user can write to.
Returns a value object with the new mural's id, title, and settings.
Use mural_create_mural_from_template to start from a template. Needs a room_id from the list rooms tools.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `room_id` (`integer`, required): Numeric ID of the room that will contain the mural.
- `background_color` (`string`, optional): Background color of the mural. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `folder_id` (`string`, optional): ID of a folder inside the room to place the mural in.
- `height` (`number`, optional): Height of the mural canvas in px.
- `infinite` (`boolean`, optional): Set true for a borderless canvas that grows as widgets are added.
- `title` (`string`, optional): Title of the new mural.
- `width` (`number`, optional): Width of the mural canvas in px.

Example input: `{"room_id":1}`

### `mural_create_mural_from_template`

Create Mural From Template · Write

Create a mural in a room from a default or custom template.
Returns a value object with the new mural's id, title, and settings.
Use to start from a template. Get template_id from mural_list_workspace_templates.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `room_id` (`integer`, required): Numeric ID of the room that will contain the mural.
- `template_id` (`string`, required): Unique identifier of the template. Get it from the template list tools.
- `title` (`string`, required): Title of the new mural.
- `folder_id` (`string`, optional): ID of a folder in the room to place the mural in.

Example input: `{"room_id":1,"template_id":"<template_id>","title":"<title>"}`

### `mural_create_room`

Create Room · Write

Create an open or private room in a workspace.
Returns a value object with the new room's id, name, type, and workspaceId.
Use to set up a space for murals. Needs a workspace_id from mural_list_workspaces.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the room.
- `type` (`string`, required): Room visibility: open (discoverable) or private. One of: `open`, `private`.
- `workspace_id` (`string`, required): ID of the workspace that will contain the room.
- `confidential` (`boolean`, optional): Set true to mark the room confidential.
- `description` (`string`, optional): Description of the room.

Example input: `{"name":"<name>","type":"open","workspace_id":"<workspace_id>"}`

### `mural_create_room_folder`

Create Room Folder · Write

Create a folder in a room, optionally inside another folder.
Returns a value object with the folder's id, name, and children.
Use to organize murals. Needs a room_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the folder.
- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `parent_id` (`string`, optional): ID of an existing folder to nest this one under.

Example input: `{"name":"<name>","room_id":1}`

### `mural_create_shape`

Create Shape · Write

Create a shape widget on a mural.
Returns a value array containing the created widget (id, type, position, size, text).
Use for diagrams and flowcharts. Use mural_create_arrow to connect shapes.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `shape` (`string`, required): Shape type, such as rectangle, circle, diamond, or decision. One of: `circle`, `diamond`, `hexagon`, `pentagon`, `square`, `triangle`, `arrow_down`, `arrow_left_right`, `arrow_left`, `arrow_right`, `arrow_top`, `badge`, `brace_left`, `brace_right`, `chonk_unicorn`, `cloud`, `connector`, `cross`, `data`, `database`, `decision`, `delay`, `direct_data`, `display`, `document`, `ellipse`, `end`, `hexagon_smart`, `internal_storage`, `manual_input`, `manual_loop`, `merge`, `multiple_documents`, `note_left`, `note_right`, `octagon`, `off_page_connector`, `or`, `papertape`, `pentagon_smart`, `porongo`, `predefined_process`, `preparation`, `process`, `rectangle`, `rhombus_smart`, `ribbon`, `right_triangle`, `rounded_square`, `simple_ribbon`, `speech_bubble_center`, `speech_bubble_left`, `speech_bubble_right`, `star`, `start`, `step`, `stored_data`, `summing_junction`, `teardrop_bubble`, `terminator`, `thinking_bubble_left`, `thinking_bubble_right`, `trapezoid`, `triangle_smart`.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `background_color` (`string`, optional): Fill color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_style` (`string`, optional): Border style: solid or dotted. One of: `solid`, `dotted`.
- `border_width` (`number`, optional): Border width in px.
- `font_color` (`string`, optional): Text color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `html_text` (`string`, optional): Text with inline HTML formatting. Takes priority over text when both are set.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Plain text shown inside the shape.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.

Example input: `{"mural_id":"<mural_id>","shape":"circle","x":1,"y":1}`

### `mural_create_sticky_note`

Create Sticky Note · Write

Create a sticky note on a mural.
Returns a value array containing the created widget (id, type, position, size, text).
Use for short ideas or comments. Use mural_create_textbox for free text. Use mural_update_sticky_note to edit one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `shape` (`string`, required): Shape of the sticky note: circle or rectangle. One of: `circle`, `rectangle`.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `background_color` (`string`, optional): Background color of the note. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `bold` (`boolean`, optional): Set true for bold text.
- `font_size` (`number`, optional): Font size of the text.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `html_text` (`string`, optional): Text with inline HTML formatting (b, i, u, s, ul, ol, li). Takes priority over text when both are set.
- `hyperlink` (`string`, optional): URL the note links to.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `italic` (`boolean`, optional): Set true for italic text.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `tags` (`array`, optional): IDs of existing tags to attach. Get tag IDs from mural_list_tags.
- `text` (`string`, optional): Plain text shown on the sticky note.
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.

Example input: `{"mural_id":"<mural_id>","shape":"circle","x":1,"y":1}`

### `mural_create_table`

Create Table · Write

Create a table widget on a mural from column, row, and cell definitions.
Returns a value array containing the created table widgets.
Use for structured grids. Define columns, rows, and cells together; cells reference column and row IDs.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `cells` (`array`, required): Cell definitions, one per grid position, each referencing a columnId and rowId and holding the cell text. Example: [{"columnId": "c1", "rowId": "r1", "text": "Name"}].
- `columns` (`array`, required): Column definitions. Each column needs a columnId you choose and a width in px.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `rows` (`array`, required): Row definitions. Each row needs a rowId you choose and a height in px.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `auto_resize` (`boolean`, optional): Set true to let rows grow to fit their text.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.

Example input: `{"cells":[{"columnId":"c1","rowId":"r1","text":"Name"}],"columns":[],"mural_id":"<mural_id>","rows":[],"x":1,"y":1}`

### `mural_create_tag`

Create Tag · Write

Create a tag on a mural.
Returns a value object with the new tag's id, text, and colors.
Use before tagging sticky notes. Tag text is limited to 25 characters.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `text` (`string`, required): Tag text, up to 25 characters.
- `background_color` (`string`, optional): Tag background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Tag border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `color` (`string`, optional): Tag text color. Hex color with alpha channel, 8 uppercase hex digits after the #.

Example input: `{"mural_id":"<mural_id>","text":"<text>"}`

### `mural_create_template`

Create Template · Write

Create a custom template from an existing mural.
Returns a value object with the new template's id, name, and description.
Use to reuse a mural's layout. Use mural_create_mural_from_template to apply a template.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): ID of the mural to turn into a template.
- `title` (`string`, required): Title of the template.
- `description` (`string`, optional): Description of the template.

Example input: `{"mural_id":"<mural_id>","title":"<title>"}`

### `mural_create_textbox`

Create Textbox · Write

Create a text box on a mural.
Returns a value array containing the created widget (id, type, position, size, text).
Use for free-form text. Use mural_create_title for headings and mural_create_sticky_note for ideas.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `background_color` (`string`, optional): Background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `font` (`string`, optional): Font family. One of: `adelle`, `blambot-casual`, `blambot-pro`, `lint-mccree`, `marker-felt`, `museo-slab`, `proxima-nova`, `shark-water`.
- `font_size` (`number`, optional): Font size of the text.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Text of the text box. Supports inline HTML formatting (b, i, u, s).
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.

Example input: `{"mural_id":"<mural_id>","x":1,"y":1}`

### `mural_create_title`

Create Title · Write

Create a title (heading) widget on a mural.
Returns a value array containing the created widget (id, type, position, size, text).
Use for large headings. Use mural_create_textbox for body text.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `x` (`number`, required): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, required): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).
- `background_color` (`string`, optional): Background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `font` (`string`, optional): Font family. One of: `adelle`, `blambot-casual`, `blambot-pro`, `lint-mccree`, `marker-felt`, `museo-slab`, `proxima-nova`, `shark-water`.
- `font_size` (`number`, optional): Font size of the title.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Text of the title. Supports inline HTML formatting (b, i, u, s).
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.

Example input: `{"mural_id":"<mural_id>","x":1,"y":1}`

### `mural_duplicate_mural`

Duplicate Mural · Write

Duplicate a mural into a room under a new title.
Returns a value object with the new mural's id, title, and settings.
Use to copy an existing mural. Use mural_create_mural_from_template to copy a template.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `room_id` (`integer`, required): Numeric ID of the room that will contain the copy.
- `title` (`string`, required): Title of the duplicated mural.
- `folder_id` (`string`, optional): ID of a folder in the room to place the copy in.
- `infinite` (`boolean`, optional): Set true for a borderless canvas on the copy.

Example input: `{"mural_id":"<mural_id>","room_id":1,"title":"<title>"}`

### `mural_export_mural`

Export Mural · Write

Start an export of a mural to a file, such as a PDF.
Returns a value object with an exportId.
Use the exportId with mural_get_mural_export to get the download URL once the export is ready.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `download_format` (`string`, required): File extension to export to.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"download_format":"<download_format>","mural_id":"<mural_id>"}`

### `mural_invite_mural_users`

Invite Mural Users · Write

Invite members or guests to a mural by email address or username.
Returns a value array with one result per invitation (email, username, refCode, rejected, reason).
Inviting by email sends an invitation email. Inviting by username adds the user immediately. Use mural_invite_room_users for a room.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `invitations` (`array`, required): People to invite. Each entry has an email or a username, and an optional editPermission of view or edit. Example: [{"email": "sam@example.com", "editPermission": "edit"}].
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `message` (`string`, optional): Personal message included in the invitation.
- `send_email` (`boolean`, optional): Set false to skip the invitation email.

Example input: `{"invitations":[{"email":"sam@example.com","editPermission":"edit"}],"mural_id":"<mural_id>"}`

### `mural_invite_room_users`

Invite Room Users · Write

Invite members or guests to a room by email address or username.
Returns a value array with one result per invitation (email, username, refCode, rejected, reason).
Inviting by email sends an invitation email. Inviting by username adds the user immediately. Use mural_invite_mural_users for a single mural.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `invitations` (`array`, required): People to invite. Each entry has an email or a username. Example: [{"email": "sam@example.com"}].
- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `message` (`string`, optional): Personal message included in the invitation.
- `send_email` (`boolean`, optional): Set false to skip the invitation email.

Example input: `{"invitations":[{"email":"sam@example.com"}],"room_id":1}`

### `mural_remove_mural_users`

Remove Mural Users · Write

Remove members or guests from a mural by email address.
Returns a value array of the removal results.
Use to revoke access to one mural. Use mural_remove_room_users for a room.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `emails` (`array`, required): Email addresses of the users to remove.
- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"emails":[],"mural_id":"<mural_id>"}`

### `mural_remove_room_users`

Remove Room Users · Write

Remove members or guests from a room by email address.
Returns a value array of the removal results.
Use to revoke access to a room. Use mural_remove_mural_users for a single mural.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `emails` (`array`, required): Email addresses of the users to remove.
- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.

Example input: `{"emails":[],"room_id":1}`

### `mural_update_area`

Update Area · Write

Update an area widget on a mural.
Returns a value object with the updated area.
Use to rename, move, resize, or restyle an area. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `background_color` (`string`, optional): Fill color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_style` (`string`, optional): Border style: solid, dashed, dotted-spaced, or dotted. One of: `solid`, `dashed`, `dotted-spaced`, `dotted`.
- `border_width` (`number`, optional): Border width in px, from 1 to 7.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `layout` (`string`, optional): How widgets inside the area are arranged: free, column, or row. One of: `free`, `column`, `row`.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `show_title` (`boolean`, optional): Set true to show the area title.
- `title` (`string`, optional): Title of the area.
- `title_font_size` (`number`, optional): Font size of the area title.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_arrow`

Update Arrow · Write

Update an arrow widget on a mural.
Returns a value object with the updated arrow.
Use to reroute, restyle, or reattach an arrow. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `arrow_type` (`string`, optional): Line shape: straight, curved, or orthogonal. One of: `straight`, `curved`, `orthogonal`.
- `end_ref_id` (`string`, optional): ID of the widget the arrow ends at.
- `height` (`number`, optional): Height of the widget in px.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `points` (`array`, optional): Replacement list of two or more points, each with x and y in px.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `start_ref_id` (`string`, optional): ID of the widget the arrow starts from.
- `stroke_color` (`string`, optional): Line color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `stroke_style` (`string`, optional): Line style: solid, dashed, dotted-spaced, or dotted. One of: `solid`, `dashed`, `dotted-spaced`, `dotted`.
- `stroke_width` (`number`, optional): Line width in px, from 1 to 7.
- `tip` (`string`, optional): Arrow tip: no tip, single, or double. One of: `no tip`, `single`, `double`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_comment`

Update Comment · Write

Update a comment widget on a mural: edit it, move it, resolve it, or add replies.
Returns a value object with the updated comment.
Use to resolve a comment (resolved true) or add replies. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `message` (`string`, optional): New text of the comment.
- `reference_widget_id` (`string`, optional): ID of the widget this comment is attached to.
- `replies` (`array`, optional): Reply messages to add to the comment thread.
- `resolved` (`boolean`, optional): Set true to mark the comment resolved.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_mural`

Update Mural · Write

Update a mural's title, size, background, status, folder, or access permissions.
Returns a value object with the updated mural.
Use to rename, archive (status archived), or change permissions. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `background_color` (`string`, optional): Background color of the mural. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `favorite` (`boolean`, optional): Set true to favorite the mural for the authenticated user.
- `folder_id` (`string`, optional): Move the mural to this folder ID.
- `height` (`integer`, optional): Canvas height in px, between 3000 and 60000.
- `infinite` (`boolean`, optional): Set true for a borderless canvas that grows as widgets are added.
- `status` (`string`, optional): Set to archived to archive the mural or active to restore it. One of: `active`, `archived`.
- `title` (`string`, optional): New title for the mural.
- `visitors_permission` (`string`, optional): Access level for visitors: read, write, or none. One of: `read`, `write`, `none`.
- `width` (`integer`, optional): Canvas width in px, between 3000 and 60000.
- `workspace_members_permission` (`string`, optional): Access level for workspace members: read, write, or none. One of: `read`, `write`, `none`.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_update_room`

Update Room · Write

Update a room's name, description, type, or favorite flag.
Returns a value object with the updated room.
Use to rename or change a room's visibility. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.
- `description` (`string`, optional): New description for the room.
- `favorite` (`boolean`, optional): Set true to favorite the room for the authenticated user.
- `name` (`string`, optional): New name for the room.
- `type` (`string`, optional): Room visibility: open or private. One of: `open`, `private`.

Example input: `{"room_id":1}`

### `mural_update_shape`

Update Shape · Write

Update a shape widget on a mural.
Returns a value object with the updated widget.
Use to edit shape text, position, or style. The shape type itself cannot be changed. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `background_color` (`string`, optional): Fill color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_style` (`string`, optional): Border style: solid or dotted. One of: `solid`, `dotted`.
- `border_width` (`number`, optional): Border width in px.
- `font_color` (`string`, optional): Text color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `html_text` (`string`, optional): Text with inline HTML formatting. Takes priority over text when both are set.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Plain text shown inside the shape.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_sticky_note`

Update Sticky Note · Write

Update a sticky note on a mural.
Returns a value object with the updated widget.
Use to edit text, position, or style. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `background_color` (`string`, optional): Background color of the note. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `bold` (`boolean`, optional): Set true for bold text.
- `font_size` (`number`, optional): Font size of the text.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `html_text` (`string`, optional): Text with inline HTML formatting (b, i, u, s). Takes priority over text when both are set.
- `hyperlink` (`string`, optional): URL the note links to.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `italic` (`boolean`, optional): Set true for italic text.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `tags` (`array`, optional): Full list of tag IDs for the note, replacing the current tags.
- `text` (`string`, optional): Plain text shown on the sticky note.
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_tag`

Update Tag · Write

Update a tag's text or colors on a mural.
Returns a value object with the updated tag.
Use to rename or recolor a tag. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `tag_id` (`string`, required): Unique identifier of the tag. Get it from mural_list_tags.
- `background_color` (`string`, optional): Tag background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `border_color` (`string`, optional): Tag border color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `color` (`string`, optional): Tag text color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `text` (`string`, optional): Tag text, up to 25 characters.

Example input: `{"mural_id":"<mural_id>","tag_id":"<tag_id>"}`

### `mural_update_textbox`

Update Textbox · Write

Update a text box on a mural.
Returns a value object with the updated widget.
Use to edit text, position, or style. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `background_color` (`string`, optional): Background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `font` (`string`, optional): Font family. One of: `adelle`, `blambot-casual`, `blambot-pro`, `lint-mccree`, `marker-felt`, `museo-slab`, `proxima-nova`, `shark-water`.
- `font_size` (`number`, optional): Font size of the text.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Text of the text box. Supports inline HTML formatting (b, i, u, s).
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_update_title`

Update Title · Write

Update a title widget on a mural.
Returns a value object with the updated widget.
Use to edit heading text, position, or style. Only send the fields to change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.
- `background_color` (`string`, optional): Background color. Hex color with alpha channel, 8 uppercase hex digits after the #.
- `font` (`string`, optional): Font family. One of: `adelle`, `blambot-casual`, `blambot-pro`, `lint-mccree`, `marker-felt`, `museo-slab`, `proxima-nova`, `shark-water`.
- `font_size` (`number`, optional): Font size of the title.
- `height` (`number`, optional): Height of the widget in px.
- `hidden` (`boolean`, optional): Set true to hide the widget from participants.
- `instruction` (`string`, optional): Facilitator instruction attached to the widget.
- `parent_id` (`string`, optional): ID of a parent widget, such as an area, to place this widget inside.
- `rotation` (`number`, optional): Rotation angle in degrees, from 0 up to but not including 360.
- `text` (`string`, optional): Text of the title. Supports inline HTML formatting (b, i, u, s).
- `text_align` (`string`, optional): Text alignment: left, center, or right. One of: `left`, `center`, `right`.
- `title` (`string`, optional): Title of the widget, shown as its label in the mural.
- `width` (`number`, optional): Width of the widget in px.
- `x` (`number`, optional): Horizontal position in px, measured from the left of the parent widget (or the mural if there is no parent).
- `y` (`number`, optional): Vertical position in px, measured from the top of the parent widget (or the mural if there is no parent).

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

### `mural_delete_mural`

Delete Mural · Destructive

Delete a mural the authenticated user owns.
Returns no body on success (HTTP 204).
Use mural_update_mural with status archived for a reversible removal.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.

Example input: `{"mural_id":"<mural_id>"}`

### `mural_delete_room`

Delete Room · Destructive

Delete a room the authenticated user owns.
Returns no body on success (HTTP 204).
Deletion is permanent. Confirm the room_id with mural_get_room first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.

Example input: `{"room_id":1}`

### `mural_delete_room_folder`

Delete Room Folder · Destructive

Delete a folder from a room together with its sub-folders and murals.
Returns no body on success (HTTP 204).
Deletion is permanent and includes the murals inside. Check contents with mural_list_room_murals first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): Unique identifier of the folder. Get it from mural_list_room_folders.
- `room_id` (`integer`, required): Numeric identifier of the room. Get it from the list rooms tools.

Example input: `{"folder_id":"<folder_id>","room_id":1}`

### `mural_delete_tag`

Delete Tag · Destructive

Delete a tag from a mural.
Returns no body on success (HTTP 204).
Use to remove an unused tag. Check mural_list_tags first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `tag_id` (`string`, required): Unique identifier of the tag. Get it from mural_list_tags.

Example input: `{"mural_id":"<mural_id>","tag_id":"<tag_id>"}`

### `mural_delete_template`

Delete Template · Destructive

Delete a custom template the authenticated user owns.
Returns no body on success (HTTP 204).
Deletion is permanent. Murals already created from the template are not affected.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`string`, required): Unique identifier of the template. Get it from the template list tools.

Example input: `{"template_id":"<template_id>"}`

### `mural_delete_widget`

Delete Widget · Destructive

Delete a widget and its content from a mural.
Returns no body on success (HTTP 204).
Deletion is permanent. Confirm the widget with mural_get_widget first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `mural_id` (`string`, required): Unique identifier of the mural, in the form <workspaceId>.<timestamp>. Get it from mural list or search tools.
- `widget_id` (`string`, required): Unique identifier of the widget on the mural. Get it from the list widgets tool.

Example input: `{"mural_id":"<mural_id>","widget_id":"<widget_id>"}`

## Related

Other Design connectors ([all 22](/agentkit/connectors/?category=design)):

- [Figma](/agentkit/connectors/figma/): Scalekit connector, OAuth, 54 tools
- [Miro](/agentkit/connectors/miro/): Scalekit connector, OAuth, 115 tools
- [Brandfetch MCP server](/agentkit/connectors/brandfetchmcp/): Vendor MCP, OAuth, 9 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
