# Tool Reference

> Inputs and permissions for all 50 Oasis tools.

Tool arguments are validated against these schemas. Resource IDs and query parameters are top-level arguments; request payloads go in `body`. The authorized workspace is supplied by the connection.

This reference is generated from the backend's public allowlist and API schemas. Call `tools/list` on your server for the deployed version. Tools that require a permission you did not grant are omitted from that response.

## list_tool_types
Discover available tool types before attaching tools to an agent.

**In Oasis:** Agent → Tools. Browse the integrations available to an agent. MCP returns the underlying tool types.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## get_workspace
Read the workspace selected during sign-in.

**In Oasis:** Workspace settings. View the workspace selected when you connected your assistant.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## list_agents
List agents in this workspace.

**In Oasis:** Agents. Browse the agents already in your workspace.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "include_triggers": {
      "type": "boolean",
      "default": false,
      "title": "Include Triggers"
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## create_agent
Create an Oasis agent. Set name, instructions, appearance and apps in body.

**In Oasis:** Agents → Create agent. Give your agent a name, role, instructions, and tools.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 200,
          "title": "Name",
          "description": "Display name for the agent"
        },
        "connection_grants": {
          "anyOf": [
            {
              "items": {
                "properties": {
                  "connection_id": {
                    "type": "string",
                    "title": "Connection Id"
                  },
                  "scope": {
                    "type": "string",
                    "title": "Scope",
                    "description": "'read' | 'write'",
                    "default": "write"
                  },
                  "auto_approve": {
                    "type": "boolean",
                    "title": "Auto Approve",
                    "default": false
                  }
                },
                "type": "object",
                "required": [
                  "connection_id"
                ],
                "title": "AgentConnectionGrantInput",
                "description": "A Composio connection (a user-owned connected account) to link to the\nagent at creation. The toolkit is derived server-side from the connection;\nonly the caller's own connections may be granted."
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Connection Grants",
          "description": "Composio connected accounts to attach to the new agent. Grants are created server-side after the agent row exists, so no pre-generated agent_id or orphan grants are needed."
        },
        "system_prompt": {
          "default": "",
          "title": "System Prompt",
          "type": "string"
        },
        "response_style": {
          "default": "default",
          "enum": [
            "default",
            "warm",
            "direct",
            "professional",
            "super_casual"
          ],
          "title": "Response Style",
          "type": "string"
        },
        "agent_role": {
          "default": "",
          "title": "Agent Role",
          "type": "string"
        },
        "color": {
          "items": {
            "type": "string"
          },
          "title": "Color",
          "type": "array"
        },
        "picture_url": {
          "default": "",
          "title": "Picture Url",
          "type": "string"
        },
        "composio_toolkits": {
          "items": {
            "type": "string"
          },
          "title": "Composio Toolkits",
          "type": "array"
        },
        "is_draft": {
          "default": false,
          "title": "Is Draft",
          "type": "boolean"
        }
      },
      "type": "object",
      "required": [
        "name"
      ],
      "title": "AgentCreate",
      "description": "Create an agent. Used both at org-level and when creating+importing into a team.",
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## get_agent
Read an agent before editing its configuration or prompt.

**In Oasis:** Agents → Scout. Open an agent’s profile to inspect its instructions and configuration.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## update_agent
Edit an agent's prompt, role, configuration, or connected tools. Send only changed fields in body.

**In Oasis:** Agents → Scout → Edit. Edit the agent’s instructions or configuration.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "body": {
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "agent_role": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 5000
            },
            {
              "type": "null"
            }
          ],
          "title": "Agent Role"
        },
        "description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 5000
            },
            {
              "type": "null"
            }
          ],
          "title": "Description",
          "description": "Agent's own human-facing blurb (the 'desc' field); distinct from agent_role"
        },
        "system_prompt": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 50000
            },
            {
              "type": "null"
            }
          ],
          "title": "System Prompt"
        },
        "response_style": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "default",
                "warm",
                "direct",
                "professional",
                "super_casual"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Response Style"
        },
        "picture_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Picture Url"
        },
        "color": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Color"
        },
        "avatar_personalization": {
          "anyOf": [
            {
              "properties": {
                "body_color": {
                  "type": "string",
                  "pattern": "^#[0-9a-fA-F]{6}$",
                  "title": "Body Color"
                },
                "body_shape": {
                  "type": "string",
                  "enum": [
                    "square",
                    "flat",
                    "tall",
                    "circle"
                  ],
                  "title": "Body Shape",
                  "default": "square"
                },
                "eyes": {
                  "type": "string",
                  "enum": [
                    "default",
                    "cartoon"
                  ],
                  "title": "Eyes",
                  "default": "default"
                },
                "headwear": {
                  "type": "string",
                  "enum": [
                    "none",
                    "beanie",
                    "backwards_cap",
                    "sprout",
                    "headset"
                  ],
                  "title": "Headwear",
                  "default": "none"
                },
                "facewear": {
                  "type": "string",
                  "enum": [
                    "none",
                    "glasses",
                    "pit_vipers"
                  ],
                  "title": "Facewear",
                  "default": "none"
                },
                "accessory": {
                  "type": "string",
                  "enum": [
                    "none",
                    "tie"
                  ],
                  "title": "Accessory",
                  "default": "none"
                },
                "prop": {
                  "type": "string",
                  "enum": [
                    "none",
                    "megaphone",
                    "calculator",
                    "briefcase"
                  ],
                  "title": "Prop",
                  "default": "none"
                },
                "liquid": {
                  "type": "boolean",
                  "title": "Liquid",
                  "default": false
                },
                "tattoo": {
                  "anyOf": [
                    {
                      "properties": {
                        "image_path": {
                          "type": "string",
                          "maxLength": 256,
                          "pattern": "^/api/v1/media/agent-profile-pictures/[0-9a-f-]+/[0-9a-f-]+\\.(png|jpg|webp)$",
                          "title": "Image Path"
                        },
                        "placement": {
                          "type": "string",
                          "enum": [
                            "back",
                            "left",
                            "right"
                          ],
                          "title": "Placement",
                          "default": "back"
                        }
                      },
                      "additionalProperties": false,
                      "type": "object",
                      "required": [
                        "image_path"
                      ],
                      "title": "AvatarTattoo"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "type": "object",
              "required": [
                "body_color"
              ],
              "title": "AvatarPersonalization"
            },
            {
              "type": "null"
            }
          ]
        },
        "composio_toolkits": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Toolkits"
        },
        "composio_require_approval": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Require Approval"
        },
        "composio_toolkit_approval_overrides": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "boolean"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Toolkit Approval Overrides"
        },
        "composio_toolkit_account_source": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Toolkit Account Source",
          "description": "Per-toolkit account source. {toolkit_slug: 'shared'|'self'}. Missing key inherits 'shared'."
        },
        "enable_memory_recall": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Enable Memory Recall"
        },
        "budget_amount_usd": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "title": "Budget Amount Usd",
          "description": "USD cap for the budget period; null = no cap"
        },
        "budget_period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Budget Period",
          "description": "'daily' | 'weekly' | 'monthly'; null = no cap"
        }
      },
      "type": "object",
      "title": "AgentUpdate",
      "additionalProperties": false
    }
  },
  "required": [
    "agent_id",
    "body"
  ],
  "additionalProperties": false
}
```

## delete_agent
Delete an agent. Confirm the user's intent first.

**In Oasis:** Agents → Scout → Delete. Remove the agent after confirming which one to delete.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## get_agent_state
Read agent runtime status.

**In Oasis:** Room → Scout. Check the agent’s activity. MCP returns its runtime status.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## list_agent_tools
List an agent's configured tools.

**In Oasis:** Agents → Scout → Tools. Inspect the tools configured for this agent.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max tools to return (default: no limit)",
      "title": "Limit"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of tools to skip",
      "default": 0,
      "title": "Offset"
    },
    "search": {
      "type": "string",
      "description": "Filter by name or tool_type (case-insensitive)",
      "title": "Search"
    },
    "paginated": {
      "type": "boolean",
      "description": "If true, return {items, total, limit, offset}",
      "default": false,
      "title": "Paginated"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## create_agent_tool
Configure a tool for an agent. Provider account consent may still require the Oasis UI.

**In Oasis:** Agents → Scout → Tools. Add a tool to the agent. Connecting a provider account may still require sign-in in Oasis.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "body": {
      "properties": {
        "tool_type": {
          "type": "string",
          "title": "Tool Type",
          "description": "Type of tool (e.g., 'devin_cloud_agent')"
        },
        "name": {
          "type": "string",
          "title": "Name",
          "description": "Display name for the tool"
        },
        "usage_prompt": {
          "type": "string",
          "title": "Usage Prompt",
          "description": "Instructions for the LLM on how to use this tool"
        },
        "input_schema": {
          "additionalProperties": true,
          "type": "object",
          "title": "Input Schema",
          "description": "JSON schema describing expected input"
        },
        "enabled": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Enabled",
          "default": true
        }
      },
      "type": "object",
      "required": [
        "tool_type",
        "name",
        "usage_prompt"
      ],
      "title": "ToolCreate",
      "additionalProperties": false
    }
  },
  "required": [
    "agent_id",
    "body"
  ],
  "additionalProperties": false
}
```

## update_agent_tool
Edit an agent tool.

**In Oasis:** Agents → Scout → Tools. Change a configured tool. The available settings depend on the tool type.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "tool_id": {
      "type": "string",
      "title": "Tool Id"
    },
    "body": {
      "properties": {
        "tool_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Tool Type"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "usage_prompt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Usage Prompt"
        },
        "input_schema": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Input Schema"
        },
        "enabled": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Enabled"
        }
      },
      "type": "object",
      "title": "ToolUpdate",
      "additionalProperties": false
    }
  },
  "required": [
    "agent_id",
    "tool_id",
    "body"
  ],
  "additionalProperties": false
}
```

## delete_agent_tool
Remove an agent tool.

**In Oasis:** Agents → Scout → Tools. Remove this tool from Scout’s configuration.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "tool_id": {
      "type": "string",
      "title": "Tool Id"
    }
  },
  "required": [
    "agent_id",
    "tool_id"
  ],
  "additionalProperties": false
}
```

## list_workspace_skills
List custom workspace skills, including their slugs and SKILL.md content.

**In Oasis:** Workspace settings → Skills. Browse reusable instructions saved in your workspace library.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## save_workspace_skill
Add or replace a workspace skill from body.skill_md text. Include name for plain instructions, or use SKILL.md frontmatter. Reusing a slug replaces its files and updates attached agents on their next turn. Read existing skills before replacing; use Oasis for ZIP bundles.

**In Oasis:** Workspace settings → Skills → Import skills. Import instructions into your workspace library. MCP accepts the SKILL.md text directly; use the app to import supporting files.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "skill_md": {
          "type": "string",
          "minLength": 1,
          "description": "Full SKILL.md text, or plain instructions with a name."
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "slug": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Slug"
        }
      },
      "type": "object",
      "title": "Body_upload_workspace_skill_api_v1_organizations__org_id__workspace_skills_post",
      "required": [
        "skill_md"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## delete_workspace_skill
Delete a workspace skill and detach it from affected agents. Requires edit access to each affected agent. Confirm the user's intent first.

**In Oasis:** Workspace settings → Skills → Remove. Remove a skill from the library and detach it from the agents using it.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "title": "Slug"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
```

## assign_workspace_skills
Give workspace skills to agents without removing existing skills. Supply body.assignments with skill_slug and agent_ids. Repeating an assignment is safe. Check each returned status for failures.

**In Oasis:** Workspace settings → Skills → Greeting → Agents. Select the agents that should use a workspace skill. MCP assignments add the skill and keep existing skills.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "assignments": {
          "items": {
            "properties": {
              "skill_slug": {
                "type": "string",
                "title": "Skill Slug"
              },
              "agent_ids": {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "title": "Agent Ids",
                "minItems": 1
              }
            },
            "type": "object",
            "required": [
              "skill_slug",
              "agent_ids"
            ],
            "title": "SkillAssignmentInput",
            "additionalProperties": false
          },
          "type": "array",
          "maxItems": 1000,
          "title": "Assignments",
          "minItems": 1
        }
      },
      "type": "object",
      "required": [
        "assignments"
      ],
      "title": "SkillAssignmentsRequest",
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## list_agent_skills
Read the skills assigned to an agent, including each skill's source and slug.

**In Oasis:** Agent → Skills. See which skills are assigned to an agent.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## replace_agent_skills
Replace the complete skill list for an agent. Read list_agent_skills first and retain every skill you want to keep. Omitted skills are detached; an explicit empty skills array removes all. Prefer assign_workspace_skills when only adding workspace skills.

**In Oasis:** Agent → Skills. Change the skills assigned to an agent. MCP replaces the complete list, so read it first and include every skill you want to keep.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "body": {
      "properties": {
        "skills": {
          "items": {
            "properties": {
              "slug": {
                "type": "string",
                "title": "Slug"
              },
              "source": {
                "type": "string",
                "enum": [
                  "anthropic",
                  "skillsmp",
                  "mercury",
                  "internal",
                  "workspace"
                ],
                "title": "Source"
              },
              "version": {
                "type": "string",
                "title": "Version",
                "default": ""
              },
              "pinned": {
                "type": "boolean",
                "title": "Pinned",
                "default": false
              },
              "github_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Github Url"
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Name"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Description"
              }
            },
            "type": "object",
            "required": [
              "slug",
              "source"
            ],
            "title": "SkillInstallInput",
            "additionalProperties": false
          },
          "type": "array",
          "title": "Skills"
        }
      },
      "type": "object",
      "title": "ReplaceSkillsRequest",
      "required": [
        "skills"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "agent_id",
    "body"
  ],
  "additionalProperties": false
}
```

## list_agent_connections
List the app accounts linked to an agent: connection_id, toolkit, scope (read or write) and auto_approve. Use connection_id with list_connection_tools.

**In Oasis:** Agents → Scout → Tools. See which app accounts Scout uses, and whether each one can write and auto-approves.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## list_connection_tools
List the tools one linked account offers, with exact slugs and read_only flags. agent_id must be an agent the account is linked to. Set all true for every tool, not just the featured ones.

**In Oasis:** Agents → Scout → Tools → Gmail → What this connector can do. Browse the individual tools one account offers. MCP returns each tool's exact slug and whether it only reads.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "connection_id": {
      "type": "string",
      "title": "Connection Id"
    },
    "all": {
      "type": "boolean",
      "default": false,
      "title": "All"
    },
    "agent_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Agent Id"
    }
  },
  "required": [
    "connection_id",
    "agent_id"
  ],
  "additionalProperties": false
}
```

## list_agent_tool_modes
Read an agent's per-tool overrides, optionally for one toolkit. Unlisted tools follow their default: reads run, writes ask for approval unless the account auto-approves.

**In Oasis:** Agents → Scout → Tools → Gmail → What this connector can do. See which tools you changed from their default. Customized tools are marked with a dot.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "toolkit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Toolkit"
    }
  },
  "required": [
    "agent_id"
  ],
  "additionalProperties": false
}
```

## set_agent_tool_mode
Set how one tool runs for an agent: auto runs without an approval card, ask always posts one (reads included), off hides and refuses it. mode null restores the default. Take toolkit and tool_slug from list_connection_tools. Never widens the agent's read/write access. Confirm the user's intent before turning a write tool to auto.

**In Oasis:** Agents → Scout → Tools → Gmail → What this connector can do. Choose Auto, Ask first, or Off for one tool. Picking a tool's default clears your change.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "title": "Agent Id"
    },
    "body": {
      "properties": {
        "toolkit": {
          "type": "string",
          "minLength": 1,
          "title": "Toolkit"
        },
        "tool_slug": {
          "type": "string",
          "minLength": 1,
          "title": "Tool Slug"
        },
        "mode": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "auto",
                "ask",
                "off"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Mode"
        }
      },
      "type": "object",
      "required": [
        "toolkit",
        "tool_slug",
        "mode"
      ],
      "title": "AgentToolModeUpdate",
      "additionalProperties": false
    }
  },
  "required": [
    "agent_id",
    "body"
  ],
  "additionalProperties": false
}
```

## list_rooms
List rooms visible to you.

**In Oasis:** Rooms. Browse the rooms you can access.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "include_archived": {
      "type": "boolean",
      "default": false,
      "title": "Include Archived"
    },
    "include_cli": {
      "type": "boolean",
      "default": false,
      "title": "Include Cli"
    },
    "workspace_view": {
      "type": "boolean",
      "default": false,
      "title": "Workspace View"
    },
    "limit": {
      "type": "integer",
      "default": 100,
      "title": "Limit"
    },
    "before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Before"
    },
    "room_ids": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          },
          "maxItems": 100
        },
        {
          "type": "null"
        }
      ],
      "title": "Room Ids"
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## create_room
Create a room with agent_participants and human_participants UUIDs.

**In Oasis:** Rooms → Create room. Name the room, choose its visibility, and add people and agents.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Description"
        },
        "agent_participants": {
          "items": {
            "type": "string",
            "format": "uuid"
          },
          "type": "array",
          "title": "Agent Participants"
        },
        "human_participants": {
          "items": {
            "type": "string",
            "format": "uuid"
          },
          "type": "array",
          "title": "Human Participants"
        },
        "room_type": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "room",
                "agent_draft",
                "cli"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Room Type"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "public",
                "private"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Visibility"
        }
      },
      "type": "object",
      "required": [
        "name"
      ],
      "title": "RoomCreate",
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## get_room
Read a room and its participants.

**In Oasis:** Research → Room details. View the room’s name, visibility, and participants.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    }
  },
  "required": [
    "room_id"
  ],
  "additionalProperties": false
}
```

## update_room
Edit a room's name, description, visibility, or archive state.

**In Oasis:** Research → Room settings. Change the room’s name, description, or visibility.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    },
    "body": {
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Description"
        },
        "picture_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Picture Url"
        },
        "archived": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Archived"
        },
        "pinned": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Pinned"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "public",
                "private"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Visibility"
        }
      },
      "type": "object",
      "title": "RoomUpdate",
      "additionalProperties": false
    }
  },
  "required": [
    "room_id",
    "body"
  ],
  "additionalProperties": false
}
```

## archive_room
Archive a room.

**In Oasis:** Research → Archive room. Move the room to the archive.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    }
  },
  "required": [
    "room_id"
  ],
  "additionalProperties": false
}
```

## restore_room
Restore an archived room.

**In Oasis:** Archived rooms → Research. Bring an archived room back to your room list.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    }
  },
  "required": [
    "room_id"
  ],
  "additionalProperties": false
}
```

## add_room_participant
Add one agent_id or human_id to a room.

**In Oasis:** Research → Members. Add an existing agent or person to this room.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    },
    "body": {
      "properties": {
        "agent_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Agent Id"
        },
        "human_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Human Id"
        }
      },
      "type": "object",
      "title": "ParticipantAdd",
      "additionalProperties": false
    }
  },
  "required": [
    "room_id",
    "body"
  ],
  "additionalProperties": false
}
```

## list_messages
Read a page of room messages; use cursor parameters for history.

**In Oasis:** Research → Conversation. Read the conversation in a room. MCP lets you page through its history.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "title": "Limit"
    },
    "before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Before"
    }
  },
  "required": [
    "room_id"
  ],
  "additionalProperties": false
}
```

## send_message
Post a message as the signed-in human; may wake agents and consume credits.

**In Oasis:** Research → Message composer. Send a message as yourself. This may wake the room’s agents.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "room_id": {
      "type": "string",
      "title": "Room Id"
    },
    "body": {
      "properties": {
        "content": {
          "type": "string",
          "title": "Content"
        },
        "attachments": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array",
          "title": "Attachments"
        },
        "extras": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Extras"
        },
        "mentions": {
          "anyOf": [
            {
              "items": {
                "type": "string",
                "format": "uuid"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Mentions",
          "description": "Optional pre-resolved IDs the sender @-mentioned. Can contain agent IDs (which fire a wake) and human user IDs (no wake today — a future inbox view will surface them). Server classifies each ID at write time. When omitted, the server parses @-mentions from `content` against the room roster."
        },
        "idempotency_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Idempotency Key",
          "description": "Optional client-supplied dedupe token. A retry with the same (room_id, key) returns the existing message."
        },
        "thread_root_message_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Thread Root Message Id",
          "description": "Top-level message this reply belongs to."
        },
        "reply_to_message_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Reply To Message Id",
          "description": "Main-timeline message quoted by this inline reply."
        },
        "also_show_in_main": {
          "type": "boolean",
          "title": "Also Show In Main",
          "description": "Also render this thread reply in the room/DM main timeline.",
          "default": false
        }
      },
      "type": "object",
      "required": [
        "content"
      ],
      "title": "RoomMessageCreate",
      "additionalProperties": false
    }
  },
  "required": [
    "room_id",
    "body"
  ],
  "additionalProperties": false
}
```

## list_connected_accounts
List your connected app accounts in this workspace. For event workflows, choose a Composio account and pass its connected_account_id as composio_connected_account_id. Provider consent stays in Oasis.

**In Oasis:** Settings → Connections. See which app accounts are connected. Connecting a new account happens in Oasis.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## list_workflow_trigger_types
Discover event triggers for a connected app. Filter by toolkit (for example gmail) or comma-separated toolkits. Read the returned configuration schema before creating an event workflow.

**In Oasis:** Workflows → Create → Trigger → App event. Browse the app events that can start a workflow.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "toolkit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Toolkit"
    },
    "toolkits": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Toolkits"
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## get_workflow_trigger_type
Read an event trigger's config_schema and payload_schema. Use its slug and configuration in create_workflow; use payload fields for condition_rules.

**In Oasis:** Workflows → Create → Trigger → App event. See an event's required settings and the fields you can filter on.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "trigger_slug": {
      "type": "string",
      "title": "Trigger Slug"
    }
  },
  "required": [
    "trigger_slug"
  ],
  "additionalProperties": false
}
```

## list_workflows
List your workflows and public workspace workflows. Set include_disabled to include paused workflows.

**In Oasis:** Workflows. Browse workflows and see when they run.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "include_disabled": {
      "type": "boolean",
      "default": false,
      "title": "Include Disabled"
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## build_workflow
Build a complete editor workflow in one call: explicit assigned steps and dependencies plus a manual, timed, new event, or saved trigger. Task Manager wakes agents privately; agents choose any communication destination from task instructions. No destination chat is required. Discover agents, accounts and trigger schemas first. Provider query filters go in trigger.event.trigger_config; workflow AND filters go in trigger.filters. Saves paused by default; enabled true activates only after setup. Returns both IDs, UI link and exact plan. On partial failure inspect recovery IDs before retrying.

**In Oasis:** Workflows → Create. Build the steps, assignees, dependencies, and trigger together. Saves paused for review.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "objective",
        "steps",
        "trigger"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "objective": {
          "type": "string",
          "minLength": 1,
          "description": "Task goal and any reporting policy. Task Manager wakes assigned agents privately; agents choose whether and where to communicate from the task instructions. No destination chat is required."
        },
        "exit_criteria": {
          "type": "string",
          "default": ""
        },
        "steps": {
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "title": "Id"
              },
              "position": {
                "type": "integer",
                "minimum": 0,
                "title": "Position"
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "title": "Title"
              },
              "instruction": {
                "type": "string",
                "minLength": 1,
                "title": "Instruction"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "agent_wake",
                  "human_action",
                  "work"
                ],
                "title": "Kind"
              },
              "depends_on_step_ids": {
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "type": "array",
                "title": "Depends On Step Ids"
              },
              "assignees": {
                "items": {
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "agent",
                        "human"
                      ],
                      "title": "Type"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "title": "Id"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object",
                  "required": [
                    "type",
                    "id"
                  ],
                  "title": "TaskAssignee"
                },
                "type": "array",
                "title": "Assignees"
              },
              "assignee_agent_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Assignee Agent Id"
              },
              "assignee_user_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Assignee User Id"
              },
              "configuration": {
                "additionalProperties": true,
                "type": "object",
                "title": "Configuration"
              }
            },
            "additionalProperties": false,
            "type": "object",
            "required": [
              "position",
              "title",
              "instruction",
              "kind"
            ],
            "title": "TaskStepCreateRequest"
          },
          "description": "Explicit editor steps. Use kind work, agent assignees from list_agents, stable UUID IDs and dependencies. Positions are contiguous from zero. At least one step needs an agent assignee; human assignees wait for human action."
        },
        "enabled": {
          "type": "boolean",
          "default": false,
          "description": "False saves paused for review. True enables only after the plan and trigger are installed."
        },
        "trigger": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "manual",
                "time",
                "event",
                "saved"
              ]
            },
            "cron_expr": {
              "type": "string"
            },
            "execute_at": {
              "type": "string",
              "format": "date-time"
            },
            "timezone": {
              "type": "string",
              "description": "Explicit IANA timezone for time triggers."
            },
            "config_id": {
              "type": "string",
              "format": "uuid",
              "description": "ID from list_workflow_trigger_configs; never guess."
            },
            "event": {
              "properties": {
                "toolkit_slug": {
                  "type": "string",
                  "title": "Toolkit Slug",
                  "description": "Composio toolkit slug, e.g. 'gmail'"
                },
                "trigger_slug": {
                  "type": "string",
                  "title": "Trigger Slug",
                  "description": "Composio trigger slug, e.g. 'GMAIL_NEW_MESSAGE'"
                },
                "event_kind": {
                  "type": "string",
                  "title": "Event Kind",
                  "description": "'inbound' | 'outbound' | 'generic'",
                  "default": "generic"
                },
                "trigger_config": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Trigger Config",
                  "description": "Composio trigger config (folder/filters)"
                },
                "connected_account_id": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "type": "object",
              "required": [
                "toolkit_slug",
                "trigger_slug",
                "connected_account_id"
              ],
              "title": "TriggerCreateRequest",
              "description": "Create (or reuse) a shared event-source trigger. If a trigger for the\nsame (owner, toolkit, trigger_slug, config) already exists, it is reused.",
              "additionalProperties": false
            },
            "filters": {
              "type": "array",
              "items": {
                "properties": {
                  "rule_type": {
                    "type": "string",
                    "title": "Rule Type",
                    "description": "'deterministic' (future: 'llm')",
                    "default": "deterministic"
                  },
                  "field": {
                    "type": "string",
                    "title": "Field",
                    "description": "Dotted path into the event payload, e.g. 'from' or 'repository.full_name'"
                  },
                  "operator": {
                    "type": "string",
                    "title": "Operator",
                    "description": "One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt"
                  },
                  "value": {
                    "title": "Value",
                    "description": "Value to compare against; ignored for 'exists'"
                  }
                },
                "type": "object",
                "required": [
                  "field",
                  "operator"
                ],
                "title": "ConditionRule",
                "description": "One row in a schedule's condition_rules array.\n\nEvaluated pre-LLM, server-side, against the incoming event payload.\nDay-one only supports rule_type='deterministic'; future fuzzy rules will\nland as rule_type='llm' without changing the eval loop's structural shape."
              },
              "maxItems": 100,
              "default": [],
              "description": "Deterministic AND filters for this workflow, using discovered event payload fields. Provider polling/search filters belong in event.trigger_config."
            }
          },
          "oneOf": [
            {
              "properties": {
                "type": {
                  "const": "manual"
                }
              },
              "maxProperties": 1
            },
            {
              "properties": {
                "type": {
                  "const": "time"
                }
              },
              "required": [
                "timezone"
              ],
              "oneOf": [
                {
                  "required": [
                    "cron_expr"
                  ]
                },
                {
                  "required": [
                    "execute_at"
                  ]
                }
              ]
            },
            {
              "properties": {
                "type": {
                  "const": "event"
                }
              },
              "required": [
                "event"
              ]
            },
            {
              "properties": {
                "type": {
                  "const": "saved"
                }
              },
              "required": [
                "config_id"
              ]
            }
          ]
        }
      }
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## list_workflow_trigger_configs
List reusable time/event configurations shown in the workflow editor. Use config id in build_workflow trigger type saved. Read its event source for the selected account and provider filters.

**In Oasis:** Workflows → Create → Trigger. Pick a saved trigger configuration to reuse.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## get_workflow_trigger
Read a shared event source including connected account, provider filter config, subscription and enabled state. A workflow may use this source even when its legacy composio fields are null.

**In Oasis:** Workflows → Morning briefing → Trigger. Check the event source's account, provider settings, and whether it's on.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "trigger_id": {
      "type": "string",
      "title": "Trigger Id"
    }
  },
  "required": [
    "trigger_id"
  ],
  "additionalProperties": false
}
```

## get_workflow_plan
Read exact workflow steps, IDs, dependencies, instructions and assignees. Accepts workflow_id from MCP or the task ID in a workflow UI link.

**In Oasis:** Workflows → Morning briefing → Plan. See the workflow's ordered steps, assignees, and dependencies.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "format": "uuid",
      "title": "Workflow Id"
    }
  },
  "required": [
    "workflow_id"
  ],
  "additionalProperties": false
}
```

## update_workflow_plan
Edit the structured workflow plan. Read first; steps replaces the full plan, so preserve unchanged IDs and dependencies. Use agent assignees for autonomous work. This edits the definition, not previous runs.

**In Oasis:** Workflows → Morning briefing → Plan. Edit the steps, assignees, and dependencies.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "format": "uuid",
      "title": "Workflow Id"
    },
    "body": {
      "properties": {
        "title": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Title"
        },
        "objective": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Objective"
        },
        "exit_criteria": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exit Criteria"
        },
        "steps": {
          "anyOf": [
            {
              "items": {
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "title": "Id"
                  },
                  "position": {
                    "type": "integer",
                    "minimum": 0,
                    "title": "Position"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "title": "Title"
                  },
                  "instruction": {
                    "type": "string",
                    "minLength": 1,
                    "title": "Instruction"
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "agent_wake",
                      "human_action",
                      "work"
                    ],
                    "title": "Kind"
                  },
                  "depends_on_step_ids": {
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "type": "array",
                    "title": "Depends On Step Ids"
                  },
                  "assignees": {
                    "items": {
                      "properties": {
                        "type": {
                          "type": "string",
                          "enum": [
                            "agent",
                            "human"
                          ],
                          "title": "Type"
                        },
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "title": "Id"
                        }
                      },
                      "additionalProperties": false,
                      "type": "object",
                      "required": [
                        "type",
                        "id"
                      ],
                      "title": "TaskAssignee"
                    },
                    "type": "array",
                    "title": "Assignees"
                  },
                  "assignee_agent_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "title": "Assignee Agent Id"
                  },
                  "assignee_user_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "title": "Assignee User Id"
                  },
                  "configuration": {
                    "additionalProperties": true,
                    "type": "object",
                    "title": "Configuration"
                  }
                },
                "additionalProperties": false,
                "type": "object",
                "required": [
                  "position",
                  "title",
                  "instruction",
                  "kind"
                ],
                "title": "TaskStepCreateRequest"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Steps"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "title": "TaskUpdateRequest"
    }
  },
  "required": [
    "workflow_id",
    "body"
  ],
  "additionalProperties": false
}
```

## set_workflow_filters
Replace this workflow's deterministic AND event filters. Discover payload fields first. Updates both shared-source prefilter and workflow rules, preserving other workflows and the source subscription. Empty filters removes this workflow's rules. Pauses during update and restores prior enabled state only on success; failures return recovery IDs.

**In Oasis:** Workflows → Morning briefing → Trigger → Conditions. Set the event conditions this workflow needs. Other workflows on the same event keep their own filters.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "title": "Workflow Id"
    },
    "body": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "filters"
      ],
      "properties": {
        "filters": {
          "type": "array",
          "maxItems": 100,
          "items": {
            "properties": {
              "rule_type": {
                "type": "string",
                "title": "Rule Type",
                "description": "'deterministic' (future: 'llm')",
                "default": "deterministic"
              },
              "field": {
                "type": "string",
                "title": "Field",
                "description": "Dotted path into the event payload, e.g. 'from' or 'repository.full_name'"
              },
              "operator": {
                "type": "string",
                "title": "Operator",
                "description": "One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt"
              },
              "value": {
                "title": "Value",
                "description": "Value to compare against; ignored for 'exists'"
              }
            },
            "type": "object",
            "required": [
              "field",
              "operator"
            ],
            "title": "ConditionRule",
            "description": "One row in a schedule's condition_rules array.\n\nEvaluated pre-LLM, server-side, against the incoming event payload.\nDay-one only supports rule_type='deterministic'; future fuzzy rules will\nland as rule_type='llm' without changing the eval loop's structural shape."
          }
        }
      }
    }
  },
  "required": [
    "workflow_id",
    "body"
  ],
  "additionalProperties": false
}
```

## get_workflow_runs
Read tasks actually created by a workflow. Accepts its MCP ID or UI link task ID. A scheduled wakeup alone is not proof of result delivery.

**In Oasis:** Workflows → Morning briefing → Run history. See the runs this workflow created and how each one went.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "format": "uuid",
      "title": "Workflow Id"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "default": 50,
      "title": "Limit"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "title": "Offset"
    }
  },
  "required": [
    "workflow_id"
  ],
  "additionalProperties": false
}
```

## create_workflow
Create a workflow with instructions, assigned agents, and when it runs: manual, recurring, one-time, or event-triggered. Task Manager executes assigned steps through private agent wakes; no destination chat is required. Timing belongs to this workflow. Use an explicit IANA timezone. Saving may draft a plan and use credits; automatic triggers are active when saved.

**In Oasis:** Workflows → Create. Set up the instructions, assigned agents, and trigger together.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Description"
        },
        "kind": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Kind",
          "description": "'time' (cron), 'event' (trigger-driven), or 'manual'"
        },
        "dispatch_intent": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Dispatch Intent",
          "description": "Natural-language 'when should this fire' read by the dispatcher. Empty = always fire when reached."
        },
        "trigger_type": {
          "type": "string",
          "title": "Trigger Type",
          "description": "'cron', 'composio', or 'manual'",
          "default": "cron",
          "enum": [
            "manual",
            "cron",
            "composio"
          ]
        },
        "composio_trigger_slug": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Trigger Slug",
          "description": "Composio trigger slug, e.g. 'GMAIL_NEW_EMAIL'"
        },
        "composio_trigger_config": {
          "additionalProperties": true,
          "type": "object",
          "title": "Composio Trigger Config",
          "description": "Config for the Composio trigger"
        },
        "composio_connected_account_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Connected Account Id",
          "description": "Which connected account the trigger watches (the creator's chosen account for the toolkit); auto-resolved if omitted"
        },
        "cron_expr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cron Expr",
          "description": "Standard 5-field cron, e.g. '0 8 * * *'"
        },
        "timezone": {
          "type": "string",
          "title": "Timezone",
          "description": "IANA timezone name, e.g. 'America/New_York'",
          "default": "UTC"
        },
        "execute_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Execute At",
          "description": "ISO 8601 datetime for one-time runs"
        },
        "seed_prompt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Seed Prompt",
          "description": "Objective for the workflow task"
        },
        "agent_ids": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Agent Ids",
          "description": "Agent UUIDs assigned to workflow execution"
        },
        "human_participant_ids": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Human Participant Ids",
          "description": "Human participant UUIDs"
        },
        "visibility": {
          "type": "string",
          "title": "Visibility",
          "description": "'private' (creator-only) or 'public' (visible to whole org)",
          "default": "private"
        },
        "condition_rules": {
          "items": {
            "properties": {
              "rule_type": {
                "type": "string",
                "title": "Rule Type",
                "description": "'deterministic' (future: 'llm')",
                "default": "deterministic"
              },
              "field": {
                "type": "string",
                "title": "Field",
                "description": "Dotted path into the event payload, e.g. 'from' or 'repository.full_name'"
              },
              "operator": {
                "type": "string",
                "title": "Operator",
                "description": "One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt"
              },
              "value": {
                "title": "Value",
                "description": "Value to compare against; ignored for 'exists'"
              }
            },
            "type": "object",
            "required": [
              "field",
              "operator"
            ],
            "title": "ConditionRule",
            "description": "One row in a schedule's condition_rules array.\n\nEvaluated pre-LLM, server-side, against the incoming event payload.\nDay-one only supports rule_type='deterministic'; future fuzzy rules will\nland as rule_type='llm' without changing the eval loop's structural shape."
          },
          "type": "array",
          "title": "Condition Rules",
          "description": "AND-ed filter rules evaluated pre-LLM"
        },
        "dedup_window_seconds": {
          "type": "integer",
          "minimum": 0,
          "title": "Dedup Window Seconds",
          "description": "Layer-2 (semantic) dedup window; 0 disables",
          "default": 300
        },
        "dedup_fields": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Dedup Fields",
          "description": "Override the per-trigger natural-key registry"
        },
        "fire_cap_per_window": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Fire Cap Per Window",
          "description": "Per-schedule rate limit; null = uncapped"
        },
        "fire_cap_window_seconds": {
          "type": "integer",
          "minimum": 1,
          "title": "Fire Cap Window Seconds",
          "description": "Window for fire_cap_per_window",
          "default": 3600
        },
        "task_blueprint": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Blueprint",
          "description": "Task template {title, title_template?, description, steps[], exit_criteria, assignee_agent_names[]}; title_template uses {{event.field}} or {{run.date}} for occurrence names; omit to auto-generate"
        },
        "generate_task_blueprint": {
          "type": "boolean",
          "title": "Generate Task Blueprint",
          "description": "Draft a task blueprint from seed_prompt at save time when none is supplied",
          "default": true
        },
        "canvas_labels": {
          "additionalProperties": true,
          "type": "object",
          "title": "Canvas Labels"
        },
        "task_contact_mode": {
          "type": "string",
          "pattern": "^(normal|exceptions_only|silent)$",
          "title": "Task Contact Mode",
          "default": "normal"
        }
      },
      "type": "object",
      "title": "WorkflowInput",
      "required": [
        "trigger_type"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```

## get_workflow
Read a workflow, including its instructions, agents, timing, and enabled state.

**In Oasis:** Workflows → Morning briefing. Open the workflow to see what it does and when it runs.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "title": "Workflow Id"
    }
  },
  "required": [
    "workflow_id"
  ],
  "additionalProperties": false
}
```

## update_workflow
Edit a workflow's instructions, agents, plan, or timing. Set body.enabled false to pause future runs or true to resume.

**In Oasis:** Workflows → Morning briefing → Edit. Update the instructions or trigger, or pause future runs.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "title": "Workflow Id"
    },
    "body": {
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200,
              "minLength": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Description"
        },
        "kind": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Kind"
        },
        "dispatch_intent": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Dispatch Intent"
        },
        "trigger_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trigger Type"
        },
        "composio_trigger_slug": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Trigger Slug"
        },
        "composio_trigger_config": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Trigger Config"
        },
        "composio_connected_account_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Composio Connected Account Id"
        },
        "cron_expr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cron Expr"
        },
        "timezone": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Timezone"
        },
        "execute_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Execute At"
        },
        "enabled": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Enabled"
        },
        "seed_prompt": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Seed Prompt"
        },
        "agent_ids": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Agent Ids"
        },
        "human_participant_ids": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Human Participant Ids"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Visibility"
        },
        "condition_rules": {
          "anyOf": [
            {
              "items": {
                "properties": {
                  "rule_type": {
                    "type": "string",
                    "title": "Rule Type",
                    "description": "'deterministic' (future: 'llm')",
                    "default": "deterministic"
                  },
                  "field": {
                    "type": "string",
                    "title": "Field",
                    "description": "Dotted path into the event payload, e.g. 'from' or 'repository.full_name'"
                  },
                  "operator": {
                    "type": "string",
                    "title": "Operator",
                    "description": "One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt"
                  },
                  "value": {
                    "title": "Value",
                    "description": "Value to compare against; ignored for 'exists'"
                  }
                },
                "type": "object",
                "required": [
                  "field",
                  "operator"
                ],
                "title": "ConditionRule",
                "description": "One row in a schedule's condition_rules array.\n\nEvaluated pre-LLM, server-side, against the incoming event payload.\nDay-one only supports rule_type='deterministic'; future fuzzy rules will\nland as rule_type='llm' without changing the eval loop's structural shape."
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Condition Rules"
        },
        "dedup_window_seconds": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "title": "Dedup Window Seconds"
        },
        "dedup_fields": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Dedup Fields"
        },
        "fire_cap_per_window": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Fire Cap Per Window"
        },
        "fire_cap_window_seconds": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ],
          "title": "Fire Cap Window Seconds"
        },
        "task_blueprint": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Blueprint"
        },
        "canvas_labels": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Canvas Labels"
        },
        "task_contact_mode": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(normal|exceptions_only|silent)$"
            },
            {
              "type": "null"
            }
          ],
          "title": "Task Contact Mode"
        }
      },
      "type": "object",
      "title": "WorkflowInput",
      "additionalProperties": false
    }
  },
  "required": [
    "workflow_id",
    "body"
  ],
  "additionalProperties": false
}
```

## delete_workflow
Delete a workflow and its trigger. Confirm the user's intent. Existing runs and results may remain.

**In Oasis:** Workflows → Morning briefing → Delete. Delete the workflow and its trigger. Existing runs may remain.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "title": "Workflow Id"
    }
  },
  "required": [
    "workflow_id"
  ],
  "additionalProperties": false
}
```

## start_workflow
Run a manual or time-based workflow now, including a paused workflow. May use credits. Event-triggered workflows run through their configured event.

**In Oasis:** Workflows → Morning briefing → Run. Run a manual or time-based workflow now. Event-triggered workflows run through their event.

**Permission:** `oasis:write` · **Write**

```json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "title": "Workflow Id"
    }
  },
  "required": [
    "workflow_id"
  ],
  "additionalProperties": false
}
```

## list_members
List human workspace members and roles.

**In Oasis:** Workspace settings → Members. View the people in your workspace and their roles.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## list_invites
List workspace invitations subject to your role.

**In Oasis:** Workspace settings → Members → Pending invites. View workspace invitations and their status.

**Permission:** `oasis:read` · **Read**

```json
{
  "type": "object",
  "properties": {
    "invite_status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Invite Status"
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## invite_human
Email a workspace invitation. Requires owner/admin role and oasis:invite. Confirm recipient and role.

**In Oasis:** Workspace settings → Members → Invite. Enter an email and choose a role, then send a workspace invitation.

**Permission:** `oasis:invite` · **Write**

```json
{
  "type": "object",
  "properties": {
    "body": {
      "properties": {
        "email": {
          "type": "string",
          "title": "Email"
        },
        "role": {
          "type": "string",
          "title": "Role",
          "default": "member"
        }
      },
      "type": "object",
      "required": [
        "email"
      ],
      "title": "InviteCreateRequest",
      "additionalProperties": false
    }
  },
  "required": [
    "body"
  ],
  "additionalProperties": false
}
```
