MCP Node
Call a tool on a connected MCP server and map the response back to records
Last updated 8 Oct 2026
The MCP node calls a single named tool on a connected MCP (Model Context Protocol) server — once per run or once per record — and merges the tool response back into the automation data.
When to Use
Use MCP when you want to call one specific tool from a connected server — for example, a custom data-enrichment tool, an internal service exposed over MCP, or a third-party integration. If you instead want the model to choose which tools to call, use the Agent node.
Configuration
| Field | Type | Description |
|---|---|---|
connectionId | string | ID of the connected MCP server (required) |
toolName | string | Name of the tool to call (required) |
argumentsMode | static | dynamic | Whether arguments are fixed or templated per record (default: static) |
arguments | object | Fixed tool arguments, used when argumentsMode is static |
argumentsTemplate | string | JSON template for the arguments, used when argumentsMode is dynamic. Supports {{variable}} syntax. Required in dynamic mode |
iterationMode | single | per_row | Call once for the whole batch, or once per record (default: single) |
responseMapping | object | { dataPath?, outputMode? } — where to read the response from and how to merge it |
continueOnError | boolean | In per_row mode, keep going when a row fails instead of failing the node (default: false) |
Arguments
In static mode the arguments object is sent as-is. In dynamic mode the argumentsTemplate string is interpolated against the record (the first row in single mode, each row in per_row mode) using {{field}} references — see Template Syntax.
Response Mapping
responseMapping.dataPath is a dot-notation path into the tool response (the part to keep). responseMapping.outputMode controls how the result is merged into the data:
replace(default) — the tool response replaces the input rowsmerge— the response fields are merged into the existing rowsappend— the response is appended as new rows after the input
responseMapping:
dataPath: intelligence.competitors
outputMode: merge
Example
Call a custom company-intelligence tool once per row:
connectionId: conn_acme_mcp
toolName: get_company_intelligence
argumentsMode: dynamic
argumentsTemplate: |
{ "domain": "{{domain}}", "depth": "standard" }
iterationMode: per_row
responseMapping:
dataPath: intelligence
outputMode: merge
Output
Each output row carries a _success boolean. In per_row mode with continueOnError enabled, failed rows are kept with _success: false and an _error message; the rest of the run continues. The tool's output columns are unknown until execution, so downstream join keys are detected at runtime.
Notes
- MCP connections are configured on the Integrations page — only tools from active, admitted connections can be called.
- MCP tool calls run on the governed external rail (
action:mcpscope, or the tool's resolved governance action type) and are evaluated by guardrails, pauses, and approval policies before execution. Read-only tools flow through unchanged; tools that are not affirmatively read-only are routed for approval (fail-closed). - Governed external writes cannot run on the MCP node. A tool annotated as a write (
cesteral.kind: "write") is blocked here because the MCP node does not run the write-preview admission pipeline — use the Agent node, which routes external writes through the admission funnel. - Calls are rate-limited per connection using the connection's configured requests-per-second and burst settings.
Related articles
Still stuck? Browse the FAQ or contact us.