Skip to main content
Glama

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

Related MCP server: Databricks MCP Server

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.

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thinhdao276/alteryx-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server