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.
- Advanced Search: Find users, workflows, and assets with flexible search options
- Workflow Operations: Execute, transfer, and manage workflows with full control
- Workflow Assets: Download workflow packages and extract XML for analysis
- Job Monitoring: Track and manage workflow execution jobs in real-time
- Collections Management: Create, update, delete, and organize collections
- User Management: Manage users, their assets, and permissions efficiently
- Schedule Management: Create and manage workflow schedules and automation
- Credential Management: Handle server credentials and secure connections
- Python 3.10+ - Modern Python with type hints support
- Alteryx Server - With API access enabled
- OAuth2 Credentials - Client ID and Secret for authentication
# 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 authentication
Transport Options:
stdio
: Standard input/output (recommended for Claude Desktop)sse
: Server-Sent Eventsstreamable-http
: HTTP streaming
For 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:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Model Context Protocol - The MCP specification
- Claude Desktop - Claude Desktop application
Made with ❤️ for the community