# Update a tool

`PUT /platform-config/tools/{tool_id}`

Change a custom tool's definition.

## Auth

Authentication required.

## Parameters

| Name | In | Required | Type | Description |
|---|---|---|---|---|
| tool_id | path | yes | string |  |

## Request body

Required: yes
Content-Type: application/json
Shape: UpdateToolRequest

| Name | Type | Required | Description |
|---|---|---|---|
| name | string | yes |  |
| description | string \| null | no | Default "". |
| tool_type | enum(http \| mcp \| function \| handoff \| client-relay) | yes |  |
| status | enum(active \| inactive) | yes |  |
| role | string \| null | no |  |
| parameters | ToolParametersSchema | no |  |
| parameters.type | string | no | Default "object". |
| parameters.properties | object | no |  |
| parameters.required | array<string> | no |  |
| execution | ToolExecution \| null | no |  |
| execution.method | enum(GET \| POST \| PUT \| PATCH \| DELETE) | yes, if execution is sent |  |
| execution.endpoint | string | yes, if execution is sent |  |
| execution.auth | ToolAuth \| null | no |  |
| execution.auth.type | enum(bearer \| jwt \| api_key) | no | Default "bearer". |
| execution.auth.source | string \| null | no |  |
| execution.auth.header_name | string \| null | no |  |
| execution.auth.scheme | string \| null | no |  |
| execution.auth.api_key | string \| null (write-only) | no |  |
| execution.param_map | object | no |  |
| execution.headers | object | no |  |
| execution.timeout | integer | no | Default 30. |

## Responses

| Status | Description | Content-Type | Shape |
|---|---|---|---|
| 200 | Successful Response | application/json | unknown |
| 422 | Validation Error | application/json | HTTPValidationError |

## Machine-readable

This page is also available as Markdown at `/docs/put-platform-config-tools-tool_id.md` (the ".md" suffix convention). The full curated API contract is at `/api/openapi.json`, and a machine-readable index of every page is at `/llms.txt`.
