create_surface
Create a new surface (tab) inside a workspace. kind picks table, doc, html, or files. Optional slug (lowercase kebab-case, 3-64 chars); when omitted the server slugifies name and appends a numeric suffix on collision. Optional columns overrides the default Title/Status/Notes triple for table kinds; ignored for doc and html. html surfaces start with an empty body — write content via update_html. files surfaces start empty; browse them with list_files / get_file / list_recent_files (agent byte-upload is off on this server, so a human puts the files in). Editor role required. Emits surface.created so live listeners on the workspace stream see the new tab without a refetch.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Surface kind. `table` for rows + columns, `doc` for TipTap body, `html` for a sandboxed HTML mockup tab, `files` for uploaded files + folders. | |
| name | Yes | Display name shown on the tab. 1-64 chars. | |
| slug | Yes | The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace. | |
| columns | No | Optional initial columns for `table` kind. Same shape as get_workspace_schema returns. Defaults to Title/Status/Notes when omitted. | |
| surface_slug | No | Optional URL-friendly slug for the surface (lowercase kebab-case, 3-64 chars). Auto-derived from `name` when omitted. |