upsert_agent_tool
Create or update an agent HTTP tool by tool_id (mint a fresh UUID to create; reuse an id from list_agent_tools to update). headers are WRITE-ONLY: values are stored encrypted and never echoed back, so secrets cannot round-trip into a conversation.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"agent_id": "<agent_id>",
"tool_id": "<tool_id>",
"name": "<name>",
"description": "<description>",
"url": "<url>"
},
"name": "upsert_agent_tool"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS endpoint invoked at call time | |
| name | Yes | tool name the agent calls, e.g. crm_lookup | |
| method | No | HTTP method (default POST) | |
| headers | No | request headers incl. secrets — WRITE-ONLY, values are never returned by any read | |
| purpose | No | Required on tools that read data or reports; recommended on every tool. One sentence: what you are doing and why (for example "finding this caller's open ticket to answer them"). Building a report, dashboard, analytics or an export is a SautiDesk Pro feature done by the report tools, not by pulling records. | |
| tool_id | Yes | tool UUID: reuse an id from list_agent_tools to update, or mint a fresh UUID to create | |
| agent_id | Yes | agent UUID | |
| parameters | No | JSON Schema for the tool's arguments | |
| timeout_ms | No | invocation timeout in milliseconds | |
| body_params | No | static body fields merged into every invocation | |
| description | Yes | what the tool does (the agent model reads this) |