工具箱 (0.1.3)

Download OpenAPI specification:

工具箱(tool box)是一组工具的容器,也是权限与发布的单位。Agent 挂载的是 工具箱,不是单个工具。

两层结构:工具箱有自己的生命周期(unpublish / published / offline) 与分类;箱内每个工具有独立的启停开关(enabled / disabled)。两者是两套状态, 别混——工具箱已发布不代表箱内工具都启用。

工具从哪来,三条路:

方式 接口
直接建(写 OpenAPI 或函数代码) POST /tool-box/{box_id}/tool
由已有算子转换 POST /operator/convert/tool
一份 OpenAPI 文档批量建算子 + 工具 POST /capabilities/openapi-bundle

时间戳一律是纳秒:所有 *_time 字段由 time.Now().UnixNano() 生成, 按毫秒解析会得到 1970 年附近的日期。

认证Authorization: Bearer <token>(OAuth access token 或 bak_ 前缀的 AppKey)。

ToolBox

新建工具箱

建一个空工具箱。metadata_type 决定这个箱子装哪类工具,建成后不可更改 (编辑接口的 metadata_type 是可选的,传了才校验)。

openapi 类型的箱子必须给 box_svc_url——箱内工具的请求都发往这个地址。

Authorizations:
OAuth2AppKey
header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Request Body schema: application/json
required
box_name
string

工具箱名称。

box_desc
string

工具箱描述。

box_svc_url
string

工具箱服务地址。**metadata_type=openapi 时必填**,箱内工具的请求都发往这里。

box_category
string
Default: "other_category"

分类。

metadata_type
required
string (MetadataType)
Enum: "openapi" "function"

元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义 (functionfunction_inputopenapidata)。

source
string
Default: "custom"

来源。

data
string

OpenAPI 原文,建箱同时导入工具时用。

Responses

Request samples

Content type
application/json
Example
{
  • "box_name": "天气服务",
  • "box_desc": "对接第三方天气 API",
  • "box_svc_url": "https://api.example.com",
  • "box_category": "data_query",
  • "metadata_type": "openapi"
}

Response samples

Content type
application/json
{
  • "box_id": "string"
}

分页查询工具箱

按业务域分页列出工具箱。metadata_type 过滤用于「函数工具工作台只列函数 工具箱」这类场景。

条目里的 tools工具名字符串数组,不是工具对象也不是 ID——要工具详情 得再调 GET /tool-box/{box_id}/tools/list

Authorizations:
OAuth2AppKey
query Parameters
page
integer >= 1
Default: 1

页码,从 1 开始。

page_size
integer [ 1 .. 100 ]
Default: 10

每页数量,1–100。

sort_by
string
Default: "update_time"
Enum: "create_time" "update_time" "name"

排序字段。

sort_order
string
Default: "desc"
Enum: "asc" "desc"

排序方向。

name
string

按工具箱名称过滤。

status
string (BizStatus)
Enum: "unpublish" "published" "offline"

按工具箱状态过滤。

category
string

按分类过滤。

create_user
string

按创建人过滤。

release_user
string

按发布人过滤。

metadata_type
string (MetadataType)
Enum: "openapi" "function"

按元数据类型过滤。

all
boolean

忽略分页返回全部。

header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Responses

Response samples

Content type
application/json
{
  • "total": 45,
  • "page": 1,
  • "page_size": 2,
  • "total_pages": 23,
  • "has_next": true,
  • "has_prev": false,
  • "data": [
    ]
}

按 ID 批量取工具箱名

/operator/names/skills/names 同契约:不存在的 ID 静默略过、不占位, 调用方自己比对哪些没回来。

Authorizations:
OAuth2AppKey
Request Body schema: application/json
required
ids
Array of strings

待取名的工具箱 ID 列表。空列表返回空 entries

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ]
}

Response samples

Content type
application/json
{
  • "entries": [
    ]
}

查询工具箱详情

取工具箱详情,含箱内工具的完整定义。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Responses

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "box_name": "string",
  • "box_desc": "string",
  • "box_svc_url": "string",
  • "business_domain_id": "string",
  • "metadata_type": "openapi",
  • "status": "unpublish",
  • "category_type": "string",
  • "category_name": "string",
  • "is_internal": true,
  • "source": "string",
  • "tools": [
    ],
  • "create_user": "string",
  • "create_time": 0,
  • "update_user": "string",
  • "update_time": 0,
  • "release_user": "string",
  • "release_time": 0
}

更新工具箱

更新走 POST 不是 PUTbox_name / box_desc / box_category 都是必填 ——这是整体覆盖,不是部分更新,不传就报必填错误。

metadata_type 反而是可选的:工具箱建成后类型不会变,带了才校验取值。

响应里的 edit_tools 列出因本次更新而受影响的工具及其新状态。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Request Body schema: application/json
required
box_name
required
string
box_desc
required
string
box_svc_url
string

metadata_type=openapi 时必填。

box_category
required
string
metadata_type
string (MetadataType)
Enum: "openapi" "function"

元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义 (functionfunction_inputopenapidata)。

data
string

OpenAPI 原文。

Responses

Request samples

Content type
application/json
{
  • "box_name": "string",
  • "box_desc": "string",
  • "box_svc_url": "string",
  • "box_category": "string",
  • "metadata_type": "openapi",
  • "data": "string"
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "edit_tools": [
    ]
}

删除工具箱

删除工具箱及其下全部工具。已被 Agent 挂载的工具箱删除后调用方会拿到 404。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Responses

Response samples

Content type
application/json
{
  • "code": "Public.BadRequest",
  • "description": "string",
  • "solution": "string",
  • "link": "string",
  • "details": null
}

更新工具箱状态

发布 / 下架工具箱。工具箱只有三个状态unpublish / published / offline),没有算子那边的 editing

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Request Body schema: application/json
required
status
required
string (BizStatus)
Enum: "unpublish" "published" "offline"

工具箱的生命周期状态。只有三个值,没有算子那边的 editing

Responses

Request samples

Content type
application/json
{
  • "status": "unpublish"
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "status": "unpublish"
}

在工具箱中新建工具

往箱子里加工具。metadata_type 决定必填字段:functionfunction_input(代码约定见 function.yaml,入口函数必须叫 handler),openapidata(OpenAPI 原文)。

一次可以建出多个工具:一份 OpenAPI 文档里有几个操作就建几个工具, 所以响应是 success_count / failure_count 的批量结果,部分成功是常态 ——failure_count 非 0 时接口仍返回 200,失败明细在 failures 里。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Request Body schema: application/json
required
metadata_type
required
string (MetadataType)
Enum: "openapi" "function"

元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义 (functionfunction_inputopenapidata)。

use_rule
string

使用规则。

object (GlobalParameter)

全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。

object

函数定义。**metadata_type=function 时必填**,结构见 operator.yamlFunctionInput:入口函数必须叫 handler

data
string

OpenAPI 原文。**metadata_type=openapi 时必填**。文档里有几个操作就建 几个工具。

object

Responses

Request samples

Content type
application/json
{
  • "metadata_type": "openapi",
  • "use_rule": "string",
  • "global_parameters": {
    },
  • "function_input": { },
  • "data": "string",
  • "extend_info": { }
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "success_count": 0,
  • "success_ids": [
    ],
  • "failure_count": 0,
  • "failures": [
    ]
}

查询工具详情

取单个工具的完整定义,含元数据、全局参数与使用规则。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

tool_id
required
string

工具 ID。

Responses

Response samples

Content type
application/json
{
  • "tool_id": "string",
  • "name": "string",
  • "description": "string",
  • "status": "enabled",
  • "metadata_type": "openapi",
  • "metadata": { },
  • "use_rule": "string",
  • "global_parameters": {
    },
  • "resource_object": "tool",
  • "extend_info": { },
  • "create_user": "string",
  • "create_time": 0,
  • "update_user": "string",
  • "update_time": 0
}

更新工具

更新走 POST 不是 PUT。 namedescriptionmetadata_type 都是必填 ——整体覆盖,不是部分更新。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

tool_id
required
string

工具 ID。

Request Body schema: application/json
required
name
required
string
description
required
string
metadata_type
required
string (MetadataType)
Enum: "openapi" "function"

元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义 (functionfunction_inputopenapidata)。

use_rule
string
object (GlobalParameter)

全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。

object

函数定义(编辑形态,无 name / description)。

data
string

OpenAPI 原文。

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "metadata_type": "openapi",
  • "use_rule": "string",
  • "global_parameters": {
    },
  • "function_input": { },
  • "data": "string",
  • "extend_info": { }
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "tool_id": "string"
}

分页查询箱内工具

列出工具箱里的工具。

**响应的数据字段叫 tools 不是 data**,还多一个 box_id——与本服务其他 分页接口(含同模块的 /tool-box/market/tools)不一致,解析时注意。

排序字段这里可选 create_time / update_time / tool_name,默认 create_time(工具箱列表默认的是 update_time)。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

query Parameters
page
integer >= 1
Default: 1

页码,从 1 开始。

page_size
integer [ 1 .. 100 ]
Default: 10

每页数量,1–100。

sort_by
string
Default: "create_time"
Enum: "create_time" "update_time" "tool_name"

排序字段。

sort_order
string
Default: "desc"
Enum: "asc" "desc"

排序方向。

name
string

按工具名过滤。

status
string (ToolStatus)
Enum: "enabled" "disabled"

按工具启停状态过滤。

user_id
string

按创建者过滤。

all
boolean

忽略分页返回全部。

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "page": 0,
  • "page_size": 0,
  • "total_pages": 0,
  • "has_next": true,
  • "has_prev": true,
  • "box_id": "string",
  • "tools": [
    ]
}

批量删除箱内工具

按 ID 批量删除工具箱里的工具。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Request Body schema: application/json
required
tool_ids
required
Array of strings

要删除的工具 ID 列表。

Responses

Request samples

Content type
application/json
{
  • "tool_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "tool_ids": [
    ]
}

批量启停箱内工具

请求体是数组,一次改多个工具的启停。工具的状态只有 enabled / disabled 两个值——与工具箱的发布状态是两套,别混。

禁用的工具不会出现在 Agent 可用的工具列表里,但仍留在箱子中。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Request Body schema: application/json
required
Array
tool_id
required
string
status
required
string (ToolStatus)
Enum: "enabled" "disabled"

单个工具的启停状态。与工具箱的 BizStatus 是两套,别混——工具箱已发布不 代表箱内工具都启用。

Responses

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

调试工具

用给定参数真实调用一次工具。与 /proxy/{tool_id} 的差别只在语义与审计 ——调试面向开发期,代理面向生产调用。请求与响应结构一致。

参数按 HTTP 的四个位置分开传:header / query / path / body

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

tool_id
required
string

工具 ID。

Request Body schema: application/json
required
timeout
integer

超时(秒)。

object

请求头参数。

object

查询参数。

object

路径参数。

body
any

请求体。函数类工具只用这个。

Responses

Request samples

Content type
application/json
{
  • "timeout": 0,
  • "header": { },
  • "query": { },
  • "path": {
    },
  • "body": null
}

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "headers": { },
  • "body": null,
  • "error": "string"
}

代理调用工具

生产调用入口:由平台代为执行工具并返回结果,调用方不必知道工具背后打的是 哪个地址。与调试接口的差别在于会走权限校验与审计日志。

返回的是被调服务的原始响应status_code / headers / body), 不是平台自己的信封——上游返 500 时本接口仍是 200,status_code 里才是 500。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

tool_id
required
string

工具 ID。

Request Body schema: application/json
required
timeout
integer

超时(秒)。

object

请求头参数。

object

查询参数。

object

路径参数。

body
any

请求体。函数类工具只用这个。

Responses

Request samples

Content type
application/json
{
  • "timeout": 0,
  • "header": { },
  • "query": { },
  • "path": {
    },
  • "body": null
}

Response samples

Content type
application/json
{
  • "status_code": 0,
  • "headers": { },
  • "body": null,
  • "error": "string"
}

把算子转换成工具

拿一个已注册的算子,在指定工具箱里生成对应的工具。算子与工具之间保留血缘, 算子更新后工具可随之更新。

路径挂在 /operator/ 下但归工具箱模块管——它产出的是工具。

Authorizations:
OAuth2AppKey
Request Body schema: application/json
required
operator_id
required
string

要转换的算子 ID。

box_id
required
string

目标工具箱 ID。

use_rule
string

使用规则。

object (GlobalParameter)

全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。

object

Responses

Request samples

Content type
application/json
{
  • "operator_id": "string",
  • "box_id": "string",
  • "use_rule": "string",
  • "global_parameters": {
    },
  • "extend_info": {
    }
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "tool_id": "string"
}

一份 OpenAPI 文档批量建算子与工具

「能力包」注册:给一份 OpenAPI 3.0 文档,一次性把里面每个操作注册成算子, 再转换成工具放进工具箱,两者血缘打通。省掉逐个注册再逐个转换。

box_idbox_name 二选一:给 box_id 就往已有箱子里加, 给 box_name 就新建一个箱子。

部分失败是常态:接口返回 200,failure_countfailures 说明哪些 操作没建成。links 给出算子与工具的对应关系。

Authorizations:
OAuth2AppKey
header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Request Body schema: application/json
required
box_id
string

已有工具箱 ID。box_name 二选一。

box_name
string

新建工具箱的名称。box_id 二选一。

box_desc
string

工具箱描述。

box_svc_url
required
string

工具箱服务地址。必填。

box_category
string
Default: "other_category"
use_rule
string

生成的工具的使用规则。

data
required
string

OpenAPI 3.0 文档原文。必填。

description
string

生成的算子的描述。

direct_publish
boolean

注册后直接发布算子。

object

算子信息,结构见 operator.yamlOperatorInfo

object

算子执行控制,结构见 operator.yaml

object

Responses

Request samples

Content type
application/json
{
  • "box_id": "string",
  • "box_name": "string",
  • "box_desc": "string",
  • "box_svc_url": "string",
  • "box_category": "other_category",
  • "use_rule": "string",
  • "data": "string",
  • "description": "string",
  • "direct_publish": true,
  • "operator_info": { },
  • "operator_execute_control": { },
  • "extend_info": { }
}

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "tool_ids": [
    ],
  • "operator_ids": [
    ],
  • "links": [
    ],
  • "failure_count": 0,
  • "failures": [
    ]
}

工具箱市场列表

已发布工具箱的列表。过滤条件比工作区列表少了 statusmetadata_type

Authorizations:
OAuth2AppKey
query Parameters
page
integer >= 1
Default: 1

页码,从 1 开始。

page_size
integer [ 1 .. 100 ]
Default: 10

每页数量,1–100。

sort_by
string
Default: "update_time"
Enum: "create_time" "update_time" "name"

排序字段。

sort_order
string
Default: "desc"
Enum: "asc" "desc"

排序方向。

name
string

按名称过滤。

category
string

按分类过滤。

create_user
string

按创建人过滤。

release_user
string

按发布人过滤。

all
boolean

忽略分页返回全部。

header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "page": 0,
  • "page_size": 0,
  • "total_pages": 0,
  • "has_next": true,
  • "has_prev": true,
  • "data": [
    ]
}

市场工具搜索

跨工具箱按名称搜工具。

tool_name 是必填的——不传直接 400 (AgentOperatorIntegration.BadRequest.ValidationRequired)。这不是「列出 全部市场工具」的接口,是「按名字找工具」。

响应的数据字段是 data(与同模块 /tool-box/{box_id}/tools/listtools 不同)。

Authorizations:
OAuth2AppKey
query Parameters
tool_name
required
string

工具名称。必填,不传返回 400。

page
integer >= 1
Default: 1

页码,从 1 开始。

page_size
integer [ 1 .. 100 ]
Default: 10

每页数量,1–100。

sort_by
string
Default: "update_time"
Enum: "create_time" "update_time" "tool_name"

排序字段。

sort_order
string
Default: "desc"
Enum: "asc" "desc"

排序方向。

status
string (ToolStatus)
Enum: "enabled" "disabled"

按工具启停状态过滤。

all
boolean

忽略分页返回全部。

header Parameters
x-business-domain
required
string

业务域 ID。工具箱按业务域隔离,缺失返回 400。

Responses

Response samples

Content type
application/json
{
  • "total": 0,
  • "page": 0,
  • "page_size": 0,
  • "total_pages": 0,
  • "has_next": true,
  • "has_prev": true,
  • "data": [
    ]
}

工具箱市场详情

市场视角的工具箱详情,结构与 GET /tool-box/{box_id} 一致。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string

工具箱 ID。

Responses

Response samples

Content type
application/json
{
  • "box_id": "string",
  • "box_name": "string",
  • "box_desc": "string",
  • "box_svc_url": "string",
  • "business_domain_id": "string",
  • "metadata_type": "openapi",
  • "status": "unpublish",
  • "category_type": "string",
  • "category_name": "string",
  • "is_internal": true,
  • "source": "string",
  • "tools": [
    ],
  • "create_user": "string",
  • "create_time": 0,
  • "update_user": "string",
  • "update_time": 0,
  • "release_user": "string",
  • "release_time": 0
}

批量取已发布工具箱的指定字段

与 MCP 的 /mcp/market/batch/{mcp_ids}/{fields} 同一套路子:两个参数都走 路径、都是逗号分隔。注意这里的路径段名叫 box_id,但接受的是 ID 列表(服务端字段就叫 BoxIDs)。

响应是按 fields 投影后的对象数组,未选中的字段不出现。

Authorizations:
OAuth2AppKey
path Parameters
box_id
required
string
Example: 3f2a1c58-7b4e-4d19-9a06-2e5c8d71bf43,ccf29df2-f43d-414a-b644-db7c186cda77

工具箱 ID 列表,逗号分隔。参数名是单数,实际收列表。

fields
required
string
Example: box_id,box_name,status

要取的字段名,逗号分隔。

Responses

Response samples

Content type
application/json
[
  • {
    }
]