Skip to main content
ToolsClient is reachable on every Kataven client as client.tools. Each method maps to one HTTP endpoint on the Hub API; links to the underlying spec entry are inline below. Browse the tool catalog and author custom tools. Tools are functions an agent can call mid-conversation.

Methods at a glance

MethodHTTPSummary
listGET /api/toolsList tools
getGET /api/tools/{tool_id_or_name}Get a single tool
createPOST /api/toolsCreate a custom tool
updatePUT /api/tools/{tool_id_or_name}Update a tool
deleteDELETE /api/tools/{tool_id_or_name}Delete a custom tool

Reference

client.tools.list(...)

List tools HTTPGET /api/tools · API reference →
    def list(
        self,
        category: Optional[str] = None,
        type: Optional[str] = None,  # noqa: A002 — matches API param name
        search: Optional[str] = None,
        limit: int = 10,
        offset: int = 0,
    ) -> Dict[str, Any]:
pagination + category counts. Returns the catalog of tools available in this account, paginated and filterable. Includes category counts for filter UIs.

client.tools.get(...)

Get a single tool HTTPGET /api/tools/{id} · API reference →
    def get(self, tool_id_or_name: str) -> Dict[str, Any]:
Looks up the tool by uuid or by snake_case name. Returns 404 if neither matches.

client.tools.create(...)

Create a custom tool HTTPPOST /api/tools · API reference →
    def create(
        self,
        name: str,
        category: str,
        description: str = "",
        schema: Optional[Dict[str, Any]] = None,
        implementation_type: str = "python",
        implementation_config: Optional[Dict[str, Any]] = None,
        implementation_code: str = "",
        tags: Optional[List[str]] = None,
    ) -> Dict[str, Any]:

client.tools.update(...)

Update a tool HTTPPUT /api/tools/{id} · API reference →
    def update(self, tool_id_or_name: str, **kwargs) -> Dict[str, Any]:
Patches description / schema / implementation_config / implementation_code / tags. Default tools are flipped to modified_from_default=TRUE so re-seeds skip them.

client.tools.delete(...)

Delete a custom tool HTTPDELETE /api/tools/{id} · API reference →
    def delete(self, tool_id_or_name: str) -> Dict[str, Any]:
Default (seeded) tools cannot be deleted — only custom ones. Returns 403 if the tool is default.