Replace activation
Switches tools on and off for the caller's org and project, and answers with the resulting activated set.
PUT /v1/tool/activation
| Address | https://api.hanzo.ai/v1/tool/activation |
| Method | PUT |
| Operation | put_tool_activation |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Switches tools on and off for the caller's org and project, and answers with the resulting activated set. It is the ONE write path that turns skills, plugins and connectors into callable tools — an unactivated tool is listed by discovery but refused 403 at dispatch. Activate is applied before Deactivate, so a name in both lists ends up off. More than 256 toggles in one request is refused 413.
Request
2 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
activate | body | string[] | — | Activate switches these tool names on for the caller's org and project. |
deactivate | body | string[] | — | Deactivate switches these tool names off. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | tool.activationSet | ok |
default | problem-details | refused |
200 body — 1 field.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
enabled | body | string[] | — | Enabled is every tool name activated for the caller's org and project. |
Failure carries the platform error shape — see Errors.
Examples
hanzo tool activation replaceimport { Configuration, ToolApi } from 'hanzoai';
const api = new ToolApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.putToolActivation({ activate: ["<activate>"], deactivate: ["<deactivate>"] });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import ToolApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = ToolApi(client).put_tool_activation(activate=["<activate>"], deactivate=["<deactivate>"])cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.ToolAPI.PutToolActivation(context.Background()).Execute()
if err != nil {
return err
}use hanzo_client::apis::{configuration::Configuration, tool_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = tool_api::put_tool_activation(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.ToolApi;
ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));
var result = new ToolApi(client).putToolActivation();The method above is the one at the current release of the document. [email protected] (npm) was generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. SDKs →
curl -X PUT https://api.hanzo.ai/v1/tool/activation \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"activate": [
"<activate>"
],
"deactivate": [
"<deactivate>"
]
}'MCP reaches tool through the tools tool, which names its 19 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "list_mcp_servers"
}
}
}'How is this guide?