update_custom_tool
Edit an existing custom tool: rename it, change its description, or replace its connector
definition. Use a bare name with a standalone personal credential, me/name for private content
in organization scope, or <team>/name for a bound team. A bare organization-scoped name denotes
the read-only organization catalogue.
Only the fields you provide change. As with create_custom_tool,
you never set a secret here — those are managed in the dashboard.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Caller-relative address: bare with a standalone personal credential, me/name in private organization space, or <team>/name for a bound team. |
new_name | string | No | Rename the tool to this bare name (no /). |
description | string | No | Replace the description. |
connector | object | No | Replace the connector definition (same shape as create_custom_tool). |
Response
| Field | Type | Description |
|---|---|---|
name | string | Canonical caller-relative address after the update. |
id | string | The tool's identifier. |
enabled | boolean | Whether the tool is active. |
Example
{
"name": "weather",
"new_name": "weather-v2",
"description": "Fetch weather, now with forecasts"
}
Result:
{
"name": "weather-v2",
"id": "018f...c2a1",
"enabled": true
}
Errors
Each failure carries a precise code in the response. A domain rejection — a not-found, a name clash, or a permission denial — is returned as a tool result with isError: true, so the agent can read the code and self-correct; malformed arguments and server faults are JSON-RPC protocol errors.
| Code | Cause | Delivered as |
|---|---|---|
custom_tool_not_found | No custom tool remains at the requested name in the target space, including if it was renamed while this call was pending. | tool error (isError) |
invalid_custom_tool_name | new_name is invalid. | tool error (isError) |
name_too_long | new_name exceeds its maximum length. | tool error (isError) |
description_too_long | The description exceeds its maximum length. | tool error (isError) |
invalid_connector | The replacement connector is invalid. | tool error (isError) |
team_not_found | No team with that name is bound to this credential. | tool error (isError) |
forbidden | The credential lacks update authority, uses me/ outside organization scope, or targets the read-only organization catalogue. | tool error (isError) |
empty_name | The name is empty after removing the team prefix. | tool error (isError) |
personal_cannot_address_team | You used a team/ prefix (or team field) with a personal credential. | tool error (isError) |
no_personal_space | A userless organization credential used me/name. | tool error (isError) |
invalid_arguments | The arguments are missing or don't match the input schema. | protocol error (invalid_params) |
internal_error | An unexpected error occurred. | protocol error (internal_error) |
Notes
- Changing the auth type to one that needs a secret, when none is stored, disables the tool. A person must add the new secret and enable the tool again in the dashboard.
- Updating a custom tool counts as one tool call against your plan's tool-invocation allowance.