Alteryx MCP

Alteryx MCP

Enables AI assistants to read, analyze, edit, and create Alteryx workflows, including summarizing workflows, finding tools, editing configurations, updating SQL, managing connections, and building new workflows programmatically.

Category
Visit Server

README

Alteryx MCP

An MCP server that exposes comprehensive Alteryx workflow manipulation tools over stdio, enabling AI assistants to:

  • Read & Analyze: Summarize workflows into Markdown (containers, connections, SQL, diagrams)
  • Find Tools: Search for tools by ID, type, or annotation patterns
  • Edit Configurations: Modify tool settings, field selections, annotations
  • Update SQL: Change database queries with OCI compliance (auto-removes -- comments)
  • Manage Connections: Update DCM connection identifiers
  • Create Workflows: Build new .yxmd files programmatically

It wraps alteryx_mcp/alteryx_mcp.py from this repository.

Demo

Watch the demo video

Features

1. Workflow Analysis

  • Parse and summarize entire workflows
  • Extract container hierarchies, tool types, database connections
  • Generate Mermaid diagrams for data flow visualization

2. Tool Discovery

  • Find tools by ToolID, plugin type (e.g., AlteryxSelect, DbFileInput)
  • NEW: find_tools_fast() - Optimized regex-based search (10-100x faster for specific ToolID lookups)
  • Search by annotation text patterns
  • Get complete tool configuration details

3. Direct Editing

  • Select Tools: Update field selections (selected: true/false) and rename fields
  • Annotations: Change tool annotations/labels
  • SQL Queries: Update DbFileInput queries with automatic comment removal for OCI
  • Connections: Swap DCM connection IDs across tools
  • NEW: Row Limits: Get, update, and batch-modify row limits for Sample/Filter tools
  • All edits support dry-run mode for safe previewing

4. Connection Management

  • Batch Update Connections: Update multiple tools with the same connection ID
  • Copy connection from reference tool or use provided connection ID
  • Update entire workflow at once

5. Row Limit Management (NEW)

  • Get Row Limits: Read current First N, Last N, Sample N settings
  • Update Single Tool: Change row limit for specific tool
  • Batch Update: Mass-modify row limits across entire workflow
  • Update by specific tool IDs or by plugin type (e.g., all Sample tools)

6. Workflow Creation

  • Build workflows from scratch with JSON configuration
  • Define tools, positions, connections programmatically
  • Specify custom metadata

Install (editable dev)

# From repo root
pip install -e .

Run (stdio)

alteryx-mcp

Tools Reference

Analysis Tools

summarize_workflow

summarize_workflow(
    workflow: str,           # Path to .yxmd file
    mapping: str | None      # Optional JSON mapping for connection aliases
) -> str                     # Returns Markdown summary

Example:

{
  "workflow": "c:/projects/VCI/VCIProjectionBaseLine.yxmd",
  "mapping": "c:/projects/connections.json"
}

Returns comprehensive Markdown with:

  • Metadata (WorkflowId, Description)
  • Container hierarchy
  • Top tool types
  • Database connections with queries
  • Output destinations
  • Mermaid flowcharts

find_tools

find_tools(
    workflow: str,                    # Path to .yxmd file
    tool_id: int | None = None,       # Find specific tool ID
    plugin_type: str | None = None,   # e.g., 'AlteryxSelect', 'DbFileInput'
    annotation_pattern: str | None = None  # Search in annotations
) -> str                              # Returns JSON with matching tools

Examples:

// Find all Select tools
{
  "workflow": "path/to/workflow.yxmd",
  "plugin_type": "AlteryxSelect"
}

// Find tools mentioning "v12Live" in annotations
{
  "workflow": "path/to/workflow.yxmd",
  "annotation_pattern": "v12Live"
}

// Find specific tool
{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 375
}

Supported plugin types:

  • AlteryxSelect, DbFileInput, DbFileOutput
  • Filter, Join, Sort, Formula
  • Browse, TextBox, ToolContainer
  • Union, Summarize, Sample, Unique
  • RecordID, MultiRowFormula, TextInput, DateTimeInput

Editing Tools

update_select_tool

update_select_tool(
    workflow: str,          # Path to .yxmd file
    tool_id: int,          # Tool ID of Select tool
    field_updates: str,    # JSON string with field updates
    dry_run: bool = False
) -> str                   # Status message

Example - Update field selections:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 375,
  "field_updates": "{\"SCM37_CTRA22_IBCONO\": {\"selected\": false}, \"SCM37_CTRA22_IBFACI\": {\"selected\": true, \"rename\": \"FACILITY_CODE\"}}",
  "dry_run": true
}

Field update options:

  • selected: true or false
  • rename: New field name

update_annotation

update_annotation(
    workflow: str,          # Path to .yxmd file
    tool_id: int,          # Tool ID to update
    new_annotation: str,   # New annotation text
    dry_run: bool = False
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 12,
  "new_annotation": "dcm:prod-oracle\nQuery=SELECT * FROM MPHEAD WHERE CONO=1",
  "dry_run": false
}

update_sql_query

update_sql_query(
    workflow: str,                  # Path to .yxmd file
    tool_id: int,                  # Tool ID of DbFileInput
    new_query: str,                # New SQL query
    remove_comments: bool = True,  # Strip -- comments for OCI
    dry_run: bool = False
) -> str

Example - Update query with OCI compliance:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 12,
  "new_query": "SELECT IACONO, IAPUNO, IACUCD -- Company info\nFROM MVXCDTA.MPHEAD\nWHERE IACONO = 1",
  "remove_comments": true,
  "dry_run": false
}

Result (after comment removal):

SELECT IACONO, IAPUNO, IACUCD
FROM MVXCDTA.MPHEAD
WHERE IACONO = 1

update_connection_id

update_connection_id(
    workflow: str,              # Path to .yxmd file
    tool_id: int,              # Tool ID to update
    new_connection_id: str,    # New DCM connection ID (UUID)
    dry_run: bool = False
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 12,
  "new_connection_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "dry_run": false
}

batch_update_connections

batch_update_connections(
    workflow: str,
    tool_ids: List[int],
    source_connection_id: str | None = None,
    source_tool_id: int | None = None,
    dry_run: bool = False
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_ids": [12, 14, 16],
  "source_tool_id": 13,
  "dry_run": true
}

rewrite_connections

rewrite_connections(
    workflow: str,     # Path to .yxmd file
    config: str,       # Path to JSON config
    dry_run: bool = False
) -> str

Config JSON format:

{
  "connections": {
    "old-uuid-1": {
      "new_id": "new-uuid-1",
      "old_label": "dev-db",
      "new_label": "prod-db"
    }
  }
}

Row Limit Tools

get_row_limit

get_row_limit(
    workflow: str,
    tool_id: int
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 10
}

update_row_limit

update_row_limit(
    workflow: str,
    tool_id: int,
    first_n: int | None = None,
    last_n: int | None = None,
    sample_n: int | None = None,
    dry_run: bool = False
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "tool_id": 10,
  "first_n": 500,
  "dry_run": false
}

batch_update_row_limits

batch_update_row_limits(
    workflow: str,
    tool_ids: List[int] | None = None,
    plugin_type: str | None = None,
    first_n: int | None = None,
    last_n: int | None = None,
    sample_n: int | None = None,
    dry_run: bool = False
) -> str

Example:

{
  "workflow": "path/to/workflow.yxmd",
  "plugin_type": "Sample",
  "first_n": 1000,
  "dry_run": false
}

Creation Tools

create_workflow

create_workflow(
    output_path: str,        # Where to save .yxmd
    tools_config: str,       # JSON array of tool configs
    connections: str | None, # Optional JSON array of connections
    metadata: str | None     # Optional JSON dict of metadata
) -> str

Example - Create simple workflow:

{
  "output_path": "c:/temp/new_workflow.yxmd",
  "tools_config": "[{\"tool_id\": 1, \"plugin\": \"TextInput\", \"position\": {\"x\": 100, \"y\": 100}, \"configuration\": {\"Text\": \"Hello World\"}, \"annotation\": \"Data source\"}, {\"tool_id\": 2, \"plugin\": \"Browse\", \"position\": {\"x\": 300, \"y\": 100}, \"annotation\": \"View output\"}]",
  "connections": "[{\"origin\": 1, \"destination\": 2}]",
  "metadata": "{\"Name\": \"My Workflow\", \"Description\": \"Auto-generated test workflow\"}"
}

Tool configuration structure:

{
  tool_id?: number,           // Optional, defaults to index
  plugin: string,             // Plugin type name
  position: {x: number, y: number},
  configuration: object,      // Tool-specific config
  annotation?: string         // Optional annotation
}

Connection structure:

{
  origin: number,                      // Source tool ID
  destination: number,                 // Target tool ID
  origin_connection?: string,          // Default: "Output"
  destination_connection?: string      // Default: "Input"
}

MCP Client Configuration

Point your MCP client (e.g., GitHub Copilot, Claude Desktop) to launch the script on stdio:

{
  "mcpServers": {
    "alteryx": {
      "command": "alteryx-mcp",
      "args": []
    }
  }
}

Or with full path:

{
  "mcpServers": {
    "alteryx": {
      "command": "python",
      "args": ["-m", "alteryx_mcp.server"]
    }
  }
}

Usage Patterns

Pattern 1: Find and Update Field Selections

1. User: "Find all Select tools in the workflow"
   → find_tools(workflow="...", plugin_type="AlteryxSelect")

2. User: "In tool 375, deselect field IBCONO and rename IBFACI to FACILITY"
   → update_select_tool(workflow="...", tool_id=375, 
                        field_updates='{"IBCONO": {"selected": false}, 
                                       "IBFACI": {"rename": "FACILITY"}}')

Pattern 2: Update SQL for OCI Compliance

1. User: "Show me all database input tools"
   → find_tools(workflow="...", plugin_type="DbFileInput")

2. User: "Update the SQL in tool 12 and remove all comments"
   → update_sql_query(workflow="...", tool_id=12, 
                      new_query="SELECT...", remove_comments=true)

Pattern 3: Change Annotations

1. User: "Find tools connected to v12Live"
   → find_tools(workflow="...", annotation_pattern="v12Live")

2. User: "Update annotation for tool 12 to show production connection"
   → update_annotation(workflow="...", tool_id=12, 
                       new_annotation="dcm:prod-oracle\\nQuery=...")

Pattern 4: Create New Workflow

User: "Create a workflow that reads from TextInput and shows Browse output"
→ create_workflow(output_path="...", 
                  tools_config='[{"plugin": "TextInput", ...}, 
                                 {"plugin": "Browse", ...}]',
                  connections='[{"origin": 1, "destination": 2}]')

Advanced Features

OCI Compliance

All SQL operations automatically handle Oracle Instant Client requirements:

  • Removes -- style comments (not supported in OCI)
  • Preserves multi-line queries
  • Maintains query formatting

Dry Run Mode

All editing tools support dry_run=true to preview changes without writing to disk.

Pattern Matching

The MCP uses efficient XML pattern matching to locate tools:

  • By Plugin type (partial match supported)
  • By ToolID (exact match)
  • By annotation text (case-insensitive substring)

Container Support

Tools within containers are fully supported:

  • Search recurses into nested containers
  • Container paths preserved in results
  • Edits work on tools at any depth

Architecture

alteryx-mcp/
├── alteryx_mcp/
│   ├── server.py          # MCP FastMCP server exposing 8 tools
│   └── __init__.py
├── pyproject.toml         # Package metadata
└── README.md              # This file

The server is a thin wrapper around alteryx_mcp.py which provides:

  • XML parsing and manipulation
  • Tool configuration updates
  • Workflow creation
  • Safe file writing with proper encoding

Troubleshooting

Tool not found: Verify ToolID exists using find_tools()

SQL comments not removed: Ensure remove_comments=true is set

Workflow won't open in Alteryx: Check XML formatting; use dry_run first

Connection update failed: Verify UUID format for connection IDs

Field not updated: Check exact field name spelling (case-sensitive)


Contributing

This MCP server is part of the Alteryx MCP project. To extend:

  1. Add new functions to alteryx_mcp/alteryx_mcp.py
  2. Expose via @mcp.tool() decorators in server.py
  3. Update this README with examples
  4. Test with real workflows

License

Internal tool for Alteryx MCP project use.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured