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)。
建一个空工具箱。metadata_type 决定这个箱子装哪类工具,建成后不可更改
(编辑接口的 metadata_type 是可选的,传了才校验)。
openapi 类型的箱子必须给 box_svc_url——箱内工具的请求都发往这个地址。
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
| box_name | string 工具箱名称。 |
| box_desc | string 工具箱描述。 |
| box_svc_url | string 工具箱服务地址。** |
| box_category | string Default: "other_category" 分类。 |
| metadata_type required | string (MetadataType) Enum: "openapi" "function" 元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义
( |
| source | string Default: "custom" 来源。 |
| data | string OpenAPI 原文,建箱同时导入工具时用。 |
{- "box_name": "天气服务",
- "box_desc": "对接第三方天气 API",
- "box_category": "data_query",
- "metadata_type": "openapi"
}{- "box_id": "string"
}按业务域分页列出工具箱。metadata_type 过滤用于「函数工具工作台只列函数
工具箱」这类场景。
条目里的 tools 是工具名字符串数组,不是工具对象也不是 ID——要工具详情
得再调 GET /tool-box/{box_id}/tools/list。
| 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 忽略分页返回全部。 |
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
{- "total": 45,
- "page": 1,
- "page_size": 2,
- "total_pages": 23,
- "has_next": true,
- "has_prev": false,
- "data": [
- {
- "box_id": "3f2a1c58-7b4e-4d19-9a06-2e5c8d71bf43",
- "box_name": "订单查询工具集",
- "box_desc": "订单域的 OpenAPI 工具",
- "metadata_type": "openapi",
- "business_domain_id": "default",
- "status": "published",
- "category_type": "data_query",
- "category_name": "数据查询",
- "is_internal": false,
- "source": "custom",
- "tools": [
- "list_orders",
- "get_order"
], - "create_time": 1784431697368964900,
- "update_time": 1785399402189683700,
- "create_user": "Administrator"
}
]
}与 /operator/names、/skills/names 同契约:不存在的 ID 静默略过、不占位,
调用方自己比对哪些没回来。
| ids | Array of strings 待取名的工具箱 ID 列表。空列表返回空 |
{- "ids": [
- "string"
]
}{- "entries": [
- {
- "id": "string",
- "name": "string"
}
]
}取工具箱详情,含箱内工具的完整定义。
| box_id required | string 工具箱 ID。 |
{- "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": [
- {
- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}
], - "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0,
- "release_user": "string",
- "release_time": 0
}更新走 POST 不是 PUT。box_name / box_desc / box_category 都是必填
——这是整体覆盖,不是部分更新,不传就报必填错误。
metadata_type 反而是可选的:工具箱建成后类型不会变,带了才校验取值。
响应里的 edit_tools 列出因本次更新而受影响的工具及其新状态。
| box_id required | string 工具箱 ID。 |
| box_name required | string |
| box_desc required | string |
| box_svc_url | string
|
| box_category required | string |
| metadata_type | string (MetadataType) Enum: "openapi" "function" 元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义
( |
| data | string OpenAPI 原文。 |
{- "box_name": "string",
- "box_desc": "string",
- "box_svc_url": "string",
- "box_category": "string",
- "metadata_type": "openapi",
- "data": "string"
}{- "box_id": "string",
- "edit_tools": [
- {
- "tool_id": "string",
- "status": "enabled"
}
]
}删除工具箱及其下全部工具。已被 Agent 挂载的工具箱删除后调用方会拿到 404。
| box_id required | string 工具箱 ID。 |
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
{- "code": "Public.BadRequest",
- "description": "string",
- "solution": "string",
- "link": "string",
- "details": null
}发布 / 下架工具箱。工具箱只有三个状态(unpublish / published /
offline),没有算子那边的 editing。
| box_id required | string 工具箱 ID。 |
| status required | string (BizStatus) Enum: "unpublish" "published" "offline" 工具箱的生命周期状态。只有三个值,没有算子那边的 |
{- "status": "unpublish"
}{- "box_id": "string",
- "status": "unpublish"
}往箱子里加工具。metadata_type 决定必填字段:function 走
function_input(代码约定见 function.yaml,入口函数必须叫
handler),openapi 走 data(OpenAPI 原文)。
一次可以建出多个工具:一份 OpenAPI 文档里有几个操作就建几个工具,
所以响应是 success_count / failure_count 的批量结果,部分成功是常态
——failure_count 非 0 时接口仍返回 200,失败明细在 failures 里。
| box_id required | string 工具箱 ID。 |
| metadata_type required | string (MetadataType) Enum: "openapi" "function" 元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义
( |
| use_rule | string 使用规则。 |
object (GlobalParameter) 全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。 | |
object 函数定义。** | |
| data | string OpenAPI 原文。** |
object |
{- "metadata_type": "openapi",
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "function_input": { },
- "data": "string",
- "extend_info": { }
}{- "box_id": "string",
- "success_count": 0,
- "success_ids": [
- "string"
], - "failure_count": 0,
- "failures": [
- {
- "tool_name": "string",
- "error_msg": null
}
]
}取单个工具的完整定义,含元数据、全局参数与使用规则。
| box_id required | string 工具箱 ID。 |
| tool_id required | string 工具 ID。 |
{- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}更新走 POST 不是 PUT。 name、description、metadata_type 都是必填
——整体覆盖,不是部分更新。
| box_id required | string 工具箱 ID。 |
| tool_id required | string 工具 ID。 |
| name required | string |
| description required | string |
| metadata_type required | string (MetadataType) Enum: "openapi" "function" 元数据类型。工具箱建成后不可更改;决定箱内工具怎么定义
( |
| use_rule | string |
object (GlobalParameter) 全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。 | |
object 函数定义(编辑形态,无 name / description)。 | |
| data | string OpenAPI 原文。 |
object |
{- "name": "string",
- "description": "string",
- "metadata_type": "openapi",
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "function_input": { },
- "data": "string",
- "extend_info": { }
}{- "box_id": "string",
- "tool_id": "string"
}列出工具箱里的工具。
**响应的数据字段叫 tools 不是 data**,还多一个 box_id——与本服务其他
分页接口(含同模块的 /tool-box/market/tools)不一致,解析时注意。
排序字段这里可选 create_time / update_time / tool_name,默认
create_time(工具箱列表默认的是 update_time)。
| box_id required | string 工具箱 ID。 |
| 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 忽略分页返回全部。 |
{- "total": 0,
- "page": 0,
- "page_size": 0,
- "total_pages": 0,
- "has_next": true,
- "has_prev": true,
- "box_id": "string",
- "tools": [
- {
- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}
]
}按 ID 批量删除工具箱里的工具。
| box_id required | string 工具箱 ID。 |
| tool_ids required | Array of strings 要删除的工具 ID 列表。 |
{- "tool_ids": [
- "string"
]
}{- "box_id": "string",
- "tool_ids": [
- "string"
]
}请求体是数组,一次改多个工具的启停。工具的状态只有 enabled /
disabled 两个值——与工具箱的发布状态是两套,别混。
禁用的工具不会出现在 Agent 可用的工具列表里,但仍留在箱子中。
| box_id required | string 工具箱 ID。 |
| tool_id required | string |
| status required | string (ToolStatus) Enum: "enabled" "disabled" 单个工具的启停状态。与工具箱的 |
[- {
- "tool_id": "744e7b57-092e-4cd3-9dee-63c113307d9e",
- "status": "enabled"
}, - {
- "tool_id": "8a1c3f21-0b6e-4a55-9d33-2f0d1b7c4e88",
- "status": "disabled"
}
][- {
- "tool_id": "string",
- "status": "enabled"
}
]用给定参数真实调用一次工具。与 /proxy/{tool_id} 的差别只在语义与审计
——调试面向开发期,代理面向生产调用。请求与响应结构一致。
参数按 HTTP 的四个位置分开传:header / query / path / body。
| box_id required | string 工具箱 ID。 |
| tool_id required | string 工具 ID。 |
| timeout | integer 超时(秒)。 |
object 请求头参数。 | |
object 查询参数。 | |
object 路径参数。 | |
| body | any 请求体。函数类工具只用这个。 |
{- "timeout": 0,
- "header": { },
- "query": { },
- "path": {
- "property1": "string",
- "property2": "string"
}, - "body": null
}{- "status_code": 0,
- "headers": { },
- "body": null,
- "error": "string"
}生产调用入口:由平台代为执行工具并返回结果,调用方不必知道工具背后打的是 哪个地址。与调试接口的差别在于会走权限校验与审计日志。
返回的是被调服务的原始响应(status_code / headers / body),
不是平台自己的信封——上游返 500 时本接口仍是 200,status_code 里才是 500。
| box_id required | string 工具箱 ID。 |
| tool_id required | string 工具 ID。 |
| timeout | integer 超时(秒)。 |
object 请求头参数。 | |
object 查询参数。 | |
object 路径参数。 | |
| body | any 请求体。函数类工具只用这个。 |
{- "timeout": 0,
- "header": { },
- "query": { },
- "path": {
- "property1": "string",
- "property2": "string"
}, - "body": null
}{- "status_code": 0,
- "headers": { },
- "body": null,
- "error": "string"
}拿一个已注册的算子,在指定工具箱里生成对应的工具。算子与工具之间保留血缘, 算子更新后工具可随之更新。
路径挂在 /operator/ 下但归工具箱模块管——它产出的是工具。
| operator_id required | string 要转换的算子 ID。 |
| box_id required | string 目标工具箱 ID。 |
| use_rule | string 使用规则。 |
object (GlobalParameter) 全局参数:调用该工具时固定附加的一个参数(如统一的 API Key)。 是单个对象不是数组。 | |
object |
{- "operator_id": "string",
- "box_id": "string",
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "extend_info": {
- "property1": "string",
- "property2": "string"
}
}{- "box_id": "string",
- "tool_id": "string"
}「能力包」注册:给一份 OpenAPI 3.0 文档,一次性把里面每个操作注册成算子, 再转换成工具放进工具箱,两者血缘打通。省掉逐个注册再逐个转换。
box_id 与 box_name 二选一:给 box_id 就往已有箱子里加,
给 box_name 就新建一个箱子。
部分失败是常态:接口返回 200,failure_count 与 failures 说明哪些
操作没建成。links 给出算子与工具的对应关系。
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
| box_id | string 已有工具箱 ID。与 |
| box_name | string 新建工具箱的名称。与 |
| 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.yaml 的 | |
object 算子执行控制,结构见 operator.yaml。 | |
object |
{- "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": { }
}{- "box_id": "string",
- "tool_ids": [
- "string"
], - "operator_ids": [
- "string"
], - "links": [
- { }
], - "failure_count": 0,
- "failures": [
- "string"
]
}已发布工具箱的列表。过滤条件比工作区列表少了 status 与 metadata_type。
| 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 忽略分页返回全部。 |
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
{- "total": 0,
- "page": 0,
- "page_size": 0,
- "total_pages": 0,
- "has_next": true,
- "has_prev": true,
- "data": [
- {
- "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": "custom",
- "tools": [
- "string"
], - "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0,
- "release_user": "string",
- "release_time": 0
}
]
}跨工具箱按名称搜工具。
tool_name 是必填的——不传直接 400
(AgentOperatorIntegration.BadRequest.ValidationRequired)。这不是「列出
全部市场工具」的接口,是「按名字找工具」。
响应的数据字段是 data(与同模块 /tool-box/{box_id}/tools/list 的 tools
不同)。
| 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 忽略分页返回全部。 |
| x-business-domain required | string 业务域 ID。工具箱按业务域隔离,缺失返回 400。 |
{- "total": 0,
- "page": 0,
- "page_size": 0,
- "total_pages": 0,
- "has_next": true,
- "has_prev": true,
- "data": [
- {
- "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": [
- {
- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}
], - "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0,
- "release_user": "string",
- "release_time": 0
}
]
}市场视角的工具箱详情,结构与 GET /tool-box/{box_id} 一致。
| box_id required | string 工具箱 ID。 |
{- "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": [
- {
- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}
], - "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 投影后的对象数组,未选中的字段不出现。
| 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 要取的字段名,逗号分隔。 |
[- {
- "box_id": "string",
- "box_name": "string",
- "box_desc": "string",
- "box_svc_url": "string",
- "metadata_type": "openapi",
- "status": "string",
- "category_type": "string",
- "category_name": "string",
- "is_internal": true,
- "source": "string",
- "tools": [
- {
- "tool_id": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "metadata_type": "openapi",
- "metadata": { },
- "use_rule": "string",
- "global_parameters": {
- "name": "string",
- "description": "string",
- "required": true,
- "in": "query",
- "type": "string",
- "value": null
}, - "resource_object": "tool",
- "extend_info": { },
- "create_user": "string",
- "create_time": 0,
- "update_user": "string",
- "update_time": 0
}
], - "create_user": "string",
- "update_user": "string",
- "release_user": "string"
}
]