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

Addresshttps://api.hanzo.ai/v1/tool/activation
MethodPUT
Operationput_tool_activation
AuthAuthorization: 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.

Switching a skill (skill_<name>) or a tool of an MCP server the org registered (<server>_<tool>) changes what every agent run in the org carries, so it takes an admin of the org or a SuperAdmin: a member naming one is refused 403 and nothing in the request is switched. Every change is on the org's audit trail before it is made, and one the trail cannot record is refused 503.

Request

2 fields, body application/json (required).

FieldInTypeRequiredDescription
activatebodystring[]—Activate switches these tool names on for the caller's org and project.
deactivatebodystring[]—Deactivate switches these tool names off.

Response

StatusBodyMeaning
200tool.activationSetok
defaultproblem-detailsrefused

200 body — 1 field.

FieldInTypeAlwaysDescription
enabledbodystring[]—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 replace
import { 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();
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 tool tool, which names its 17 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_tools"
         }
       }
     }'

Tool API · All Hanzo APIs · Interactive reference

Was this page useful?