{"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)."},"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"}]},"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 (branch-scoped working copies) on a host. Workspaces are host-owned — use hosts_list first to get the hostId. Rows include the host-served projectName. Use this to find a workspace ID for automations_create's v2WorkspaceId.","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":"workspaces_create","description":"Create a workspace on a host. A workspace is a branch-scoped working copy of a project. The host service materializes the git worktree on disk before returning. When `projectId` is set, provide exactly one of `branch` or `pr`. Omit `projectId` (and `branch`/`pr`/`baseBranch`/`taskId`) to create a project-less session instead — a managed scratch folder (its own git repo, no branch/PR semantics). Optionally pass `agents` to spawn one or more agents in the workspace as soon as it is ready (each entry runs the equivalent of `agents_create` against the new workspace), and/or pass `command` to run a one-off shell command in the worktree. Use projects_list and hosts_list first to get the projectId and hostId.","annotations":{"destructiveHint":false},"inputSchema":{"type":"object","properties":{"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":{"type":"string","minLength":1,"description":"Workspace name (display)."},"branch":{"description":"Git branch the workspace tracks. Required unless `pr` is set.","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":{"type":"string","minLength":1,"description":"Host machineId to create the workspace on."},"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}},"required":["name","hostId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_update","description":"Rename or retag a workspace on its host. Use hosts_list / workspaces_list to find the hostId.","annotations":{"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"workspaces_delete","description":"Delete a workspace by UUID on its host. The host service runs the project's teardown script (.superset/config.json teardown commands or .superset/teardown.sh, if configured), then removes the git worktree from disk before returning. A teardown failure does not block the delete; it is reported in `warnings`. Cannot delete 'main'-type workspaces. Use hosts_list / workspaces_list to find the hostId.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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. 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":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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. 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":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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. Use hosts_list / workspaces_list to find the hostId.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hostId":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","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":{"type":"string","minLength":1,"description":"Host machineId the workspace lives on."},"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":["hostId","workspaceId","terminalId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"pages_list","description":"List published pages in the active organization, newest 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.","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"}]}},"$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. 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. Every call creates a new version; pass `pageId` to add a version to an existing page instead of creating a new one. Every page belongs to a workspace: pass `workspaceId` (from `$SUPERSET_WORKSPACE_ID`, or `superset workspaces list`) plus an `entryPath` naming where the page lives in it.","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.","anyOf":[{"type":"string","enum":["just_me","org"]},{"type":"null"}]},"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":"The workspace this page belongs to. Required: a page that names no workspace is listed by nothing and cannot be versioned later. Get it from the `SUPERSET_WORKSPACE_ID` environment variable, or by running `superset workspaces list`."},"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. Required unless `pageId` is given.","anyOf":[{"type":"string","minLength":1,"maxLength":1024},{"type":"null"}]}},"required":["html","workspaceId"],"$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. Each thread is anchored to one 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. 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#"}}]}