# MCP (workflow node)

Call a Model Context Protocol tool as a deterministic workflow step — no LLM in the loop.

## Overview

The standalone MCP node calls a specific tool on an MCP server with mapped arguments and writes the result into `last_output`. It uses the same connector catalog as the in-agent MCP tool (Notion, Slack, GitHub, Linear, Drive, custom servers via OAuth or bearer token), but operates as a regular workflow step instead of being exposed to an agent.

Use it when you want predictable, repeatable integration calls:

- Insert a Notion row whenever a webhook fires.
- Post a Slack message at the end of a pipeline.
- Open a GitHub issue from an alert.

Argument resolution happens via LLM extraction at run time, so the **Tool name** and **arguments** are derived from the workflow context. Pin a specific `toolName` (e.g. `notion-create-pages`) to skip the discovery prompt and go straight to extraction.

## Configuration

| Field | Description |
| --- | --- |
| Connector | Pick from the catalog (Notion, Slack, GitHub, Linear, Drive, etc.) or **Custom** for any MCP server URL. |
| `serverUrl` | The MCP endpoint (set automatically for catalog connectors). |
| `toolName` | Tool to invoke. `auto` lets an LLM pick from the discovered list; a name like `notion-create-pages` pins it. |
| `authMode` | `oauth`, `token`, `custom_headers`, or `none`. OAuth runs the consent popup once, token mode stores an encrypted bearer, custom headers let you pass arbitrary auth schemes. |
| `apiKey` / `customHeaders` | Credentials, encrypted at rest. |

After saving, the node lists every tool the server exposes so you can lock in the exact one. The node panel also surfaces the connection state (`Connected`, `Reconnect required`, etc.).

Output context keys:

| Key | Value |
| --- | --- |
| `last_output` | Text content of the MCP tool result. |
| `mcp_transport` | Which transport was used (`streamable_http`, `sse`). |

## Example

Create a Notion page from an inbound form submission:

```
Webhook (form submission)
  → MCP (connector: Notion, toolName: notion-create-pages)
  → Respond webhook (200, {"created": true})
```

Post a Slack notification at the end of a pipeline:

```
Agent (build summary) → MCP (connector: Slack, toolName: chat.postMessage)
```

## Gotchas

- Argument extraction still uses an LLM to map the current context onto the tool's input schema — this saves wiring effort but adds one model call per execution. For pure speed, prefer **HTTP Request** against the underlying API.
- OAuth tokens expire. The node panel shows **Reconnect required** when that happens; click **Reconnect** to refresh.
- The Notion connector enforces real Notion user UUIDs in `filters.created_by_user_ids` — placeholders like `"me"` are rejected by the server.
- Setting `toolName: auto` always costs an extra LLM call to discover and pick. Pin the tool name once you know it.
- The node only writes the text portion of the MCP result. For structured fields, parse `last_output` in a downstream **Transform** or branch on it with **If/else**.

---

*Source: https://agentbuilder.systalink.sn/docs/node-mcp — human documentation.*
*Other language: [/docs-md/fr/node-mcp.md](/docs-md/fr/node-mcp.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
