# Tool Sets ## List tool sets `client.ToolSets.List(ctx, query) (*CursorPagination[ToolSet], error)` **get** `/v1/tool_sets` Lists all tool sets in the workspace ### Parameters - `query ToolSetListParams` - `Cursor param.Field[string]` Pagination cursor from previous response - `IncludeInfo param.Field[bool]` When set to true you may use more of your alloted API rate-limit - `Limit param.Field[int64]` Maximum number of results to return - `Prefix param.Field[string]` Filter expression (query param: prefix) - `SortOrder param.Field[string]` Sort order for results (asc or desc by creation time) ### Returns - `type ToolSet struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ToolSetSpec` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` - `Info ToolSetInfo` Tool set information - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) page, err := client.ToolSets.List(context.TODO(), cadenya.ToolSetListParams{ }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "items": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "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" } }, "description": "description" }, "info": { "agentCount": 0, "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_USER", "email": "email", "name": "name" } }, "lastSync": "2019-12-27T18:11:19.117Z", "toolCount": 0 } } ], "pagination": { "nextCursor": "nextCursor", "total": 0 } } ``` ## Create a new tool set `client.ToolSets.New(ctx, body) (*ToolSet, error)` **post** `/v1/tool_sets` Creates a new tool set in the workspace ### Parameters - `body ToolSetNewParams` - `Metadata param.Field[CreateResourceMetadata]` CreateResourceMetadata contains the user-provided fields for creating a workspace-scoped resource. Read-only fields (id, account_id, workspace_id, profile_id, created_at) are excluded since they are set by the server. - `Spec param.Field[ToolSetSpec]` ### Returns - `type ToolSet struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ToolSetSpec` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` - `Info ToolSetInfo` Tool set information - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" "github.com/cadenya/cadenya-go/shared" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) toolSet, err := client.ToolSets.New(context.TODO(), cadenya.ToolSetNewParams{ Metadata: cadenya.F(shared.CreateResourceMetadataParam{ Name: cadenya.F("name"), }), Spec: cadenya.F(cadenya.ToolSetSpecParam{ }), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", toolSet.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "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" } }, "description": "description" }, "info": { "agentCount": 0, "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_USER", "email": "email", "name": "name" } }, "lastSync": "2019-12-27T18:11:19.117Z", "toolCount": 0 } } ``` ## Get a tool set by ID `client.ToolSets.Get(ctx, id) (*ToolSet, error)` **get** `/v1/tool_sets/{id}` Retrieves a tool set by ID from the workspace ### Parameters - `id string` ### Returns - `type ToolSet struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ToolSetSpec` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` - `Info ToolSetInfo` Tool set information - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) toolSet, err := client.ToolSets.Get(context.TODO(), "id") if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", toolSet.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "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" } }, "description": "description" }, "info": { "agentCount": 0, "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_USER", "email": "email", "name": "name" } }, "lastSync": "2019-12-27T18:11:19.117Z", "toolCount": 0 } } ``` ## Update a tool set `client.ToolSets.Update(ctx, id, body) (*ToolSet, error)` **put** `/v1/tool_sets/{id}` Updates a tool set in the workspace ### Parameters - `id string` - `body ToolSetUpdateParams` - `Metadata param.Field[UpdateResourceMetadata]` UpdateResourceMetadata contains the user-provided fields for updating a workspace-scoped resource. Read-only fields (id, account_id, workspace_id, profile_id, created_at) are excluded since they are set by the server. - `Spec param.Field[ToolSetSpec]` - `UpdateMask param.Field[string]` ### Returns - `type ToolSet struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ToolSetSpec` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` - `Info ToolSetInfo` Tool set information - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) toolSet, err := client.ToolSets.Update( context.TODO(), "id", cadenya.ToolSetUpdateParams{ }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", toolSet.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "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" } }, "description": "description" }, "info": { "agentCount": 0, "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_USER", "email": "email", "name": "name" } }, "lastSync": "2019-12-27T18:11:19.117Z", "toolCount": 0 } } ``` ## Delete a tool set `client.ToolSets.Delete(ctx, id) error` **delete** `/v1/tool_sets/{id}` Deletes a tool set in the workspace ### Parameters - `id string` ### Example ```go package main import ( "context" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) err := client.ToolSets.Delete(context.TODO(), "id") if err != nil { panic(err.Error()) } } ``` ## List tool set events `client.ToolSets.ListEvents(ctx, toolSetID, query) (*CursorPagination[ToolSetEvent], error)` **get** `/v1/tool_sets/{toolSetId}/events` Lists all events (including sync status) for a tool set ### Parameters - `toolSetID string` - `query ToolSetListEventsParams` - `Cursor param.Field[string]` Pagination cursor from previous response - `IncludeInfo param.Field[bool]` When set to true you may use more of your alloted API rate-limit - `Limit param.Field[int64]` Maximum number of results to return - `SortOrder param.Field[string]` Sort order for results (asc or desc by creation time) ### Returns - `type ToolSetEvent struct{…}` ToolSetEvent represents a single event in the tool set's operation timeline - `Metadata OperationMetadata` Metadata for ephemeral operations and activities (e.g., objectives, executions, runs) - `ID string` Unique identifier for the operation (prefixed ULID, e.g., "obj_01HXK...") - `AccountID string` Account this operation belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt Time` Timestamp when this operation was created ULID includes timestamp information, but this explicit field enables easier querying - `ProfileID string` ID of the actor (user or service account) that created this operation - `WorkspaceID string` Workspace this operation belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the operation (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"priority": "high", "source": "api", "workflow": "onboarding"} - `Event ToolSetEventData` ToolSetEventData represents the actual event payload for tool set operations - `SyncCompleted SyncCompleted` SyncCompleted is emitted when a tool set sync operation completes successfully - `Message string` Optional message with additional details - `ToolsSynced int64` Number of tools synced - `SyncFailed SyncFailed` SyncFailed is emitted when a tool set sync operation fails - `Error bool` Indicates this is an error event - `ErrorType string` Optional error type/code for programmatic handling - `Message string` Error message describing what went wrong - `SyncStarted SyncStarted` SyncStarted is emitted when a tool set sync operation begins - `Message string` Timestamp when the sync was initiated - `Type string` Type of the event (e.g., "sync_started", "sync_completed", "sync_failed") - `Info ToolSetEventInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet 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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `ToolSetID string` The tool set this event is associated with ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) page, err := client.ToolSets.ListEvents( context.TODO(), "toolSetId", cadenya.ToolSetListEventsParams{ }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "items": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } }, "event": { "syncCompleted": { "message": "message", "toolsSynced": 0 }, "syncFailed": { "error": true, "errorType": "errorType", "message": "message" }, "syncStarted": { "message": "message" }, "type": "type" }, "info": { "createdBy": { "metadata": { "id": "id", "accountId": "accountId", "name": "name", "profileId": "profileId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "type": "PROFILE_TYPE_USER", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } } }, "toolSetId": "toolSetId" } ], "pagination": { "nextCursor": "nextCursor", "total": 0 } } ``` ## Domain Types ### Mcp Tool Filter - `type McpToolFilter struct{…}` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` ### Sync Completed - `type SyncCompleted struct{…}` SyncCompleted is emitted when a tool set sync operation completes successfully - `Message string` Optional message with additional details - `ToolsSynced int64` Number of tools synced ### Sync Failed - `type SyncFailed struct{…}` SyncFailed is emitted when a tool set sync operation fails - `Error bool` Indicates this is an error event - `ErrorType string` Optional error type/code for programmatic handling - `Message string` Error message describing what went wrong ### Sync Started - `type SyncStarted struct{…}` SyncStarted is emitted when a tool set sync operation begins - `Message string` Timestamp when the sync was initiated ### Tool Set - `type ToolSet struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ToolSetSpec` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` - `Info ToolSetInfo` Tool set information - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Tool Set Adapter - `type ToolSetAdapter struct{…}` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` ### Tool Set Adapter HTTP - `type ToolSetAdapterHTTP struct{…}` - `BaseURL string` - `Headers map[string, string]` ### Tool Set Adapter Mcp - `type ToolSetAdapterMcp struct{…}` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` ### Tool Set Event - `type ToolSetEvent struct{…}` ToolSetEvent represents a single event in the tool set's operation timeline - `Metadata OperationMetadata` Metadata for ephemeral operations and activities (e.g., objectives, executions, runs) - `ID string` Unique identifier for the operation (prefixed ULID, e.g., "obj_01HXK...") - `AccountID string` Account this operation belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt Time` Timestamp when this operation was created ULID includes timestamp information, but this explicit field enables easier querying - `ProfileID string` ID of the actor (user or service account) that created this operation - `WorkspaceID string` Workspace this operation belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the operation (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"priority": "high", "source": "api", "workflow": "onboarding"} - `Event ToolSetEventData` ToolSetEventData represents the actual event payload for tool set operations - `SyncCompleted SyncCompleted` SyncCompleted is emitted when a tool set sync operation completes successfully - `Message string` Optional message with additional details - `ToolsSynced int64` Number of tools synced - `SyncFailed SyncFailed` SyncFailed is emitted when a tool set sync operation fails - `Error bool` Indicates this is an error event - `ErrorType string` Optional error type/code for programmatic handling - `Message string` Error message describing what went wrong - `SyncStarted SyncStarted` SyncStarted is emitted when a tool set sync operation begins - `Message string` Timestamp when the sync was initiated - `Type string` Type of the event (e.g., "sync_started", "sync_completed", "sync_failed") - `Info ToolSetEventInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet 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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `ToolSetID string` The tool set this event is associated with ### Tool Set Event Data - `type ToolSetEventData struct{…}` ToolSetEventData represents the actual event payload for tool set operations - `SyncCompleted SyncCompleted` SyncCompleted is emitted when a tool set sync operation completes successfully - `Message string` Optional message with additional details - `ToolsSynced int64` Number of tools synced - `SyncFailed SyncFailed` SyncFailed is emitted when a tool set sync operation fails - `Error bool` Indicates this is an error event - `ErrorType string` Optional error type/code for programmatic handling - `Message string` Error message describing what went wrong - `SyncStarted SyncStarted` SyncStarted is emitted when a tool set sync operation begins - `Message string` Timestamp when the sync was initiated - `Type string` Type of the event (e.g., "sync_started", "sync_completed", "sync_failed") ### Tool Set Info - `type ToolSetInfo struct{…}` - `AgentCount int64` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `LastSync Time` - `ToolCount int64` ### Tool Set Spec - `type ToolSetSpec struct{…}` - `Adapter ToolSetAdapter` - `HTTP ToolSetAdapterHTTP` - `BaseURL string` - `Headers map[string, string]` - `Mcp ToolSetAdapterMcp` - `ExcludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `Operator McpToolFilterOperator` - `const McpToolFilterOperatorOperatorUnspecified McpToolFilterOperator = "OPERATOR_UNSPECIFIED"` - `const McpToolFilterOperatorOperatorAnd McpToolFilterOperator = "OPERATOR_AND"` - `const McpToolFilterOperatorOperatorOr McpToolFilterOperator = "OPERATOR_OR"` - `Filters []McpToolFilterFilter` - `Attribute McpToolFilterFiltersAttribute` - `const McpToolFilterFiltersAttributeAttributeUnspecified McpToolFilterFiltersAttribute = "ATTRIBUTE_UNSPECIFIED"` - `const McpToolFilterFiltersAttributeAttributeName McpToolFilterFiltersAttribute = "ATTRIBUTE_NAME"` - `const McpToolFilterFiltersAttributeAttributeTitle McpToolFilterFiltersAttribute = "ATTRIBUTE_TITLE"` - `const McpToolFilterFiltersAttributeAttributeDescription McpToolFilterFiltersAttribute = "ATTRIBUTE_DESCRIPTION"` - `Matcher McpToolFilterFiltersMatcher` String matching operations - `CaseSensitive bool` - `Contains string` - `EndsWith string` - `Exact string` - `Regex string` - `StartsWith string` - `Headers map[string, string]` - `IncludeTools McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `ToolApprovals ToolSetAdapterMcpToolApprovals` Approval filters that will automatically set the approval requirement on the tools synced from the MCP server - `Always bool` - `Only McpToolFilter` Top-level filter with simple boolean logic (no nesting) - `URL string` - `Description string` # Tools ## List tools `client.ToolSets.Tools.List(ctx, toolSetID, query) (*CursorPagination[Tool], error)` **get** `/v1/tool_sets/{toolSetId}/tools` Lists all tools in the tool set ### Parameters - `toolSetID string` - `query ToolSetToolListParams` - `Cursor param.Field[string]` Pagination cursor from previous response - `IncludeInfo param.Field[bool]` When set to true you may use more of your alloted API rate-limit - `Limit param.Field[int64]` Maximum number of results to return - `Prefix param.Field[string]` Filter expression (query param: prefix) - `SortOrder param.Field[string]` Sort order for results (asc or desc by creation time) ### Returns - `type Tool struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` - `Info ToolInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) page, err := client.ToolSets.Tools.List( context.TODO(), "toolSetId", cadenya.ToolSetToolListParams{ }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "items": [ { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "config": { "http": { "requestMethod": "GET", "headers": { "foo": "string" }, "path": "path", "query": "query", "requestBodyContentType": "requestBodyContentType", "requestBodyTemplate": "requestBodyTemplate", "toolName": "toolName" }, "mcp": { "toolDescription": "toolDescription", "toolName": "toolName", "toolTitle": "toolTitle" } }, "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_USER", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } } } } ], "pagination": { "nextCursor": "nextCursor", "total": 0 } } ``` ## Create a new tool `client.ToolSets.Tools.New(ctx, toolSetID, body) (*Tool, error)` **post** `/v1/tool_sets/{toolSetId}/tools` Creates a new tool in the tool set ### Parameters - `toolSetID string` - `body ToolSetToolNewParams` - `Metadata param.Field[CreateResourceMetadata]` CreateResourceMetadata contains the user-provided fields for creating a workspace-scoped resource. Read-only fields (id, account_id, workspace_id, profile_id, created_at) are excluded since they are set by the server. - `Spec param.Field[ToolSpec]` ### Returns - `type Tool struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` - `Info ToolInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" "github.com/cadenya/cadenya-go/shared" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) tool, err := client.ToolSets.Tools.New( context.TODO(), "toolSetId", cadenya.ToolSetToolNewParams{ Metadata: cadenya.F(shared.CreateResourceMetadataParam{ Name: cadenya.F("name"), }), Spec: cadenya.F(cadenya.ToolSpecParam{ Config: cadenya.F(cadenya.ToolSpecConfigParam{ }), Description: cadenya.F("description"), Parameters: cadenya.F(map[string]interface{}{ "foo": "bar", }), Status: cadenya.F(cadenya.ToolSpecStatusToolStatusUnspecified), }), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", tool.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "config": { "http": { "requestMethod": "GET", "headers": { "foo": "string" }, "path": "path", "query": "query", "requestBodyContentType": "requestBodyContentType", "requestBodyTemplate": "requestBodyTemplate", "toolName": "toolName" }, "mcp": { "toolDescription": "toolDescription", "toolName": "toolName", "toolTitle": "toolTitle" } }, "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_USER", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } } } } ``` ## Get a tool by ID `client.ToolSets.Tools.Get(ctx, toolSetID, id) (*Tool, error)` **get** `/v1/tool_sets/{toolSetId}/tools/{id}` Retrieves a tool by ID from the workspace ### Parameters - `toolSetID string` - `id string` ### Returns - `type Tool struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` - `Info ToolInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) tool, err := client.ToolSets.Tools.Get( context.TODO(), "toolSetId", "id", ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", tool.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "config": { "http": { "requestMethod": "GET", "headers": { "foo": "string" }, "path": "path", "query": "query", "requestBodyContentType": "requestBodyContentType", "requestBodyTemplate": "requestBodyTemplate", "toolName": "toolName" }, "mcp": { "toolDescription": "toolDescription", "toolName": "toolName", "toolTitle": "toolTitle" } }, "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_USER", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } } } } ``` ## Update a tool `client.ToolSets.Tools.Update(ctx, toolSetID, id, body) (*Tool, error)` **put** `/v1/tool_sets/{toolSetId}/tools/{id}` Updates a tool in the tool set ### Parameters - `toolSetID string` - `id string` - `body ToolSetToolUpdateParams` - `Metadata param.Field[UpdateResourceMetadata]` UpdateResourceMetadata contains the user-provided fields for updating a workspace-scoped resource. Read-only fields (id, account_id, workspace_id, profile_id, created_at) are excluded since they are set by the server. - `Spec param.Field[ToolSpec]` - `UpdateMask param.Field[string]` ### Returns - `type Tool struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` - `Info ToolInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) ### Example ```go package main import ( "context" "fmt" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) tool, err := client.ToolSets.Tools.Update( context.TODO(), "toolSetId", "id", cadenya.ToolSetToolUpdateParams{ }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", tool.Metadata) } ``` #### Response ```json { "metadata": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } }, "spec": { "config": { "http": { "requestMethod": "GET", "headers": { "foo": "string" }, "path": "path", "query": "query", "requestBodyContentType": "requestBodyContentType", "requestBodyTemplate": "requestBodyTemplate", "toolName": "toolName" }, "mcp": { "toolDescription": "toolDescription", "toolName": "toolName", "toolTitle": "toolTitle" } }, "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_USER", "email": "email", "name": "name" } }, "toolSet": { "id": "id", "accountId": "accountId", "createdAt": "2019-12-27T18:11:19.117Z", "name": "name", "profileId": "profileId", "workspaceId": "workspaceId", "externalId": "externalId", "labels": { "foo": "string" } } } } ``` ## Delete a tool `client.ToolSets.Tools.Delete(ctx, toolSetID, id) error` **delete** `/v1/tool_sets/{toolSetId}/tools/{id}` Deletes a tool in the tool set ### Parameters - `toolSetID string` - `id string` ### Example ```go package main import ( "context" "github.com/cadenya/cadenya-go" "github.com/cadenya/cadenya-go/option" ) func main() { client := cadenya.NewClient( option.WithAPIKey("My API Key"), ) err := client.ToolSets.Tools.Delete( context.TODO(), "toolSetId", "id", ) if err != nil { panic(err.Error()) } } ``` ## Domain Types ### Config HTTP - `type ConfigHTTP struct{…}` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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. ### Config Mcp - `type ConfigMcp struct{…}` - `ToolDescription string` - `ToolName string` - `ToolTitle string` ### Tool - `type Tool struct{…}` - `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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` - `Info ToolInfo` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet ResourceMetadata` Standard metadata for persistent, named resources (e.g., agents, tools, prompts) ### Tool Info - `type ToolInfo struct{…}` - `CreatedBy Profile` Profile represents a human user at the account level. Profiles are account-scoped resources that can be associated with multiple workspaces through the Actor model. Authentication for profiles is handled via SSO/OAuth (WorkOS). - `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...") - `AccountID 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 - `ProfileID string` - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} - `Spec ProfileSpec` ProfileSpec contains the profile-specific fields - `Type ProfileSpecType` Type is the type of profile. User's are humans, API keys are computers. You know the deal. - `const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"` - `const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"` - `const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"` - `Email string` Email address of the user (required, unique per account) - `Name string` Display name for the user (e.g., "Bobby Tables") - `ToolSet 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...") - `AccountID string` Account this resource belongs to for multi-tenant isolation (prefixed ULID) - `CreatedAt 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 - `ProfileID string` ID of the actor (user or service account) that created this resource - `WorkspaceID string` Workspace this resource belongs to for organizational grouping (prefixed ULID) - `ExternalID string` External ID for the resource (e.g., a workflow ID from an external system) - `Labels map[string, string]` Arbitrary key-value pairs for categorization and filtering Examples: {"environment": "production", "team": "platform", "version": "v2"} ### Tool Spec - `type ToolSpec struct{…}` - `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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string` - `Description string` - `Parameters map[string, unknown]` - `Status ToolSpecStatus` - `const ToolSpecStatusToolStatusUnspecified ToolSpecStatus = "TOOL_STATUS_UNSPECIFIED"` - `const ToolSpecStatusToolStatusAvailable ToolSpecStatus = "TOOL_STATUS_AVAILABLE"` - `const ToolSpecStatusToolStatusFiltered ToolSpecStatus = "TOOL_STATUS_FILTERED"` - `const ToolSpecStatusToolStatusArchived ToolSpecStatus = "TOOL_STATUS_ARCHIVED"` - `RequiresApproval bool` ### Tool Spec Config - `type ToolSpecConfig struct{…}` 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` - `RequestMethod ConfigHTTPRequestMethod` - `const ConfigHTTPRequestMethodGet ConfigHTTPRequestMethod = "GET"` - `const ConfigHTTPRequestMethodPost ConfigHTTPRequestMethod = "POST"` - `const ConfigHTTPRequestMethodPut ConfigHTTPRequestMethod = "PUT"` - `const ConfigHTTPRequestMethodPatch ConfigHTTPRequestMethod = "PATCH"` - `const ConfigHTTPRequestMethodDelete ConfigHTTPRequestMethod = "DELETE"` - `Headers map[string, string]` - `Path string` - `Query string` - `RequestBodyContentType string` - `RequestBodyTemplate string` These are only used when the request method is a POST, PUT, or PATCH - `ToolName 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` - `ToolDescription string` - `ToolName string` - `ToolTitle string`