{"name":"superset","title":"Superset","icon":"https://superset.sh/apple-touch-icon.png","description":"Superset MCP server: create Git-worktree workspaces, launch coding-agent sessions, schedule automations, open terminals, and manage tasks on behalf of a Superset user.","version":"0.1.0","serverUrl":"https://api.superset.sh/mcp","transport":"streamable-http","documentationUrl":"https://docs.superset.sh/mcp-server","authentication":{"type":"oauth2","resourceMetadataUrl":"https://api.superset.sh/.well-known/oauth-protected-resource","description":"OAuth 2.1 authorization code + PKCE with RFC 7591 dynamic client registration, or a user-issued Superset API key as a Bearer token. Walkthrough: https://superset.sh/auth.md"},"tools":[{"name":"tasks_list","description":"List tasks in the active organization, optionally filtered by status, priority, assignee, or a free-text search. Use this when the user asks 'what tasks are open', 'find tasks about X', or 'what's assigned to me'.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"statusId":{"description":"Filter by status ID. UUIDs only — call tasks_list first if you don't have one.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"priority":{"description":"Filter by priority.","anyOf":[{"type":"string","enum":["urgent","high","medium","low","none"]},{"type":"null"}]},"assigneeId":{"description":"Filter by assignee user ID.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"assigneeMe":{"description":"Shorthand for tasks assigned to the calling user.","anyOf":[{"type":"boolean"},{"type":"null"}]},"creatorMe":{"description":"Shorthand for tasks created by the calling user.","anyOf":[{"type":"boolean"},{"type":"null"}]},"search":{"description":"Free-text search on title.","anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"limit":{"default":50,"description":"Max tasks to return. Default 50, max 500.","type":"integer","exclusiveMinimum":0,"maximum":500},"offset":{"default":0,"description":"Pagination offset.","type":"integer","minimum":0,"maximum":9007199254740991}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tasks_get","description":"Fetch one task by UUID or human slug. Use this when you have a task ID or slug from a list call or the user.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"idOrSlug":{"type":"string","minLength":1,"description":"Task UUID (e.g. tsk_…) or slug (e.g. fix-login-bug)."}},"required":["idOrSlug"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tasks_create","description":"Create a task in the active organization. Use this when the user describes work they want to track. The task is auto-assigned a default status if statusId is omitted.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Task title."},"description":{"description":"Optional task description.","anyOf":[{"type":"string"},{"type":"null"}]},"statusId":{"description":"Status UUID. Omit to use the org's default status.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"priority":{"default":"none","description":"Task priority. Defaults to 'none'.","type":"string","enum":["urgent","high","medium","low","none"]},"assigneeId":{"description":"Assignee user ID. Omit for unassigned.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"estimate":{"description":"Story-point estimate.","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"dueDate":{"description":"ISO 8601 due date.","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"labels":{"description":"Free-text labels.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["title"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tasks_update","description":"Update fields on an existing task. Only the fields you pass are changed. Omitting a field preserves its current value (set null explicitly to clear nullable fields).","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Task UUID. Use tasks_get to resolve a slug to UUID first."},"title":{"type":"string","minLength":1},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"statusId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"priority":{"type":"string","enum":["urgent","high","medium","low","none"]},"assigneeId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"prUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"estimate":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"dueDate":{"description":"ISO 8601 due date.","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"labels":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tasks_delete","description":"Delete a task by UUID (soft delete — the row is tombstoned, not purged).","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Task UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tasks_statuses_list","description":"List the available task statuses in the active organization. Use this to look up a status id by name (e.g. 'In Progress', 'Done') before creating or updating a task.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"organization_members_list","description":"List members of the active organization. Use this to look up a user's id by name or email before assigning a task or filtering by assignee.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"search":{"description":"Free-text search on name or email.","anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"limit":{"default":50,"description":"Max members to return. Default 50, max 100.","type":"integer","exclusiveMinimum":0,"maximum":100}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_list","description":"List automations (scheduled agent runs) the calling user owns in the active organization. Returns a summary shape — call automations_get_prompt to fetch the prompt for one automation, or automations_get for the rest of its config. Pass `name` to filter rows by case-insensitive substring match on the automation name.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"name":{"description":"Filter rows by case-insensitive substring match on automation name.","anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_get","description":"Get a single automation's metadata. Returns name, schedule, agent, host — the prompt body is omitted (call automations_get_prompt to fetch it). For run history, call automations_logs. Caller must be the automation's owner.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_get_prompt","description":"Fetch the full prompt body (markdown) for one automation. Use this when you need to read or edit the prompt — automations_get and automations_list omit the body to keep responses small. Caller must be the automation's owner.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_create","description":"Schedule a recurring agent run. Provide an RFC 5545 RRULE body for the schedule. Pass v2ProjectId (run in a fresh workspace), v2WorkspaceId (reuse an existing workspace), or neither to run each time in a fresh project-less session workspace — call projects_list or workspaces_list first to get IDs. `agent` is the host-agent instance id (or presetId fallback) that runs the prompt.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Human name for the automation."},"prompt":{"type":"string","minLength":1,"maxLength":100000,"description":"Prompt the agent runs (markdown)."},"agent":{"type":"string","minLength":1,"maxLength":200,"description":"Host agent instance id (UUID from /settings/agents) or presetId (e.g. 'claude', 'codex')."},"targetHostId":{"description":"Host that should run the automation. Defaults to the owner's online host.","anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"v2ProjectId":{"description":"Project UUID. Omit both this and v2WorkspaceId for session mode (fresh project-less session workspace per run).","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"v2WorkspaceId":{"description":"Workspace UUID to reuse. Pass targetHostId with it — required for session workspaces (no cloud record to resolve the host from).","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"rrule":{"type":"string","minLength":1,"maxLength":500,"description":"RFC 5545 RRULE body, no DTSTART prefix. Example: FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=9;BYMINUTE=0"},"dtstart":{"description":"First scheduled fire (ISO 8601). Defaults to now.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string","minLength":1,"description":"IANA timezone (e.g. America/New_York)."},"continueAgentSession":{"description":"Deliver each run's prompt into the agent session the previous run left behind instead of starting another beside it. Requires v2WorkspaceId — that is where the session lives. Use for an automation that should build up one conversation (triaging items one by one) rather than starting clean each time.","type":"boolean"},"tags":{"description":"Workspace tags applied to each run's created workspace; each tag files it into a sidebar folder of the same name. Defaults to ['automation'] so runs group out of the box.","type":"array","items":{"type":"string"}}},"required":["name","prompt","agent","rrule","timezone"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_update","description":"Update metadata on an existing automation (name, schedule, agent, host). Only the fields you pass change. Caller must be the automation's owner. Use automations_set_prompt to change the prompt body.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."},"name":{"type":"string","minLength":1,"maxLength":200},"agent":{"description":"Host agent instance id (UUID from /settings/agents) or presetId.","type":"string","minLength":1,"maxLength":200},"targetHostId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"v2ProjectId":{"description":"Pass null to switch to session mode (no project).","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"v2WorkspaceId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"continueAgentSession":{"description":"Continue the agent session the previous run left, instead of starting another. Requires a pinned v2WorkspaceId.","type":"boolean"},"rrule":{"type":"string","minLength":1,"maxLength":500},"dtstart":{"description":"First scheduled fire (ISO 8601).","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string","minLength":1},"tags":{"description":"Workspace tags applied to each run's created workspace; each tag files it into a sidebar folder of the same name. Update replaces the whole set.","type":"array","items":{"type":"string"}}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_set_prompt","description":"Replace the full prompt body (markdown) for one automation. The new prompt fully overwrites the old one — fetch with automations_get_prompt first if you only want to edit. Caller must be the automation's owner.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."},"prompt":{"type":"string","minLength":1,"maxLength":100000,"description":"Full markdown prompt the automation runs. Replaces the existing prompt entirely."}},"required":["id","prompt"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_delete","description":"Delete an automation. The recurring schedule stops immediately; past runs remain. Caller must be the owner.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_pause","description":"Pause an automation. The recurring schedule stops firing until resumed. Caller must be the owner.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_resume","description":"Resume a paused automation. The next scheduled fire is recomputed from the RRULE. Caller must be the owner.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_run","description":"Dispatch an automation immediately, outside its normal schedule. Returns the new run ID; does not wait for completion. Use automations_logs to track progress.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"automations_logs","description":"List recent runs for an automation. Returns up to `limit` runs ordered newest-first. Caller must be the automation's owner.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"automationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Automation UUID."},"limit":{"default":20,"description":"Max runs to return. Default 20, max 100.","type":"integer","minimum":1,"maximum":100}},"required":["automationId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_list","description":"List workspaces. Without hostId, the organization's cloud workspaces with their status ('provisioning', 'ready', 'failed') — use it to watch one created by workspaces_create reach 'ready'. With hostId, the workspaces on that host (see hosts_list), including the host-served projectName; use this to find a workspace ID for automations_create's v2WorkspaceId.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId to query (see `hosts_list`). Omit to list cloud workspaces (accounts with cloud workspaces only).","type":"string","minLength":1}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_create","description":"Create a workspace. Without hostId it is a cloud workspace: it starts from `environment` (by id or name; its repositories are the checkouts; defaults to the first environment with repositories), runs on Superset's infrastructure so it keeps going when the user's laptop sleeps, and returns as soon as its row exists in status 'provisioning' — poll workspaces_list until it is 'ready'. It bills until deleted, so call workspaces_delete when the work is done. A cloud workspace takes `name`, `branch` and at most one entry in `agents` (claude or codex); host-only fields are rejected. With hostId it is created on that host (see projects_list and hosts_list): use `checkout: local` to share the project checkout without switching branches, or omit checkout for an isolated worktree with a branch or PR; omit `projectId` (and `branch`/`pr`/`baseBranch`/`taskId`) for a project-less session. `agents` spawns agents once the workspace is ready (the equivalent of agents_create) and `command` runs a one-off shell command.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"checkout":{"description":"Where files live. Local shares the project checkout; worktree creates an isolated checkout.","type":"string","enum":["worktree","local"]},"projectId":{"description":"Project UUID. Omit to create a project-less session (managed scratch folder).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"description":"Workspace name. Required on a host; a cloud workspace without one is named from its agent's prompt.","type":"string","minLength":1},"environment":{"description":"Cloud only: environment the workspace starts from, by id or name. Defaults to the first environment with repositories.","type":"string","minLength":1},"branch":{"description":"Git branch the workspace tracks. Omit for a local checkout.","type":"string","minLength":1},"pr":{"description":"Pull request number — server checks out the verified PR head and derives the branch.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"baseBranch":{"description":"Branch to fork from when `branch` does not exist (defaults to project default). Ignored when `pr` is set.","type":"string"},"hostId":{"description":"Host machineId to create the workspace on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"taskId":{"description":"Optional Superset task id to link to the new workspace.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"agents":{"description":"Agents to spawn in the workspace immediately after creation.","type":"array","items":{"type":"object","properties":{"agent":{"type":"string","minLength":1,"description":"Agent preset id (e.g. `claude`, `codex`, `superset`) or HostAgentConfig instance UUID."},"prompt":{"type":"string","minLength":1,"description":"Initial prompt the agent starts with."},"model":{"description":"Model for this launch. Supported values depend on the agent; omit to use its default.","type":"string","minLength":1},"effort":{"description":"Reasoning effort for this launch. Supported values depend on the agent; omit to use its default.","type":"string","minLength":1},"attachmentIds":{"description":"Host-scoped attachment UUIDs. The host resolves these to absolute paths and appends them to the prompt.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["agent","prompt"]}},"command":{"description":"Shell command to run in the new worktree after creation.","type":"string","minLength":1}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_update","description":"Rename a cloud workspace (omit hostId), or rename or retag a workspace on a host (see hosts_list / workspaces_list for the hostId). Tags exist only on host workspaces.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID."},"name":{"description":"New workspace name.","type":"string","minLength":1},"tags":{"description":"Full replacement of the workspace's tag set. Tags are plain strings, normalized to trimmed lowercase; each tag surfaces as a sidebar folder.","type":"array","items":{"type":"string"}}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_delete","description":"Delete a workspace by UUID. Without hostId it is a cloud workspace: its sandbox is torn down, which is what stops it billing (nothing else does, including leaving it idle), and everything inside is destroyed, so push or save work first; returns { deleted: false } when no such workspace exists. With hostId, the host runs the project's teardown script (.superset/config.json teardown commands or .superset/teardown.sh, if configured), then removes the git worktree; a teardown failure does not block the delete and is reported in `warnings`, and 'main'-type workspaces cannot be deleted.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID."}},"required":["id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"agents_create","description":"Create (launch) an agent session inside an existing workspace on its host: runs the named agent preset (or HostAgentConfig instance) with the given prompt in a fresh terminal session. Omit hostId for a cloud workspace; for a host workspace, use hosts_list / workspaces_list to find the hostId. Use this to start a second agent in a workspace that already exists; for create-and-spawn in a single call, pass `agents` to workspaces_create instead.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID to run the agent in."},"agent":{"type":"string","minLength":1,"description":"Agent preset id (e.g. `claude`, `codex`, `superset`) or HostAgentConfig instance UUID."},"prompt":{"description":"Prompt sent to the agent. Required unless resumeSessionId is provided.","type":"string"},"model":{"description":"Model for this launch. Supported values depend on the agent; omit to use its default.","type":"string","minLength":1},"effort":{"description":"Reasoning effort for this launch. Supported values depend on the agent; omit to use its default.","type":"string","minLength":1},"resumeSessionId":{"description":"The agent CLI's own session id to restore instead of starting fresh (e.g. `claude --resume <id>`). NOT the `sessionId` this tool returns — that is a Superset terminal id. Use the id the agent reported (e.g. from the agent's own session list). Fails for agents without an id-based resume.","type":"string","minLength":1},"attachmentIds":{"description":"Host-scoped attachment UUIDs. The host resolves these to absolute paths and appends them to the prompt.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["workspaceId","agent"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"agents_list","description":"List terminal-agent instances configured on a host (the rows in Settings → Agents on that machine). Returns each row with its instance UUID, presetId, label, command, args, and env. Use to find an `agent` value for `agents_create` or to confirm what's installed before launching.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"type":"string","minLength":1,"description":"Host machineId to query. See `hosts_list` to enumerate accessible hosts."}},"required":["hostId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"terminals_create","description":"Create a terminal session in an existing workspace on its host: opens a fresh PTY in the worktree. Omit hostId for a cloud workspace; for a host workspace, use hosts_list / workspaces_list to find the hostId. Pass `command` to run a one-off shell command, or omit it to open an interactive shell. For create-and-run in a single call, pass `command` to workspaces_create instead.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID to create the terminal in."},"command":{"description":"Shell command to run in the terminal. Omit to open an interactive shell.","type":"string","minLength":1},"cwd":{"description":"Working directory for the terminal (defaults to the worktree).","type":"string"}},"required":["workspaceId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"terminals_list","description":"List the live terminal sessions in a workspace (ids, titles, attach state). Use to discover a terminalId to terminals_send/terminals_read/terminals_close against when you didn't keep the one agents_create returned. Omit hostId for a cloud workspace; for a host workspace, use hosts_list / workspaces_list to find the hostId.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID whose terminals to list."}},"required":["workspaceId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"terminals_send","description":"Send text to a terminal ALREADY running in a workspace — e.g. a follow-up prompt to a claude/codex agent — instead of spawning a new session. Targets the terminal by id (the value agents_create returned as `sessionId`, or terminals_create returned as `terminalId`). Use agents_create only to START an agent; use this for every message after. Multi-line text is delivered as a single paste, not separate submits.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID the terminal runs in."},"terminalId":{"type":"string","description":"Terminal id (the `sessionId` agents_create returned, or `terminalId` from terminals_create)."},"text":{"type":"string","minLength":1,"description":"Text to write into the terminal."},"submit":{"description":"Press Enter after the text. Default true.","type":"boolean"}},"required":["workspaceId","terminalId","text"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"terminals_read","description":"Read a terminal's current screen back as plain text — for a claude/codex agent this is the agent's rendered output, so use it to see the reply after terminals_send. Returns what is on screen now (plus recent scrollback), not a full transcript.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID the terminal runs in."},"terminalId":{"type":"string","description":"Terminal id (the `sessionId` agents_create returned, or `terminalId` from terminals_create)."},"maxLines":{"description":"Cap returned rows from the bottom. Omit for the full snapshot.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["workspaceId","terminalId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"terminals_close","description":"Close (dispose) a terminal by id — kills the PTY and the agent running in it. Use to shut down an agent session you started; targets the terminal by id (the value agents_create returned as `sessionId`).","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"description":"Host machineId the workspace lives on. Omit for a cloud workspace (accounts with cloud workspaces only).","type":"string","minLength":1},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Workspace UUID the terminal runs in."},"terminalId":{"type":"string","description":"Terminal id (the `sessionId` agents_create returned, or `terminalId` from terminals_create)."}},"required":["workspaceId","terminalId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_list","description":"List published pages in the active organization, newest-created first. A page is one self-contained HTML file published to a shareable URL. Returns only pages the caller may read: everything shared with the organization, plus the caller's own private ones. Use this to find a page's id or slug before calling any other pages_* tool. Ordering is by creation, so republishing a page does not move it. Results are paginated: pass `search` to narrow by title, slug or description, and when `nextCursor` comes back non-null pass it as `cursor` to get the next batch.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"workspaceId":{"description":"Only pages published from this workspace. Omit for every page in the organization.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"search":{"description":"Only pages whose title, slug or description contains this text, case-insensitive.","anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"limit":{"description":"How many pages to return, 1-200 (default 50).","anyOf":[{"type":"integer","minimum":1,"maximum":200},{"type":"null"}]},"scope":{"description":"`team` for pages shared with the organization, `mine` for the caller's private ones, `all` for both (default).","anyOf":[{"type":"string","enum":["all","team","mine"]},{"type":"null"}]},"cursor":{"description":"The `nextCursor` string from a previous call, passed back unchanged, to fetch the next batch. Omit for the first batch. Treat it as opaque.","anyOf":[{"type":"string","maxLength":256},{"type":"null"}]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_get","description":"Show one published page's metadata: title, description, visibility, public URL, and which version is currently served. Does NOT return the page's HTML — use pages_pull for that. Address the page by id or by slug; exactly one is required.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"id":{"description":"Page UUID.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"slug":{"description":"Page slug, the last path segment of its public URL.","anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_versions","description":"List a page's version history, newest first, with each version's label, size, and who published it. Every publish creates a new version; nothing is overwritten. Address the page by id or slug; exactly one is required.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"id":{"description":"Page UUID.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"slug":{"description":"Page slug.","anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_pull","description":"Get a download URL for a published page's HTML, plus that version's metadata. Fetch the returned `downloadUrl` to read the bytes — this tool does not return the document itself. The URL is signed and expires after an hour, so fetch it promptly and never store it. Use this when you need to see what a page currently says before editing the source it was published from. Address the page by id or by slug; exactly one is required.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"id":{"description":"Page UUID.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"slug":{"description":"Page slug, the last path segment of its public URL.","anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"version":{"description":"A specific version number. Omit for whichever version is currently served.","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_publish","description":"Publish an HTML document as a page and return its public URL. This is how a shareable HTML deliverable gets published in a Superset workspace — prefer it over a Claude artifact whenever a teammate will open the result, since a page is listed in the organization, keeps version history, and takes pinned comments that come back to an agent. ALWAYS read the `superset:page` skill before calling this, whenever that skill is available to you — pages are served from their own origin under a strict content policy, and a document that ignores it looks correct locally and breaks silently once published: no network from script (fetch, XHR, and WebSockets are blocked — bake data into the document as a literal), no `eval` or `new Function` (several chart libraries rely on them and render nothing), and no external scripts or stylesheets (inline all CSS and JS). Images, video, and audio may load from remote hosts, though data: URIs keep the page whole offline. Storage (localStorage, cookies) works and is scoped to the page. A page is ONE self-contained file: pass the document itself in `html`, not a file path. A document over about 4 MB does not fit in a tool call: publish it with the CLI instead (`superset pages publish <path>`), which takes pages up to 16 MB. A call carrying `pageId`, or the same `workspaceId` and `entryPath` as before, adds a version to that page; any other call creates a new page. Keep the `id` this returns: passing it back as `pageId` is what adds a version to that page instead of publishing a second one the reader's existing link will not follow. Working in a workspace, pass `workspaceId` (from `$SUPERSET_WORKSPACE_ID`, or `superset workspaces list`) plus an `entryPath` naming where the page lives in it, and republishing the same path versions it for you. Outside a workspace — a chat session, for instance — omit both and rely on `pageId`.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"html":{"type":"string","minLength":1,"description":"The complete HTML document, as text. Must be self-contained."},"filename":{"description":"Filename recorded for this version, e.g. `report.html`. Defaults to `page.html`.","anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}]},"pageId":{"description":"Publish a new version of this existing page. Omit to create a new page.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"title":{"description":"Page title. Defaults to the filename.","anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"description":{"description":"Short description shown alongside the page.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"label":{"description":"What changed in this version, shown in the version history. Display-only.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"visibility":{"description":"`org` (the default) lets anyone in the organization open it; `just_me` keeps it private to the publisher; `everyone` lets anyone with the link open it without signing in.","anyOf":[{"type":"string","enum":["just_me","org","everyone"]},{"type":"null"}]},"workspaceId":{"description":"The workspace this page belongs to. Pass it whenever you have one — it is how a later publish of the same `entryPath` becomes a version rather than a second page. Check `$SUPERSET_WORKSPACE_ID` before deciding you have none: every agent running in a Superset terminal has it set, and leaving it out there is what turns the next republish into a second page. Otherwise run `superset workspaces list`. Omit it only when you are genuinely outside a workspace; the page is still created and still listed, and `pageId` is then the only way to version it.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"entryPath":{"description":"Where this page lives in the workspace, as a path relative to the workspace root, e.g. `reports/q3-pipeline.html`. Together with `workspaceId` it is the key a later publish reuses to add a version rather than minting a second page, so reuse the same value when updating. Pass both or neither.","anyOf":[{"type":"string","minLength":1,"maxLength":1024},{"type":"null"}]}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_comments_list","description":"List the comment threads left on a published page, oldest first, with every reply and whether the thread is resolved. A thread is anchored either to one element or to the page as a whole. When `anchorKind` is \"element\", `anchor.path` is a CSS selector path from <body> in the published HTML and `anchorText` is what that element contained when the comment was written; when it is \"page\", both are null and the comment is about the page rather than any one part of it. Use the returned thread ids with pages_comments_reply and pages_comments_resolve. Only threads a person has handed to an agent are returned, and those are the only ones you can reply to or resolve — a page whose comments nobody handed off comes back empty, which means there is nothing for you to do, not that something went wrong.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"pageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Page UUID. Find it with pages_list or pages_get."}},"required":["pageId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_comments_reply","description":"Post a reply into an existing comment thread on a published page. Answer only the threads you were asked to address, and say what you actually changed — the reply is what the person who left the comment reads next. Reply before calling pages_comments_resolve, so closing the thread is not silent.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Thread UUID, from pages_comments_list."},"body":{"type":"string","minLength":1,"maxLength":10000,"description":"The reply text."}},"required":["threadId","body"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_comments_resolve","description":"Mark a comment thread on a published page resolved, or reopen one. Call pages_comments_reply first so the thread records what changed before it closes. Anyone who can read the page may resolve a thread — that is a statement about the page, not about the comment.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Thread UUID, from pages_comments_list."},"resolved":{"default":true,"description":"True to resolve the thread, false to reopen it.","type":"boolean"}},"required":["threadId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"projects_list","description":"List projects set up on a host. A project is a checked-out repo; projects are host-owned — use hosts_list first to get the hostId. Use this to find a project's id before creating a workspace or scheduling an automation.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"type":"string","minLength":1,"description":"Host machineId to query. See `hosts_list` to enumerate accessible hosts."}},"required":["hostId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"hosts_list","description":"List the hosts (registered machines) the calling user has access to in the active organization. Use this to find a host's id before creating a workspace or scheduling an automation.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}]}