MCP
Connects to an arbitrary Model Context Protocol (MCP) server — stdio subprocess or HTTP+SSE — and dynamically exposes whatever tools that server provides to the agent. Hundreds of community MCP servers exist for databases, APIs, filesystems, browsers, and more.
Add to an agent node's tools array with _node_type: "tool-mcp". See Connector Reference — How connectors are used.
Authentication
| Field | Required | Description |
|---|---|---|
transport | No | Transport to use: stdio (default) or http (also accepts sse). |
command | Yes (stdio) | Full command to start the MCP server subprocess, e.g. npx @modelcontextprotocol/server-postgres. |
env | No (stdio) | Comma-separated KEY=VALUE pairs to add to the subprocess environment. |
url | Yes (http) | URL of the HTTP/SSE MCP server. |
bearer_token | No (http) | Optional token sent as Authorization: Bearer <token>. |
{
"name": "mcp",
"_node_type": "tool-mcp",
"transport": "stdio",
"command": "npx @modelcontextprotocol/server-postgres"
}
How tool discovery works
Unlike other connectors, MCP has no fixed tool list in the source — tools are discovered live from the target MCP server at agent setup time:
- Connect. For
transport: "stdio", OrcFlows startscommandas a subprocess (with any extraenvvars merged into its environment) and speaks JSON-RPC 2.0 over its stdin/stdout. Fortransport: "http"/"sse", it sends JSON-RPC 2.0 POST requests tourl, withAuthorization: Bearer <bearer_token>if set. - Initialize. Sends an
initializerequest (protocol version2024-11-05) followed by annotifications/initializednotification (stdio only). - List tools. Sends a
tools/listrequest. The server responds with an array of tool definitions, each with aname,description, and JSON SchemainputSchema. - Wrap and expose. Each discovered tool is wrapped as an Eino
BaseToolwhose name, description, and parameters (including which arerequired) come directly from the server'sinputSchema— JSON Schema typesinteger/number,boolean,array, andobjectmap to the corresponding agent parameter types, everything else maps tostring. - Invoke. When the agent calls a discovered tool, OrcFlows sends a
tools/callrequest withnameandarguments, and returns the concatenated text content of the response (or an"Error from MCP server: ..."message if the server reports an error).
If the server returns zero tools, or command/url is missing, the connector setup fails with an error.
Because the tool set comes entirely from the target server, the actions filter on the tools entry works the same way as for other connectors — it filters by whatever tool names the MCP server reports.
Example configurations
The file's doc comment lists these example MCP servers as command values for stdio transport:
| Command | Provides |
|---|---|
npx @modelcontextprotocol/server-postgres | PostgreSQL queries |
npx @modelcontextprotocol/server-filesystem | File read/write |
npx @modelcontextprotocol/server-github | GitHub API |
npx @modelcontextprotocol/server-slack | Slack API |
npx @modelcontextprotocol/server-brave-search | Brave web search |
npx @modelcontextprotocol/server-puppeteer | Browser automation |
npx mcp-server-sap | SAP HANA / OData |
npx @modelcontextprotocol/server-google-ads | Google Ads (community) |
stdio transport
{
"name": "postgres",
"_node_type": "tool-mcp",
"transport": "stdio",
"command": "npx @modelcontextprotocol/server-postgres",
"env": "DATABASE_URL={{ secret.DATABASE_URL }}"
}
HTTP/SSE transport
{
"name": "remote_mcp",
"_node_type": "tool-mcp",
"transport": "http",
"url": "https://mcp.example.com/v1",
"bearer_token": "{{ secret.MCP_BEARER_TOKEN }}"
}