Custom tools let an assistant or agent reach outside the platform — calling your own API, posting to a webhook, or sending a notification — on top of the built-in tools (knowledge search, memory, and so on) that are always available.
{paramName}-style placeholders, which get filled in from the model's own arguments (whatever matches the tool's input schema); anything the model passes that isn't used as a path parameter is added as query parameters (for GET/DELETE) or merged into the JSON body (for POST/PUT/PATCH).HTTP and webhook tools (and Notify, for Slack, Discord and Telegram) can use a connection (see BYOK) for authentication, so the request carries a real auth header without the model ever seeing the secret.
Tools can also come from a remote MCP server, which publishes a set of tools for you to connect. For reusable written instructions rather than actions, see Skills.
Every custom tool has an input schema — a description of what arguments the model may pass when it calls the tool. This is what actually shows up as the tool's "parameters" to the model; it's independent from the tool's request configuration (its URL, method, etc.), and for HTTP tools specifically, it's also what supplies the values for any path parameters and query/body fields.
Any custom tool can require approval: instead of running immediately, the model's call pauses until a human approves or denies it. HTTP and webhook tools default to not requiring approval; notify defaults to requiring it, since sending a message to a person is a real, hard-to-undo side effect. You can change either default per tool.