Skip to content
Get started

Tools

Manage tool sets and the tools they contain. Tool sets group related tools, and tools define specific capabilities available to agents.

When a tool set is managed, only API key actors can modify its tools; human (profile) actors cannot.

List tools
tool_sets.tools.list(tool_set_id, **kwargs) -> CursorPagination<Tool { metadata, spec, info } >
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools
Create a new tool
tool_sets.tools.create(tool_set_id, **kwargs) -> Tool { metadata, spec, info }
POST/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools
Get a tool by ID
tool_sets.tools.retrieve(id, **kwargs) -> Tool { metadata, spec, info }
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
Update a tool
tool_sets.tools.update(id, **kwargs) -> Tool { metadata, spec, info }
PUT/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
Delete a tool
tool_sets.tools.delete(id, **kwargs) -> void
DELETE/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
ModelsExpand Collapse
class ConfigHTTP { request_method, headers, path, 4 more }
request_method: :HTTP_METHOD_UNSPECIFIED | :GET | :POST | 3 more
formatenum
One of the following:
:HTTP_METHOD_UNSPECIFIED
:GET
:POST
:PUT
:PATCH
:DELETE
headers: Hash[Symbol, String]
path: String
query: String
request_body_content_type: String
request_body_template: String

These are only used when the request method is a POST, PUT, or PATCH

tool_name: String

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

class ConfigMcp { tool_description, tool_name, tool_title }
tool_description: String
tool_name: String
tool_title: String
class ConfigOpenAPI { method_, operation_id, path }
method_: String
operation_id: String
path: String
class Tool { metadata, spec, info }
metadata: ResourceMetadata { id, account_id, created_at, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: String

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

account_id: String

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

created_at: Time

Timestamp when this resource was created

formatdate-time
name: String

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profile_id: String

ID of the actor (user or service account) that created this resource

workspace_id: String

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundle_key: String

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

external_id: String

External ID for the resource (e.g., a workflow ID from an external system)

labels: Hash[Symbol, String]

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ToolSpec { config, description, parameters, 2 more }
config: ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http: ConfigHTTP { request_method, headers, path, 4 more }
request_method: :HTTP_METHOD_UNSPECIFIED | :GET | :POST | 3 more
formatenum
One of the following:
:HTTP_METHOD_UNSPECIFIED
:GET
:POST
:PUT
:PATCH
:DELETE
headers: Hash[Symbol, String]
path: String
query: String
request_body_content_type: String
request_body_template: String

These are only used when the request method is a POST, PUT, or PATCH

tool_name: String

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp: ConfigMcp { tool_description, tool_name, tool_title }
tool_description: String
tool_name: String
tool_title: String
openapi: ConfigOpenAPI { method_, operation_id, path }
method_: String
operation_id: String
path: String
description: String
parameters: Hash[Symbol, untyped]
status: :TOOL_STATUS_UNSPECIFIED | :TOOL_STATUS_AVAILABLE | :TOOL_STATUS_OMITTED | :TOOL_STATUS_ARCHIVED
formatenum
One of the following:
:TOOL_STATUS_UNSPECIFIED
:TOOL_STATUS_AVAILABLE
:TOOL_STATUS_OMITTED
:TOOL_STATUS_ARCHIVED
requires_approval: bool
info: ToolInfo { created_by, tool_set }
created_by: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, account_id, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: String

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

account_id: String

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: String

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profile_id: String
external_id: String

External ID for the resource (e.g., a workflow ID from an external system)

labels: Hash[Symbol, String]

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: :PROFILE_TYPE_UNSPECIFIED | :PROFILE_TYPE_USER | :PROFILE_TYPE_API_KEY | :PROFILE_TYPE_SYSTEM

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
:PROFILE_TYPE_UNSPECIFIED
:PROFILE_TYPE_USER
:PROFILE_TYPE_API_KEY
:PROFILE_TYPE_SYSTEM
email: String

Email address of the profile. Required and unique within an account for user profiles.

name: String

Display name (e.g., “Bobby Tables”).

tool_set: ResourceMetadata { id, account_id, created_at, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: String

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

account_id: String

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

created_at: Time

Timestamp when this resource was created

formatdate-time
name: String

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profile_id: String

ID of the actor (user or service account) that created this resource

workspace_id: String

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundle_key: String

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

external_id: String

External ID for the resource (e.g., a workflow ID from an external system)

labels: Hash[Symbol, String]

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

class ToolInfo { created_by, tool_set }
created_by: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, account_id, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: String

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

account_id: String

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: String

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profile_id: String
external_id: String

External ID for the resource (e.g., a workflow ID from an external system)

labels: Hash[Symbol, String]

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: :PROFILE_TYPE_UNSPECIFIED | :PROFILE_TYPE_USER | :PROFILE_TYPE_API_KEY | :PROFILE_TYPE_SYSTEM

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
:PROFILE_TYPE_UNSPECIFIED
:PROFILE_TYPE_USER
:PROFILE_TYPE_API_KEY
:PROFILE_TYPE_SYSTEM
email: String

Email address of the profile. Required and unique within an account for user profiles.

name: String

Display name (e.g., “Bobby Tables”).

tool_set: ResourceMetadata { id, account_id, created_at, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: String

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

account_id: String

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

created_at: Time

Timestamp when this resource was created

formatdate-time
name: String

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profile_id: String

ID of the actor (user or service account) that created this resource

workspace_id: String

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundle_key: String

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

external_id: String

External ID for the resource (e.g., a workflow ID from an external system)

labels: Hash[Symbol, String]

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

class ToolSpec { config, description, parameters, 2 more }
config: ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http: ConfigHTTP { request_method, headers, path, 4 more }
request_method: :HTTP_METHOD_UNSPECIFIED | :GET | :POST | 3 more
formatenum
One of the following:
:HTTP_METHOD_UNSPECIFIED
:GET
:POST
:PUT
:PATCH
:DELETE
headers: Hash[Symbol, String]
path: String
query: String
request_body_content_type: String
request_body_template: String

These are only used when the request method is a POST, PUT, or PATCH

tool_name: String

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp: ConfigMcp { tool_description, tool_name, tool_title }
tool_description: String
tool_name: String
tool_title: String
openapi: ConfigOpenAPI { method_, operation_id, path }
method_: String
operation_id: String
path: String
description: String
parameters: Hash[Symbol, untyped]
status: :TOOL_STATUS_UNSPECIFIED | :TOOL_STATUS_AVAILABLE | :TOOL_STATUS_OMITTED | :TOOL_STATUS_ARCHIVED
formatenum
One of the following:
:TOOL_STATUS_UNSPECIFIED
:TOOL_STATUS_AVAILABLE
:TOOL_STATUS_OMITTED
:TOOL_STATUS_ARCHIVED
requires_approval: bool
class ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http: ConfigHTTP { request_method, headers, path, 4 more }
request_method: :HTTP_METHOD_UNSPECIFIED | :GET | :POST | 3 more
formatenum
One of the following:
:HTTP_METHOD_UNSPECIFIED
:GET
:POST
:PUT
:PATCH
:DELETE
headers: Hash[Symbol, String]
path: String
query: String
request_body_content_type: String
request_body_template: String

These are only used when the request method is a POST, PUT, or PATCH

tool_name: String

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp: ConfigMcp { tool_description, tool_name, tool_title }
tool_description: String
tool_name: String
tool_title: String
openapi: ConfigOpenAPI { method_, operation_id, path }
method_: String
operation_id: String
path: String