> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tedro.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Tool Nodes

> Connect external services and APIs to your Tedro workflows.

# Tool Nodes

Tool nodes let your workflow interact with external systems. Call HTTP APIs, connect to MCP servers, and integrate with third-party services directly from your workflow.

<Note>
  **Security**: Tool credentials are encrypted at rest and are never exposed in API responses. Credentials are sent once during creation and cannot be retrieved afterward.
</Note>

***

## tool.http\_request

**Call an external HTTP endpoint.**

The HTTP Request node makes outbound API calls to external services. Use it to integrate with your CRM, ticketing system, payment provider, or any REST API.

### Configuration

| Option         | Type   | Required | Description                                                                |
| -------------- | ------ | -------- | -------------------------------------------------------------------------- |
| `method`       | string | Yes      | HTTP method: `GET`, `POST`, `PUT`, `DELETE`                                |
| `url`          | string | Yes      | The endpoint URL. Supports context variable substitution                   |
| `headers`      | object | No       | Request headers as key-value pairs (e.g., `Authorization`, `Content-Type`) |
| `body`         | string | No       | Request body template (for POST/PUT). Supports context variables           |
| `timeout`      | number | No       | Request timeout in milliseconds (default: 10000)                           |
| `credentialId` | string | No       | Reference to a stored credential for authentication                        |

### URL and Body Variables

Use context variables in URLs and request bodies:

```
# URL with variable
https://api.example.com/orders/{{conversation.fields.order_id}}

# JSON body with variables
{
  "customer_phone": "{{contact.phone}}",
  "customer_name": "{{contact.name}}",
  "inquiry_type": "{{router.category}}"
}
```

### Security Protections

The HTTP Request node includes built-in security measures:

* **SSRF protection**: Private IP addresses and internal network ranges are blocked
* **URL allowlists**: Admins can configure which domains are permitted
* **Encrypted credentials**: API keys and tokens are stored encrypted, never logged or exposed
* **Request logging**: All outbound requests are logged in run steps (with sensitive headers redacted)

### Outputs

| Output             | Type          | Description                            |
| ------------------ | ------------- | -------------------------------------- |
| `response.status`  | number        | HTTP status code (200, 404, 500, etc.) |
| `response.body`    | object/string | The parsed response body               |
| `response.headers` | object        | Response headers                       |

### Connections

* **Inputs**: Single input handle from the previous node
* **Outputs**: Single output handle passing the response to the next node

### Example Use Case

After a customer asks about their order status, use an HTTP Request node to call your e-commerce API: `GET https://api.myshop.com/orders/{{conversation.fields.order_id}}/status`. Pass the response to an AI Respond node that can formulate a natural language update for the customer.

***

## tool.mcp\_call

**Call a tool on an MCP (Model Context Protocol) server.**

The MCP Call node connects to MCP-compatible servers, enabling advanced integrations with services that implement the Model Context Protocol. MCP provides a standardized way for AI applications to interact with external tools and data sources.

### Configuration

| Option         | Type   | Required | Description                                                             |
| -------------- | ------ | -------- | ----------------------------------------------------------------------- |
| `serverUrl`    | string | Yes      | The MCP server URL                                                      |
| `toolName`     | string | Yes      | The name of the tool to invoke on the MCP server                        |
| `parameters`   | object | No       | Tool-specific parameters as key-value pairs. Supports context variables |
| `credentialId` | string | No       | Reference to a stored credential for MCP server authentication          |

### Outputs

| Output    | Type    | Description                                          |
| --------- | ------- | ---------------------------------------------------- |
| `result`  | object  | The tool execution result returned by the MCP server |
| `isError` | boolean | Whether the tool execution resulted in an error      |

### Connections

* **Inputs**: Single input handle from the previous node
* **Outputs**: Single output handle passing the MCP tool result to the next node

### Example Use Case

Connect to an MCP server that provides database query tools. Call a `search_knowledge_base` tool with the customer's question as input, then pass the results to an AI Respond node to generate an answer grounded in your proprietary data.

<Note>
  MCP is an advanced integration pattern. Most workflows will use `tool.http_request` for standard API integrations. Use `tool.mcp_call` when integrating with services that specifically implement the Model Context Protocol.
</Note>

## Managing Tool Credentials

Tool credentials are managed in **Settings > Tools** within your workspace:

1. **Create a tool definition** with the endpoint URL and method
2. **Add credentials** (API key, bearer token, or custom headers) -- these are encrypted immediately
3. **Test the connection** using the built-in test button
4. **Reference the tool** in your workflow nodes by selecting it from the tool picker in the inspector panel

Credentials are:

* **Encrypted at rest**
* Sent once during creation, **never returned** in API responses
* Scoped to your workspace (tenant isolation enforced)
* Visible only to **Admin** role users
