Skip to main content
Available Execution Nodes:
  • Toolkit Node - Execute ELITEA toolkit functions with direct parameter mapping
  • MCP Node - Execute Model Context Protocol (MCP) server tools
  • Code Node - Execute custom Python code in a secure sandbox
  • Custom Node - Advanced manual JSON configuration for complex integrations

Toolkit Node

The Toolkit Node executes specific tools from ELITEA Toolkits with direct parameter mapping. It provides fast, deterministic execution without LLM overhead, making it ideal for scenarios where you know exactly which tool to call and how to configure its parameters. Toolkit Node Interface Purpose Use the Toolkit Node to:
  • Execute ELITEA toolkit functions directly without LLM decision-making
  • Call external APIs through toolkit integrations (Jira, GitHub, Slack, Confluence, etc.)
  • Perform deterministic actions where the tool and parameters are known upfront
  • Map pipeline state directly to tool parameters
  • Chain multiple toolkit calls in sequence with precise control
Toolkit Nodes can use ELITEA Toolkits only (not MCPs). For MCP servers, use the MCP Node.
Parameters Toolkit node YAML Configuration
The Input Mapping section dynamically displays only the parameters required by the selected tool. Each toolkit tool has different required and optional parameters. Select your tool first to see available mapping options.
Each Toolkit Node can select only one toolkit and one tool. For multiple tool executions, create separate Toolkit Nodes and chain them together.
Best Practices
  • Map Required Parameters Correctly - Ensure all required parameters have proper mappings
  • Use Appropriate Type for Each Parameter
    • Variable: When value comes from state
    • F-String: When you need dynamic interpolation
    • Fixed: For static, unchanging values
  • Handle Optional Parameters - Set optional parameters to null if not needed
  • Include Output Variables - Capture important results in output variables
  • Use Interrupts for Debugging - Enable interrupts when testing new integrations
  • Validate State Variables - Ensure input state variables exist before the Toolkit node executes
  • Use Structured Output - Enable structured output when you need to extract specific fields from tool results
  • Chain Toolkit Calls - Create workflows by sequencing Toolkit nodes

MCP Node

The MCP Node executes tools from Model Context Protocol (MCP) servers with direct parameter mapping. It connects to remote MCP servers via HTTP and provides access to their tools without LLM overhead. MCP Node Interface Purpose Use the MCP Node to:
  • Execute MCP server tools directly with explicit parameter configuration
  • Connect to remote MCP servers via HTTP/HTTPS
  • Access specialized MCP tools (Playwright, GitHub, Figma, etc.)
  • Map pipeline state directly to MCP tool parameters
  • Enable/disable specific tools from MCP servers
MCP Nodes can use Model Context Protocol servers only. For ELITEA Toolkits, use the Toolkit Node.
Parameters MCP node YAML Configuration
MCP servers must be properly configured and connected before using the MCP Node. Ensure the MCP server is running and accessible via HTTP/HTTPS.
Each MCP Node can select only one MCP server and one tool. For multiple MCP tool executions, create separate MCP Nodes and chain them together.
Best Practices
  • Verify MCP Connection - Ensure the MCP server is connected and accessible before pipeline execution
  • Map Required Parameters Correctly - MCP tools have specific parameter requirements
  • Use Appropriate Type for Each Parameter
    • Variable: When value comes from state
    • F-String: When you need dynamic path/value interpolation
    • Fixed: For static configurations
  • Handle Errors - MCP server connection failures will stop pipeline execution
  • Use Structured Output - Enable when extracting specific data from MCP tool results
  • Test MCP Tools - Use the MCP test panel to verify tool functionality before using in pipelines
  • Monitor Timeouts - Configure appropriate timeout values for MCP server connections

Custom Node

The Custom Node enables advanced manual JSON configuration for complex integrations. It provides full control via JSON-based configuration, allowing users to configure any available toolkit (Agents, Pipelines, Toolkits, MCPs) with custom parameters. MCP Node Interface Purpose Use the Custom Node for:
  • Advanced manual configurations not available through standard node UI
  • Complex toolkit integrations requiring custom JSON parameters
  • Experimental features or beta toolkit capabilities
  • Full parameter control for power users
  • Custom agent/pipeline/toolkit configurations with specific requirements
Custom Node requires deep knowledge of toolkit JSON schemas and configuration parameters. Use standard nodes (Toolkit, MCP, LLM, Agent) unless you have specific advanced requirements.
Parameters Configuration is done entirely through JSON in the Custom Node editor. Refer to individual toolkit documentation for required JSON structure and parameters. Example YAML Configuration

Code Node

The Code Node enables secure execution of custom Python code within a sandboxed environment using Pyodide (Python compiled to WebAssembly). It provides full Python capabilities for data processing, calculations, and custom logic without accessing the host system. Code Node Interface Purpose Use the Code Node to:
  • Execute custom Python logic for data transformation and processing
  • Perform calculations that don’t require external tool integrations
  • Process pipeline state with full programming control
  • Implement business rules and conditional logic in Python
  • Transform data formats between pipeline nodes
  • Call external APIs directly from Python (with network access enabled)
  • Install Python packages dynamically using micropip
Parameters Code Node Interface

Debug Mode

Use Code Node debug mode when you need to inspect the exact Python source that ELITEA sent to the sandbox.
When debug: true is enabled on a Code Node, ELITEA saves a timestamped standalone Python snapshot to the code-debug artifact bucket before execution. The saved file includes the generated client preamble, the injected state payload, and your code wrapped so it can be run locally in standard Python.
How it works
  • Add debug: true to the Code Node definition
  • Run the pipeline normally
  • Open the code-debug artifact bucket and download the generated .py file
  • Replace the auth token placeholder if your code uses elitea_client
  • Run the file locally to reproduce the exact execution context Debug Mode Example
Debug mode example
When this node runs, ELITEA creates a file such as process_data__20260702_153045.py in the code-debug artifact bucket.
When debug: true, the saved artifact contains these parts in order:
  • A simplified SandboxClient implementation so the file can run outside the ELITEA SDK
  • An elitea_client = SandboxClient(...) initialization block with an auth token placeholder
  • The generated state preamble that restores elitea_state, alita_state, and alita_client
  • Your Code Node logic wrapped in an async runner so top-level await also works in standard CPython
Debug artifact creation is best-effort only. If upload to the code-debug bucket fails, pipeline execution continues and the failure is logged as a warning.

YAML Configuration Examples

Without Output Variables (or includes messages):Results are added to messages array:
With Specific Output Variables:Results populate the specified variables:
With Structured Output:Return dictionary to update multiple variables:
State Access:Access pipeline state via alita_state dictionary using alita_state.get('variable_name', default_value).Alita Client:When available, alita_client is automatically injected into the Code Node sandbox environment. It provides access to:Artifact Operations:
  • alita_client.artifact(bucket_name) - Access artifact operations for a specific bucket
    • .create(artifact_name, artifact_data, bucket_name=None) - Create/upload artifact
    • .get(artifact_name, bucket_name=None) - Download/read artifact content
    • .delete(artifact_name, bucket_name=None) - Delete artifact
    • .list(bucket_name=None, return_as_string=True) - List all artifacts in bucket
    • .append(artifact_name, additional_data, bucket_name=None) - Append data to existing artifact
    • .overwrite(artifact_name, new_data, bucket_name=None) - Replace artifact content
    • .get_content_bytes(artifact_name, bucket_name=None) - Get artifact as raw bytes
Bucket Operations:
  • alita_client.bucket_exists(bucket_name) - Check if bucket exists
  • alita_client.create_bucket(bucket_name, expiration_measure='months', expiration_value=1) - Create new bucket
  • alita_client.list_artifacts(bucket_name) - List artifacts in bucket (direct method)
  • alita_client.create_artifact(bucket_name, artifact_name, artifact_data) - Create artifact (direct method)
  • alita_client.download_artifact(bucket_name, artifact_name) - Download artifact (direct method)
  • alita_client.delete_artifact(bucket_name, artifact_name) - Delete artifact (direct method)
Application & Integration Operations:
  • alita_client.get_app_details(application_id) - Get application configuration
  • alita_client.get_list_of_apps() - List all available applications
  • alita_client.get_app_version_details(application_id, application_version_id) - Get specific app version
  • alita_client.get_integration_details(integration_id, format_for_model=False) - Get integration configuration
  • alita_client.unsecret(secret_name) - Retrieve secret value
  • alita_client.fetch_available_configurations() - List available configurations
  • alita_client.all_models_and_integrations() - List AI models and integrations
MCP Tool Operations:
  • alita_client.get_mcp_toolkits() - List available MCP toolkits
  • alita_client.mcp_tool_call(params) - Call MCP tool with parameters
Image Generation:
  • alita_client.generate_image(prompt, n=1, size='auto', quality='auto', response_format='b64_json', style=None) - Generate images using AI models
User Operations:
  • alita_client.get_user_data() - Get current user information
Example Usage:
When structured_output: true, the Code Node expects a dictionary return where keys correspond to state variable names:State Before Execution:
Code Returns:
Output Configuration:
State After Execution:
Important Rules:
  • Only variables listed in output will be updated
  • Variables not defined in pipeline state will be ignored
  • If output is omitted or includes messages, results append to messages
  • Non-messages output variables are overridden with results or error messages
  • Sandbox: Pyodide (Python compiled to WebAssembly) provides secure isolation
  • Standard Library: Full Python standard library available
  • Package Installation: Use import micropip; await micropip.install('package-name') for additional packages
  • Network Access: Enabled by default for external API calls (use httpx instead of requests)
  • Performance: Stateless execution by default for optimal performance; local caching reduces initialization time
  • Limitations: File system access not supported; use httpx.AsyncClient for HTTP calls instead of requests
Integration with Pipeline Flow Code Nodes seamlessly integrate into pipeline workflows through transitions:
Sequential Execution Benefits:
  • Data Transformation: Clean and format data between nodes
  • Validation: Verify data meets requirements before proceeding
  • Enrichment: Add computed fields or external data
  • Conditional Routing: Calculate which path to take next
  • State Management: Transform state structure for downstream nodes

Best Practices
  • Return Structured Data: When using structured_output: true, always return dictionaries with keys matching output variables
  • Handle Errors Gracefully: Include try-except blocks to catch and return errors as part of the structured output
  • Validate Input Data: Check state variables exist and have expected types before processing using alita_state.get('var', default)
  • Use Descriptive Output Variables: Name output variables clearly (e.g., total_revenue, average_score instead of result1, result2)
  • Keep Code Focused: Each Code Node should have one clear purpose - avoid combining multiple unrelated operations
  • Document Complex Logic: Use Python comments to explain business rules, calculations, and non-obvious operations
  • Test with Interrupts: Enable interrupts during development to review code execution results and debug issues
  • Optimize Performance: Avoid heavy computations in frequently called nodes; use efficient data structures
  • Use Async for HTTP: Use httpx.AsyncClient for HTTP requests (Pyodide compatible) instead of requests
  • Install Packages Carefully: Package installation adds latency; install only necessary packages
  • Handle JSON Serialization: Ensure returned objects are JSON-serializable (native Python types, lists, dicts)
  • Access Alita Client: Use alita_client when available for artifact operations and API interactions
  • Enable Debug Selectively: Turn on debug: true only for nodes you are actively investigating to avoid creating unnecessary debug artifacts
  • Use Debug Artifacts for Reproduction: Download the saved .py file from code-debug when sandbox behavior differs from expectations or when you need to inspect the injected state

Troubleshooting

Common Issues and Solutions
Cause: The Deno JavaScript runtime is missingSolution: Install Deno and ensure it’s in your system PATH
Cause: Code returns non-JSON-serializable objects (classes, functions, etc.)Solution: Return only JSON-serializable types (str, int, float, bool, list, dict, None)
Cause: Required package not available in Pyodide environmentSolution: Install package using micropip (note: not all packages are compatible)
Limitations: Some packages with C extensions may not work in Pyodide
Cause: Variables not listed in output or structured_output is falseSolution:
  1. Ensure structured_output: true
  2. List all target variables in output
  3. Return dictionary with matching keys
Cause: Debug artifact capture is best-effort. The node saves the file only when debug: true is set and the runtime has access to the artifact client. Upload failures do not stop pipeline execution.Solution:
  1. Confirm the node definition includes debug: true
  2. Check the code-debug artifact bucket for a file named <node_id>__<YYYYMMDD_HHMMSS>.py
  3. Review runtime logs for warnings related to debug artifact upload or client preamble generation
  4. Re-run the pipeline after verifying artifact storage is available
Cause: The saved file contains an auth token placeholder and may rely on packages that are not installed in your local Python environment.Solution:
  1. Replace <YOUR_AUTH_TOKEN> in the generated SandboxClient(...) block with a valid token if the code uses elitea_client
  2. Install required local dependencies such as requests and chardet
  3. If your code uses top-level await, run the saved file directly as generated; the wrapper added by ELITEA already makes it executable in standard Python
Cause: Using requests library (not Pyodide compatible) or network disabledSolution: Use httpx.AsyncClient for HTTP calls

Execution Nodes Comparison

When to Use Each Node

Choose Toolkit Node when you:
  • Need to call ELITEA toolkit functions (Jira, GitHub, Slack, Confluence, etc.)
  • Know exactly which toolkit and tool to use
  • Have straightforward parameter mapping
  • Need fast, deterministic execution
  • Want explicit control over toolkit execution
Example: Create a Jira ticket with known project, summary, and description.
Choose MCP Node when you:
  • Need to execute MCP server tools
  • Have a configured MCP server connection
  • Know exactly which MCP tool to call
  • Have explicit parameter requirements
  • Need direct MCP integration
Example: Read a file from a filesystem MCP server with a known path.
Choose Code Node when you:
  • Need custom Python logic
  • Require data transformation or processing
  • Implement business rules and calculations
  • Call external APIs directly
  • Have logic too complex for standard nodes
Example: Calculate tiered discounts based on customer segment, order value, and first-order status.
Choose Custom Node when you:
  • Have advanced configuration requirements not supported by standard nodes
  • Need full JSON control over toolkit configuration
  • Work with experimental or beta toolkit features
  • Require complex parameter structures
  • Are a power user with specific custom needs
Example: Configure an advanced toolkit with custom JSON parameters not exposed in standard UI.

Deprecated Execution Nodes

The following execution nodes are deprecated and will be removed in a future release. Please migrate to the recommended alternatives:
The Function node is deprecated and will be removed in an upcoming release.Migration: Use the Toolkit node for ELITEA toolkits or the MCP node for Model Context Protocol servers.Key Differences:
  • Function Node β†’ Toolkit Node: Direct replacement for ELITEA toolkit calls
  • Function Node β†’ MCP Node: Direct replacement for MCP server tool calls
Migration Steps:
  1. Identify whether your Function node uses an ELITEA Toolkit or MCP server
  2. Replace with Toolkit Node (for toolkits) or MCP Node (for MCPs)
  3. Copy Input Mapping configuration to new node
  4. Update YAML type field from function to toolkit or mcp
  5. Test pipeline execution
Migration Guide: Function Node Migration
The Tool node is deprecated and will be removed in an upcoming release.Migration: Use the Toolkit node for direct toolkit execution without LLM preprocessing.Key Differences:
  • Tool Node uses LLM to select tools and generate parameters from natural language tasks
  • Toolkit Node executes tools directly with explicit parameter mapping (faster, more reliable)
Migration Steps:
  1. Replace Tool Node with Toolkit Node
  2. Convert natural language task to explicit Input Mapping
  3. Manually map task parameters to tool parameters
  4. Update YAML type field from tool to toolkit
  5. Remove task field, keep input_mapping
  6. Test pipeline execution
Migration Guide: Tool Node Migration