## Search for tools or tool sets `search.search_tools_or_tool_sets(workspace_id, **kwargs) -> SearchSearchToolsOrToolSetsResponse` **get** `/v1/workspaces/{workspaceId}/search/tools_or_tool_sets` Searches for tools or tool sets in the workspace ### Parameters - `workspace_id: String` - `query: String` ### Returns - `class SearchSearchToolsOrToolSetsResponse` - `agents: Array[Agent]` - `metadata: ResourceMetadata` 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 - `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: AgentSpec` Agent specification (user-provided configuration) - `status: :AGENT_STATUS_UNSPECIFIED | :AGENT_STATUS_DRAFT | :AGENT_STATUS_PUBLISHED | :AGENT_STATUS_ARCHIVED` Status of the agent - `:AGENT_STATUS_UNSPECIFIED` - `:AGENT_STATUS_DRAFT` - `:AGENT_STATUS_PUBLISHED` - `:AGENT_STATUS_ARCHIVED` - `variation_selection_mode: :VARIATION_SELECTION_MODE_UNSPECIFIED | :VARIATION_SELECTION_MODE_RANDOM | :VARIATION_SELECTION_MODE_WEIGHTED` Controls how variations are automatically selected when creating objectives Defaults to RANDOM when unspecified - `:VARIATION_SELECTION_MODE_UNSPECIFIED` - `:VARIATION_SELECTION_MODE_RANDOM` - `:VARIATION_SELECTION_MODE_WEIGHTED` - `description: String` Description of the agent's purpose - `input_data_schema: Hash[Symbol, untyped]` InputDataSchema is used for enforcing a data input when objectives are created. This is valuable when using liquid formatting in agent variation prompts. Input data schema is also valuable when using an agent as a sub-agent, as the schema is used as the tool's input parameter schema. If omitted, the sub-agent schema will be loaded with a simple "prompt" free text string as its schema. - `output_definition: Hash[Symbol, untyped]` Optional output definition for objectives created for this agent. When provided, Cadenya will append a tool to that will be called by the LLM in use by the variant to extract information in the format provided here. Use this option when you want structured data to be created by your objectives. - `webhook_events_url: String` The URL that Cadenya will send events for any objective assigned to the agent. - `info: AgentInfo` AgentInfo contains simple information about an agent for display or quick reference - `created_by: Profile` 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` 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` 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. - `: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"). - `variation_count: Integer` - `tools: Array[Tool]` - `metadata: ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) - `spec: ToolSpec` - `config: ToolSpecConfig` 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: :HTTP_METHOD_UNSPECIFIED | :GET | :POST | 3 more` - `: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: String` - `tool_name: String` - `tool_title: String` - `openapi: ConfigOpenAPI` - `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` - `:TOOL_STATUS_UNSPECIFIED` - `:TOOL_STATUS_AVAILABLE` - `:TOOL_STATUS_OMITTED` - `:TOOL_STATUS_ARCHIVED` - `requires_approval: bool` - `info: ToolInfo` - `created_by: Profile` 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. - `tool_set: ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) - `tool_sets: Array[ToolSet]` - `metadata: ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) - `spec: ToolSetSpec` - `adapter: ToolSetAdapter` - `http: ToolSetAdapterHTTP` - `base_url: String` - `headers: Hash[Symbol, String]` - `mcp: ToolSetAdapterMcp` - `exclude_tools: ToolFilter` Top-level filter with simple boolean logic (no nesting) - `operator: :OPERATOR_UNSPECIFIED | :OPERATOR_AND | :OPERATOR_OR` - `:OPERATOR_UNSPECIFIED` - `:OPERATOR_AND` - `:OPERATOR_OR` - `filters: Array[AttributeFilter]` - `attribute: :ATTRIBUTE_UNSPECIFIED | :ATTRIBUTE_NAME | :ATTRIBUTE_TITLE | :ATTRIBUTE_DESCRIPTION` - `:ATTRIBUTE_UNSPECIFIED` - `:ATTRIBUTE_NAME` - `:ATTRIBUTE_TITLE` - `:ATTRIBUTE_DESCRIPTION` - `matcher: StringMatcher` String matching operations - `case_sensitive: bool` - `contains: String` - `ends_with: String` - `exact: String` - `regex: String` - `starts_with: String` - `headers: Hash[Symbol, String]` - `include_tools: ToolFilter` Top-level filter with simple boolean logic (no nesting) - `tool_approvals: ApprovalRequirementFilter` Approval filters that will automatically set the approval requirement on tools synced from an external source - `always: bool` - `only: ToolFilter` Top-level filter with simple boolean logic (no nesting) - `url: String` - `openapi: ToolSetAdapterOpenAPI` - `base_url: String` Base URL for dispatching tool calls. If set, overrides the server resolved from the spec's servers array. - `exclude_tools: ToolFilter` Top-level filter with simple boolean logic (no nesting) - `headers: Hash[Symbol, String]` Headers sent when fetching the spec from a URL and when dispatching tool calls. - `include_tools: ToolFilter` Top-level filter with simple boolean logic (no nesting) - `server_name: String` Name of the server entry in the spec's servers array (OpenAPI 3.2 server.name field). Used to select which server URL to dispatch to when base_url is not set. If unset, the first server is used. Ignored when base_url is set. - `tool_approvals: ApprovalRequirementFilter` Approval filters that will automatically set the approval requirement on tools synced from an external source - `upload_id: String` ID of a COMPLETE Upload containing the OpenAPI spec document. - `url: String` URL to fetch the OpenAPI spec from. Synced automatically every hour. - `description: String` - `info: ToolSetInfo` Tool set information - `agent_count: Integer` - `created_by: Profile` 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. - `last_sync: Time` - `tool_count: Integer` ### Example ```ruby require "cadenya" cadenya = Cadenya::Client.new(api_key: "My API Key") response = cadenya.search.search_tools_or_tool_sets("workspaceId") puts(response) ``` #### Response ```json { "agents": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "bundleKey": "bundleKey", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "status": "AGENT_STATUS_UNSPECIFIED", "variationSelectionMode": "VARIATION_SELECTION_MODE_UNSPECIFIED", "description": "description", "inputDataSchema": { "foo": "bar" }, "outputDefinition": { "foo": "bar" }, "webhookEventsUrl": "webhookEventsUrl" }, "info": { "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_UNSPECIFIED", "email": "email", "name": "name" } }, "variationCount": 0 } } ], "tools": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "bundleKey": "bundleKey", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "config": { "http": { "requestMethod": "HTTP_METHOD_UNSPECIFIED", "headers": { "foo": "string" }, "path": "path", "query": "query", "requestBodyContentType": "requestBodyContentType", "requestBodyTemplate": "requestBodyTemplate", "toolName": "toolName" }, "mcp": { "toolDescription": "toolDescription", "toolName": "toolName", "toolTitle": "toolTitle" }, "openapi": { "method": "method", "operationId": "operationId", "path": "path" } }, "description": "description", "parameters": { "foo": "bar" }, "status": "TOOL_STATUS_UNSPECIFIED", "requiresApproval": true }, "info": { "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_UNSPECIFIED", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "bundleKey": "bundleKey", "externalId": "externalId", "labels": { "foo": "string" } } } } ], "toolSets": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "bundleKey": "bundleKey", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "adapter": { "http": { "baseUrl": "baseUrl", "headers": { "foo": "string" } }, "mcp": { "excludeTools": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] }, "headers": { "foo": "string" }, "includeTools": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] }, "toolApprovals": { "always": true, "only": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] } }, "url": "url" }, "openapi": { "baseUrl": "baseUrl", "excludeTools": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] }, "headers": { "foo": "string" }, "includeTools": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] }, "serverName": "serverName", "toolApprovals": { "always": true, "only": { "operator": "OPERATOR_UNSPECIFIED", "filters": [ { "attribute": "ATTRIBUTE_UNSPECIFIED", "matcher": { "caseSensitive": true, "contains": "contains", "endsWith": "endsWith", "exact": "exact", "regex": "regex", "startsWith": "startsWith" } } ] } }, "uploadId": "uploadId", "url": "url" } }, "description": "description" }, "info": { "agentCount": 0, "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_UNSPECIFIED", "email": "email", "name": "name" } }, "lastSync": "2019-12-27T18:11:19.117Z", "toolCount": 0 } } ] } ```