
Alteryx
STDIOMCP server for comprehensive Alteryx Server interaction and workflow management.
MCP server for comprehensive Alteryx Server interaction and workflow management.
This is NOT an official implementation.
This project is a personal initiative and is not affiliated with, endorsed by, or supported by any company. Even if the maintainer is an employee of a related company, this project is developed independently without any official backing or support.
A Model Context Protocol (MCP) server that provides a comprehensive interface to Alteryx Servers. This wrapper enables AI assistants and other MCP clients to interact with Alteryx Server for managing workflows, collections, users, schedules, credentials, and more.
# Install uv if you haven't already curl -LsSf https://astral.sh/uv/install.sh | sh # Install the MCP server uv pip install mcp-server-alteryx
pip install mcp-server-alteryx
git clone https://github.com/jupiterbak/AYX-MCP-Wrapper.git cd AYX-MCP-Wrapper uv sync uv run pip install -e .
Set up your Server credentials using environment variables:
# Required: Server API URL export ALTERYX_API_HOST="https://your-server.com/webapi/" # Required: OAuth2 Client Credentials export ALTERYX_CLIENT_ID="your-client-id" export ALTERYX_CLIENT_SECRET="your-client-secret" # Optional: SSL Verification (default: true) export ALTERYX_VERIFY_SSL="1" # Optional: temporary folder export ALTERYX_TEMP_DIRECTORY="your-temp-directory" # Optional: Logging level export LOG_LEVEL="INFO"
Alternatively, create a .env
file in your project root:
ALTERYX_API_HOST=https://your-server.com/webapi/ ALTERYX_CLIENT_ID=your-client-id ALTERYX_CLIENT_SECRET=your-client-secret ALTERYX_VERIFY_SSL=1 ALTERYX_TEMP_DIRECTORY=your-temp-directory LOG_LEVEL=INFO
To use this MCP server with Claude Desktop, add the following configuration to your Claude Desktop settings:
{ "mcpServers": { "alteryx": { "command": "uvx", "args": ["mcp-server-alteryx", "--transport", "stdio"], "env": { "ALTERYX_API_HOST": "https://your-server.com/webapi/", "ALTERYX_CLIENT_ID": "your-client-id", "ALTERYX_CLIENT_SECRET": "your-client-secret", "ALTERYX_VERIFY_SSL": "1", "ALTERYX_TEMP_DIRECTORY": "your-temp-directory" } } } }
However, we recommend to use it in combination with the "Sequential Thinking" tool:
```json
{ "mcpServers": {
"sequential-thinking": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
]
},
"alteryx": {
"command": "uvx",
"args": ["mcp-server-alteryx", "--transport", "stdio"],
"env": {
"ALTERYX_API_HOST": "http://localhost/webapi/",
"ALTERYX_CLIENT_ID": "your-client-id",
"ALTERYX_CLIENT_SECRET": "your-client-secret",
"ALTERYX_VERIFY_SSL": "1",
"ALTERYX_TEMP_DIRECTORY": "your-temp-directory"
}
}
}
}
Configuration Options:
command
: The uvx executable to useargs
: Command line arguments for the MCP serverenv
: Environment variables for Server authenticationTransport Options:
stdio
: Standard input/output (recommended for Claude Desktop)sse
: Server-Sent Eventsstreamable-http
: HTTP streamingFor Cursor IDE integration, add to your Cursor settings:
{ "mcpServers": { "alteryx": { "command": "uvx", "args": ["mcp-server-alteryx", "--transport", "stdio"], "env": { "ALTERYX_API_HOST": "https://your-alteryx-server.com/webapi/", "ALTERYX_CLIENT_ID": "your-client-id", "ALTERYX_CLIENT_SECRET": "your-client-secret", "ALTERYX_TEMP_DIRECTORY": "your-temp-directory" } } } }
The MCP server can be run with different transport options:
# Using stdio transport (default) uvx run src.main --transport stdio # Using Server-Sent Events (SSE) uvx run src.main --transport sse # Using HTTP streaming uvx run src.main --transport streamable-http # Set log level uvx run src.main --log-level DEBUG # Run with custom configuration uvx run src.main --transport stdio --log-level INFO
The MCP server provides comprehensive tools organized by functionality:
Function | Description | Parameters |
---|---|---|
get_all_collections() | Retrieve all accessible collections | None |
get_collection_by_id(collection_id) | Get specific collection details | collection_id: str |
create_collection(name) | Create a new collection | name: str |
update_collection_name_or_owner(collection_id, name, owner_id) | Update collection properties | collection_id: str, name: str, owner_id: str |
add_workflow_to_collection(collection_id, workflow_id) | Add workflow to collection | collection_id: str, workflow_id: str |
remove_workflow_from_collection(collection_id, workflow_id) | Remove workflow from collection | collection_id: str, workflow_id: str |
add_schedule_to_collection(collection_id, schedule_id) | Add schedule to collection | collection_id: str, schedule_id: str |
remove_schedule_from_collection(collection_id, schedule_id) | Remove schedule from collection | collection_id: str, schedule_id: str |
delete_collection(collection_id) | Delete a collection | collection_id: str |
Function | Description | Parameters |
---|---|---|
get_all_workflows() | Retrieve all accessible workflows | None |
get_workflow_by_id(workflow_id) | Get specific workflow details | workflow_id: str |
update_workflow_name_or_comment(workflow_id, name, comment) | Update workflow properties | workflow_id: str, name: str, comment: str |
transfer_workflow(workflow_id, new_owner_id) | Transfer workflow ownership | workflow_id: str, new_owner_id: str |
get_workflow_jobs(workflow_id) | Get jobs for a workflow | workflow_id: str |
start_workflow_execution(workflow_id, input_data) | Start workflow execution and return job ID | workflow_id: str, input_data: List[InputData] |
execute_workflow_with_monitoring(workflow_id, input_data) | Execute workflow and monitor completion | workflow_id: str, input_data: List[InputData] |
download_workflow_package_file(workflow_id, output_directory) | Download workflow package | workflow_id: str, output_directory: str |
get_workflow_xml(workflow_id) | Extract workflow XML | workflow_id: str |
Function | Description | Parameters |
---|---|---|
get_all_users() | Retrieve all accessible users | None |
get_user_by_id(user_id) | Get specific user details | user_id: str |
get_user_by_email(email) | Find user by email | email: str |
get_user_by_name(name) | Find user by name | name: str |
get_user_by_first_name(first_name) | Find user by first name | first_name: str |
get_all_user_assets(user_id) | Get all assets owned by user | user_id: str |
get_user_assets_by_type(user_id, asset_type) | Get specific asset types | user_id: str, asset_type: str |
update_user_details(user_id, first_name, last_name, email) | Update user information | user_id: str, first_name: str, last_name: str, email: str |
transfer_all_assets(user_id, new_owner_id, transfer_workflows, transfer_schedules, transfer_collections) | Transfer user assets | user_id: str, new_owner_id: str, transfer_workflows: bool, transfer_schedules: bool, transfer_collections: bool |
deactivate_user(user_id) | Deactivate a user | user_id: str |
reset_user_password(user_id) | Reset user password | user_id: str |
Function | Description | Parameters |
---|---|---|
get_all_schedules() | Retrieve all accessible schedules | None |
get_schedule_by_id(schedule_id) | Get specific schedule details | schedule_id: str |
deactivate_schedule(schedule_id) | Deactivate a schedule | schedule_id: str |
activate_schedule(schedule_id) | Activate a schedule | schedule_id: str |
update_schedule_name_or_comment(schedule_id, name, comment) | Update schedule properties | schedule_id: str, name: str, comment: str |
change_schedule_owner(schedule_id, new_owner_id) | Change schedule ownership | schedule_id: str, new_owner_id: str |
Function | Description | Parameters |
---|---|---|
get_all_job_messages(job_id) | Get messages for a specific job | job_id: str |
get_job_by_id(job_id) | Get job details | job_id: str |
get_job_output_data(job_id) | Get output data files from completed job | job_id: str |
Function | Description | Parameters |
---|---|---|
get_all_credentials() | Retrieve all accessible credentials | None |
get_credential_by_id(credential_id) | Get specific credential details | credential_id: str |
lookup_connection(connection_id) | Lookup DCM connection | connection_id: str |
get_connection_by_id(connection_id) | Get connection details | connection_id: str |
# Clone the repository git clone https://github.com/jupiterbak/AYX-MCP-Wrapper.git cd AYX-MCP-Wrapper # Install dependencies uv sync # Install in development mode uv run pip install -e .
We welcome contributions! Please follow these steps:
git checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ for the community